《笔记》iOS deviceToken的获取时机及推送相关

最近几天在做一个新项目,需要用到deviceToken,于是有了以下的问题:
1、 deviceToken是什么时机能获取,即

1
2
3
- (void)application:(UIApplication *)application
didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
// Tells the delegate that the app successfully registered with Apple Push Notification service (APNs).

印象中是在点了弹出通知权限的alert的同意键,然后才开始注册apns,然后回调该方法,获取deviceToken。
但是如此是满足不了当前的需求的,我需要无论允许还是拒绝,都能拿到deviceToken,解决方案为:
勾选Background Modes中的remote notificationbackground fetch,即可达到在注册notificationSettings的时候获取到deviceToken,也就是弹权限请求alert的同时。(注:其实只勾选前者即可)

2、 由上引发思考,上面勾选的两个设置有什么作用?
说来惭愧,这俩都是iOS 7就引入的新特性了。。。。一个是后台应用刷新,一个是静默推送(Silent Remote Notifications),网上关于这俩的资源还是很多的,也没啥可说的,照着文档来就行

3、 为什么勾选(打开)静默推送就可以不经过用户允许,直接拿到deviceToken 呢,那么是不是可以无视用户的通知权限来进行静默推送呢?于是测试了一下,果然如此,在我点击了拒绝之后,仍然能收到静默推送
这里写图片描述

同时发现,app前台运行时,普通推送也能收到,只是不会展示,猜测后台时也会收到,等回头不忙了,再写个UNNotificationServiceExtension 测试一下

推送作为一个很重要的功能,几乎每次iOS大版本都会有改动,用起来还是谨慎一些为好,多测试一下

显示 Gitment 评论