全部产品
存储与CDN 数据库 域名与网站(万网) 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网 钉钉智能硬件
CDN

iOS SDK开发指南

更新时间:2017-09-27 15:37:18

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

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

1. SDK集成

  • 指定Master仓库和阿里云仓库:
  1. source 'https://github.com/CocoaPods/Specs.git'
  2. source 'https://github.com/aliyun/aliyun-specs.git'
  • 添加依赖:
  1. pod 'AlicloudMAC', '~> 1.0.0'

2. SDK使用

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

2.1 获取加速示例并初始化

  1. AlicloudMACService *service = [AlicloudMACService sharedInstance];
  2. [service initWithAppKey:@"******" appSecret:@"******" callback:^(BOOL res, NSError *error) {
  3. if (res) {
  4. NSLog(@"MAC SDK init success.");
  5. } else {
  6. NSLog(@"MAC SDK init failed, error: %@", error);
  7. }
  8. }];

2.2 加速请求配置

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

  • 若原生网络请求基于 NSURLSession(session对象配置有自定义NSURLSessionConfiguration),需注册移动加速的 MACURLProtocol,如下所示:

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

2.3 自定义降级策略

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

2.4 停止和重启移动加速

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

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

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

3. API接口

  1. /**
  2. 降级策略定义
  3. */
  4. @protocol MACDegradationDelegate <NSObject>
  5. - (BOOL)shouldDegrade:(NSString *)hostName;
  6. @end
  7. /**
  8. SDK回调Handler定义
  9. @param res 回调结果
  10. */
  11. typedef void (^MACCallbackHandler)(CallbackResult *res);
  12. /**
  13. SDK初始化并开启移动加速
  14. @param appKey AppKey
  15. @param appSecret AppSecret
  16. @param callback 回调
  17. */
  18. - (void)initWithAppKey:(NSString *)appKey
  19. appSecret:(NSString *)appSecret
  20. callback:(MACCallbackHandler)callback;
  21. /**
  22. 设置自定义降级策略
  23. @param delegate 降级策略
  24. */
  25. - (void)setDegradationPolicy:(id<MACDegradationDelegate>)delegate;
  26. /**
  27. 停止移动加速
  28. */
  29. - (void)stop:(MACCallbackHandler)callback;
  30. /**
  31. 重启移动加速
  32. */
  33. - (void)restart:(MACCallbackHandler)callback;
  34. /**
  35. 日志开关
  36. @param enabled YES: 打开; NO: 关闭(默认)
  37. */
  38. - (void)setLogEnabled:(BOOL)enabled;

4. 示例

  1. /**
  2. 初始化MAC SDK
  3. */
  4. - (void)initMACSDK {
  5. AlicloudMACService *service = [AlicloudMACService sharedInstance];
  6. [service setDegradationPolicy:(id)self];
  7. [service initWithAppKey:@"******" appSecret:@"******" callback:^(BOOL res, NSError *error) {
  8. if (res) {
  9. NSLog(@"MAC SDK init success.");
  10. } else {
  11. NSLog(@"MAC SDK init failed, error: %@", error);
  12. }
  13. }];
  14. }
  15. /**
  16. 自定义降级策略
  17. @param url 请求URL
  18. @return YES: 降级到原生网络库; NO: 不降级
  19. */
  20. - (BOOL)shouldDegrade:(NSURL *)url {
  21. /* 若请求Host为a.b.com,降级走原生网络库 */
  22. if ([[url host] isEqualToString:@"a.b.com"]) {
  23. return YES;
  24. }
  25. return NO;
  26. }
  27. static NSURLSession *_session;
  28. /**
  29. 发网络请求
  30. */
  31. - (void)sendNetworkReqeust {
  32. static dispatch_once_t onceToken;
  33. dispatch_once(&onceToken, ^{
  34. /* 若基于NSURLSession发网络请求并配置SessionConfiguration,需要注册MACURLProtocol */
  35. if (!_session) {
  36. NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
  37. configuration.protocolClasses = @[ [MACURLProtocol class] ];
  38. _session = [NSURLSession sessionWithConfiguration:configuration];
  39. }
  40. });
  41. NSURL *url = [NSURL URLWithString:@"xxxxxx"];
  42. NSURLRequest *request = [NSURLRequest requestWithURL:url];
  43. NSURLSessionDataTask *task = [_session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
  44. if (error) {
  45. NSLog(@"Error: %@", error);
  46. return;
  47. }
  48. NSLog(@"Content: %@", [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);
  49. }];
  50. [task resume];
  51. }
本文导读目录