博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS10适配远程推送
阅读量:5912 次
发布时间:2019-06-19

本文共 2934 字,大约阅读时间需要 9 分钟。

hot3.png

iOS10正式版发布之后,网上各种适配XCode8以及iOS10的文章满天飞。但对于iOS10适配远程推送的文章却不多。iOS10对于推送的修改还是非常大的,新增了UserNotifications Framework,今天就结合自己的项目,说一说实际适配的情况。

 

一、Capabilities中打开Push Notifications 开关

在XCode7中这里的开关不打卡,推送也是可以正常使用的,但是在XCode8中,这里的开关必须要打开,不然会报错:

Error Domain=NSCocoaErrorDomain Code=3000 "未找到应用程序的“aps-environment”的授权字符串" UserInfo={NSLocalizedDescription=未找到应用程序的“aps-environment”的授权字符串}

打开后会生成entitlements文件,在这里可以设置APS Environment,asp-environment的值为development或者production,代表开发环境或者生产环境。参考官方文档:

 

二、推送的注册

首先引入UserNotifications Framework,

 

  1. import <UserNotifications/UserNotifications.h>

iOS10修改了注册推送的方法,这里我们又要对不同版本分别进行设置了。在application didFinishLaunchingWithOptions方法中修改以前的推送设置(我只实现了iOS8以上的设置)

 

  1. if (IOS_VERSION >= 10.0) {
  2.         UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
  3.         center.delegate = self;
  4.         [center requestAuthorizationWithOptions:(UNAuthorizationOptionBadge | UNAuthorizationOptionSound | UNAuthorizationOptionAlert) completionHandler:^(BOOL granted, NSError * _Nullable error) {
  5.             if (!error) {
  6.                 DLog(@"request authorization succeeded!");
  7.             }
  8.         }];
  9.     } else {
  10.         if ([application respondsToSelector:@selector(registerUserNotificationSettings:)]) {
  11.             //IOS8,创建UIUserNotificationSettings,并设置消息的显示类类型
  12.             UIUserNotificationSettings *notiSettings = [UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeBadge | UIUserNotificationTypeAlert | UIUserNotificationTypeSound) categories:nil];
  13.  
  14.             [application registerUserNotificationSettings:notiSettings];
  15.         }
  16.     }

 

三、UNUserNotificationCenterDelegate代理实现

在iOS10中处理推送消息需要实现UNUserNotificationCenterDelegate的两个方法:

 

  1. - (void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler
  2.  
  3.  
  4. - (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler 

其中第一个方法为App在前台的时候收到推送执行的回调方法,第二个为App在后台的时候,点击推送信息,进入App后执行的 回调方法。

以前处理推送,信息是在userInfo参数中,而新方法中表明上看并没有这个参数,其实我们一样可以获取到userInfo,如下:

 

  1. /// App在前台时候回调
  2. - (void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler {
  3.     NSDictionary *userInfo = notification.request.content.userInfo;
  4.     [self handleRemoteNotificationForcegroundWithUserInfo:userInfo];
  5. }
  6.  
  7. /// App在后台时候点击推送调用
  8. - (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler {
  9.     NSDictionary *userInfo = response.notification.request.content.userInfo;
  10.     [self handleRemoteNotificationBackgroundWithUserInfo:userInfo];
  11. }

完成上面三个步骤的设置,对于iOS10的推送设置基本就适配了。要想自定义Notification Content或者实现其他NotificationAction请参考其他文章。这里只是做了对iOS10的适配。

转载于:https://my.oschina.net/u/2361492/blog/748173

你可能感兴趣的文章
delphi实现计算器
查看>>
CentOS7 网卡命名
查看>>
Django进阶之缓存和信号
查看>>
DataGridView 设定单元格只读:
查看>>
缺陷跟踪工具jira和团队协作与项目管理工具conflunce
查看>>
shell特性及变量设置
查看>>
RHEL6入门系列之十五,管理用户和组
查看>>
特斯拉悄悄搞出无人车AI芯片,已经投产测试,而且没带英伟达
查看>>
LVS、Nginx和HAProxy负载均衡器对比总结
查看>>
Samsung_tiny4412(驱动笔记01)----linux 3.5,U-Boot,Busybox,SD卡启动环境搭建
查看>>
爬虫攻略(一)
查看>>
正则表达式语法
查看>>
零元学Expression Blend 4 - Chapter 45 ListBox里的物件不能换行吗?
查看>>
Elasticsearch上手——几个基本概念
查看>>
WebView.简单使用_资料
查看>>
CAN协议栈总体架构
查看>>
python下正则表达式的随笔记录
查看>>
Wp8程序加载运行顺序(菜鸟篇)
查看>>
Socket,SocketImpl与SocketImplFactory的关系
查看>>
【微信开发】—7200s限制,非数据库
查看>>