最近幾天在做一個新項目,需要用到deviceToken,於是有了以下的問題:
1、 deviceToken是什麼時機能獲取,即
- (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 notification 和 background fetch,即可達到在註冊notificationSettings的時候獲取到deviceToken,也就是彈權限請求alert的同時。(注:其實只勾選前者即可)
2、 由上引發思考,上面勾選的兩個設置有什麼作用?
說來慚愧,這倆都是iOS 7就引入的新特性了。。。。一個是後臺應用刷新,一個是靜默推送(Silent Remote Notifications),網上關於這倆的資源還是很多的,也沒啥可說的,照着文檔來就行
3、 爲什麼勾選(打開)靜默推送就可以不經過用戶允許,直接拿到deviceToken 呢,那麼是不是可以無視用戶的通知權限來進行靜默推送呢?於是測試了一下,果然如此,在我點擊了拒絕之後,仍然能收到靜默推送
同時發現,app前臺運行時,普通推送也能收到,只是不會展示,猜測後臺時也會收到,等回頭不忙了,再寫個UNNotificationServiceExtension 測試一下
推送作爲一個很重要的功能,幾乎每次iOS大版本都會有改動,用起來還是謹慎一些爲好,多測試一下