全部产品
存储与CDN 数据库 安全 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网 钉钉智能硬件
移动推送

iOS SDK配置

更新时间:2017-11-07 15:42:29

1. 创建应用

到阿里云移动推送控制台创建应用,应用创建完成后,进入移动推送相关模块进行设置,具体操作请参见 创建APP

2. SDK下载和集成

2.1 手动集成

2.1.1 控制台下载

  • 在移动推送控制台进行SDK下载;

ios-sdk-download

2.1.2 公共包依赖

  • libz.tbd
  • libresolv.tbd
  • CoreTelephony.framework
  • SystemConfiguration.framework
  • libsqlite3.tbd

2.1.3 SDK目录结构

  • CloudPushSDK.framework
  • AlicloudUtils.framework
  • UTDID.framework
  • UTMini.framework

2.1.4 引入Framework

  • Xcode中,直接把下载SDK目录中的framework拖入对应Target下即可,在弹出框勾选Copy items if needed
  • Build Phases -> Link Binary With Libraries中,引入2.1.2列出的公共包;

2.2 Pod依赖

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

(~>为模糊指定版本号方式,~> 1.9.2表明引用版本位于1.9.2 <= version < 2.0之间的最新版本SDK,用户可参考Podfile Syntax Reference,根据项目需要指定SDK版本。)

2.3 工程引入头文件

  1. #import <CloudPushSDK/CloudPushSDK.h>

2.4 说明

  • 应用的targets -> Build Settings -> Linking -> Other Linker Flags,请加上-ObjC这个属性,否则推送服务无法正常使用;如果之前已经设置了force_load,需要设置-force_load <framework_path>/CloudPushSDK.framework/CloudPushSDK

  • 移动推送iOS SDK已经完成ATS适配,请求都以HTTPS发出,无需在Info.plist中进行ATS配置。

  • 若SDK集成过程中出现UTDID冲突,请参考 阿里云-移动云产品SDK UTDID冲突解决方案

3. Push SDK使用

  • 请参照以下代码完成SDK的初始化,appKey/appSecret的获取参考创建App
  • 注意:百川云推送迁移来的用户,不要使用百川平台获取到的appKey/appSecret,参考上述链接从阿里云平台获取,否则会发生鉴权错误。
  • > iOS 10系统的设备需注意,源于工信部的要求,国行手机首次安装App时,会弹出一个询问用户“是否允许应用访问数据”的弹框,如下图所示。在用户点击允许前,或点击不允许,App的网络环境是不通的,会导致推送SDK的初始化失败,推送服务不能正常使用。推送各接口内部是有重试机制的,但是,建议用户在业务层,也要捕获处理SDK接口错误回调,确保正确获知SDK接口调用状态。

ios-network-alert

  1. - (void)initCloudPush {
  2. // SDK初始化
  3. [CloudPushSDK asyncInit:@"*****" appSecret:@"*****" callback:^(CloudPushCallbackResult *res) {
  4. if (res.success) {
  5. NSLog(@"Push SDK init success, deviceId: %@.", [CloudPushSDK getDeviceId]);
  6. } else {
  7. NSLog(@"Push SDK init failed, error: %@", res.error);
  8. }
  9. }];
  10. }
  • 向苹果APNs注册获取deviceToken并上报到阿里云推送服务器;
  1. /**
  2. * 注册苹果推送,获取deviceToken用于推送
  3. *
  4. * @param application
  5. */
  6. - (void)registerAPNS:(UIApplication *)application {
  7. if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) {
  8. // iOS 8 Notifications
  9. [application registerUserNotificationSettings:
  10. [UIUserNotificationSettings settingsForTypes:
  11. (UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge)
  12. categories:nil]];
  13. [application registerForRemoteNotifications];
  14. }
  15. else {
  16. // iOS < 8 Notifications
  17. [[UIApplication sharedApplication] registerForRemoteNotificationTypes:
  18. (UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound)];
  19. }
  20. }
  21. /*
  22. * 苹果推送注册成功回调,将苹果返回的deviceToken上传到CloudPush服务器
  23. */
  24. - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
  25. [CloudPushSDK registerDevice:deviceToken withCallback:^(CloudPushCallbackResult *res) {
  26. if (res.success) {
  27. NSLog(@"Register deviceToken success.");
  28. } else {
  29. NSLog(@"Register deviceToken failed, error: %@", res.error);
  30. }
  31. }];
  32. }
  33. /*
  34. * 苹果推送注册失败回调
  35. */
  36. - (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {
  37. NSLog(@"didFailToRegisterForRemoteNotificationsWithError %@", error);
  38. }
  • 推送消息到来监听;
  1. /**
  2. * 注册推送消息到来监听
  3. */
  4. - (void)registerMessageReceive {
  5. [[NSNotificationCenter defaultCenter] addObserver:self
  6. selector:@selector(onMessageReceived:)
  7. name:@"CCPDidReceiveMessageNotification"
  8. object:nil];
  9. }
  10. /**
  11. * 处理到来推送消息
  12. *
  13. * @param notification
  14. */
  15. - (void)onMessageReceived:(NSNotification *)notification {
  16. CCPSysMessage *message = [notification object];
  17. NSString *title = [[NSString alloc] initWithData:message.title encoding:NSUTF8StringEncoding];
  18. NSString *body = [[NSString alloc] initWithData:message.body encoding:NSUTF8StringEncoding];
  19. NSLog(@"Receive message title: %@, content: %@.", title, body);
  20. }
  • 通知打开监听:
  1. - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
  2. // 点击通知将App从关闭状态启动时,将通知打开回执上报
  3. // [CloudPushSDK handleLaunching:launchOptions];(Deprecated from v1.8.1)
  4. [CloudPushSDK sendNotificationAck:launchOptions];
  5. return YES;
  6. }
  7. /*
  8. * App处于启动状态时,通知打开回调
  9. */
  10. - (void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary*)userInfo {
  11. NSLog(@"Receive one notification.");
  12. // 取得APNS通知内容
  13. NSDictionary *aps = [userInfo valueForKey:@"aps"];
  14. // 内容
  15. NSString *content = [aps valueForKey:@"alert"];
  16. // badge数量
  17. NSInteger badge = [[aps valueForKey:@"badge"] integerValue];
  18. // 播放声音
  19. NSString *sound = [aps valueForKey:@"sound"];
  20. // 取得Extras字段内容
  21. NSString *Extras = [userInfo valueForKey:@"Extras"]; //服务端中Extras字段,key是自己定义的
  22. NSLog(@"content = [%@], badge = [%ld], sound = [%@], Extras = [%@]", content, (long)badge, sound, Extras);
  23. // iOS badge 清0
  24. application.applicationIconBadgeNumber = 0;
  25. // 通知打开回执上报
  26. // [CloudPushSDK handleReceiveRemoteNotification:userInfo];(Deprecated from v1.8.1)
  27. [CloudPushSDK sendNotificationAck:userInfo];
  28. }

如果使用推送模块,请参考移动推送常见问题

本文导读目录