开发者社区> 问答> 正文

iOS SDK开发指南

本文档介绍了MAC iOS SDK的使用方式。


集成前可参考: 移动加速 iOS Demo


1. SDK集成

  • 指定Master仓库和阿里云仓库:source 'https://github.com/CocoaPods/Specs.git'
  • source 'https://github.com/aliyun/aliyun-specs.git'

  • 添加依赖:pod 'AlicloudMAC', '~> 1.0.0'



2. SDK使用


移动加速SDK内部Log查看Tips:可通过过滤字段[MAC查看。


2.1 获取加速示例并初始化

  • AppKey和AppSecret可在 App列表页 获取。AlicloudMACService *service = [AlicloudMACService sharedInstance];
  • [service initWithAppKey:@"******" appSecret:@"******" callback:^(BOOL res, NSError *error) {
  •     if (res) {
  •         NSLog(@"MAC SDK init success.");
  •     } else {
  •         NSLog(@"MAC SDK init failed, error: %@", error);
  •     }
  • }];



2.2 加速请求配置


  • 若原生网络请求基于 NSURLConnection 或者 NSURLSession(session对象通过sharedSession:获取)发出,SDK可自动拦截原生网络请求,走到加速链路。

  • 若原生网络请求基于 NSURLSession(session对象配置有自定义NSURLSessionConfiguration),需注册移动加速的 MACURLProtocol,如下所示:NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
  • configuration.protocolClasses = @[ [MACURLProtocol class] ];
  • NSURLSession *session = [NSURLSession sessionWithConfiguration:configuration];

  • 移动加速SDK是通过注册 NSURLProtocol 拦截网络请求,需要注意 NSURLProtocol 的注册顺序。多个 NSURLProtocol 注册后,网络请求拦截为注册的相反顺序。移动加速 MACURLProtocol 的注册时机为SDK初始化时,调用停止和重启接口时,分别为注销和重新注册 MACURLProtocol。
  • 示例:[[AlicloudMACService sharedInstance] initWithAppKey:testAppKey appSecret:testAppSecret callback:^(BOOL res, NSError *error) {
  •     if (res) {
  •         /* HookURLProtocol注册在SDK初始化之后,因此HookURLProtocol先拦截到网络请求 */
  •         [NSURLProtocol registerClass:[HookURLProtocol class]];
  •     }
  • }



2.3 自定义降级策略

  • 用户可设置降级策略,满足降级条件的网络请求,降级走原生网络库链路。
  • 基于下述接口配置:
  1. [backcolor=transparent]-[backcolor=transparent] [backcolor=transparent]([backcolor=transparent]void[backcolor=transparent])[backcolor=transparent]setDegradationPolicy[backcolor=transparent]:([backcolor=transparent]id[backcolor=transparent]<[backcolor=transparent]MACDegradationDelegate[backcolor=transparent]>)[backcolor=transparent]delegate[backcolor=transparent];


2.4 停止和重启移动加速

  • 调用2.1所示的初始化接口,并按照2.2完成配置后,原生网络请求可自动被拦截,走到加速链路。
  • 调用停止接口,停止网络请求拦截。/**
  • 停止移动加速
  • */
  • - (void)stop:(MACCallbackHandler)callback;

  • 调用重启接口,重新恢复网络请求拦截。/**
  • 重启移动加速
  • */
  • - (void)restart:(MACCallbackHandler)callback;



2.5 如何查看网络请求是否加速成功?

  • 打开移动加速SDK Log。
  • SDK初始化成功后,发出网络请求,可看到如下日志:
  1. [backcolor=transparent][[backcolor=transparent]MACURLProtocol[backcolor=transparent]]-[[backcolor=transparent]I[backcolor=transparent]]:[backcolor=transparent] URL[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent][[backcolor=transparent]https[backcolor=transparent]:[backcolor=transparent]//xxx.xxx.com/xx], accelerate type: [2]
  2. [backcolor=transparent][[backcolor=transparent]MACURLProtocol[backcolor=transparent]]-[[backcolor=transparent]D[backcolor=transparent]]:[backcolor=transparent] [backcolor=transparent]Start[backcolor=transparent] loading request[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]<[backcolor=transparent]NSMutableURLRequest[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]0xxxxxxxxxxxxx[backcolor=transparent]>[backcolor=transparent] [backcolor=transparent]{[backcolor=transparent] URL[backcolor=transparent]:[backcolor=transparent] https[backcolor=transparent]:[backcolor=transparent]//xxx.xxx.com/xx }
  • 网络请求结束后,可查看到如下日志,request result1:网络请求成功
  • 0:网络请求失败
accelerate result
  • 1:网络请求加速成功
  • 0:网络请求加速失败[MACACCSNetworkRequest]-[I]: [https://xxx.xxx.com/xx] request result: [1], accelerate result: [1]



3. API接口/**
降级策略定义
*/
@protocol MACDegradationDelegate <NSObject>
- (BOOL)shouldDegrade:(NSString *)hostName;
@end
/**
SDK回调Handler定义
@param res 回调结果
*/
typedef void (^MACCallbackHandler)(CallbackResult *res);
/**
SDK初始化并开启移动加速
@param appKey AppKey
@param appSecret AppSecret
@param callback 回调
*/
- (void)initWithAppKey:(NSString *)appKey
             appSecret:(NSString *)appSecret
              callback:(MACCallbackHandler)callback;
/**
设置自定义降级策略
@param delegate 降级策略
*/
- (void)setDegradationPolicy:(id<MACDegradationDelegate>)delegate;
/**
停止移动加速
*/
- (void)stop:(MACCallbackHandler)callback;
/**
重启移动加速
*/
- (void)restart:(MACCallbackHandler)callback;
/**
日志开关
@param enabled YES: 打开; NO: 关闭(默认)
*/
- (void)setLogEnabled:(BOOL)enabled;





4. 示例/**
初始化MAC SDK
*/
- (void)initMACSDK {
    AlicloudMACService *service = [AlicloudMACService sharedInstance];
    [service setDegradationPolicy:(id)self];
    [service initWithAppKey:@"******" appSecret:@"******" callback:^(BOOL res, NSError *error) {
        if (res) {
            NSLog(@"MAC SDK init success.");
        } else {
            NSLog(@"MAC SDK init failed, error: %@", error);
        }
    }];
}
/**
自定义降级策略
@param url 请求URL
@return YES: 降级到原生网络库; NO: 不降级
*/
- (BOOL)shouldDegrade:(NSURL *)url {
    /* 若请求Host为a.b.com,降级走原生网络库 */
    if ([[url host] isEqualToString:@"a.b.com"]) {
        return YES;
    }
    return NO;
}
static NSURLSession *_session;
/**
发网络请求
*/
- (void)sendNetworkReqeust {
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        /* 若基于NSURLSession发网络请求并配置SessionConfiguration,需要注册MACURLProtocol */
        if (!_session) {
            NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
            configuration.protocolClasses = @[ [MACURLProtocol class] ];
            _session = [NSURLSession sessionWithConfiguration:configuration];
        }
    });
    NSURL *url = [NSURL URLWithString:@"xxxxxx"];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    NSURLSessionDataTask *task = [_session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
        if (error) {
            NSLog(@"Error: %@", error);
            return;
        }
        NSLog(@"Content: %@", [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);
    }];
    [task resume];
}



展开
收起
青衫无名 2017-10-23 15:29:48 2005 0
0 条回答
写回答
取消 提交回答
问答排行榜
最热
最新

相关电子书

更多
跨平台的云服务SDK需要什么 立即下载
滴滴出行iOS端瘦身实践 立即下载
一个跨平台的云服务SDK需要什么 立即下载