IOS10 系统更新,对程序员来说最大的改变就是做好布局和推送的兼容处理。布局兼容比较好处理,下面总结下IOS10推送问题的处理经验
OS10推送新增了UserNotifications Framework,导入引用 #import <UserNotifications/UserNotifications.h> 并在 AppDelegate didFinishLaunchingWithOptions 方法中添加注册。具体参考如下:
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 10.f) { UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter]; center.delegate = self; [center requestAuthorizationWithOptions:(UNAuthorizationOptionBadge | UNAuthorizationOptionSound | UNAuthorizationOptionAlert) completionHandler:^(BOOL granted, NSError * _Nullable error) { if (!error) { NSLog(@"succeeded!"); } }]; }注册成功,即可在设置-通知中 看到对应 app 的 通知设置信息,详细参考如下文章:iOS10推送通知适配
如果在推送证书都正确的情况下,推送 注册检测通不过。说明配置存在问题,请按照如下步骤核对:
a、在XCode 中选中项目 -> 选择TARGETS项 -> 选择 Capabilities 开启 "Push Notification"项
b、在XCode 中选中项目 -> 选择TARGETS项 -> 选择 Capabilities 开启 "Background Modes"项,并勾选 “Remote notification” 项
更多详细内容,请参考如下文章:iOS10 推送最新配置
公司app使用的 友盟推送,把情况反馈给对方,对方技术回复是 IOS10 系统的bug。经过本人在 10.0.1 和 10.0.2 上多次测试,关闭(使用的系统关闭方法 [[UIApplication sharedApplication] unregisterForRemoteNotifications],也收不到)后开启确实收不到。但是,却发现 通过系统【设置】 -> 【通知】哪里关闭后开启能够正常接收推送。折中的处理办法是引导用户去 系统 - 设置 - 通知中关闭 。详细代码如下:
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 10.f) { // IOS10 推送关闭后开启 收不到信息,但是通过[设置] - [通知] 关闭后开启,能正常收到 NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString]; if ([[UIApplication sharedApplication] canOpenURL:url]) { [[UIApplication sharedApplication] openURL:url]; } } //关闭推送 else{ //..此处使使用正常的关闭,不受影响 } 以上方法,亲测有效。希望给遇到同样困扰的同行们参考!