iOS新老推送代理方法的觸發時機

先來說下iOS7到iOS10之間的情況,接收通知只有兩個方法

  • (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
  • (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))completionHandler

如果寫了第二個,第一個則不會被執行,第一個方法在iOS10之後被棄用,第二個方法則用來接受iOS7-9的遠程通知和iOS10之後的靜默通知,看蘋果的描述
蘋果關於推送方法的描述

翻譯:使用UserNotifications Framework - [UNUserNotificationCenterDelegate willPresentNotification:withCompletionHandler:]或 - [UNUserNotificationCenterDelegate didReceiveNotificationResponse:withCompletionHandler:]用於用戶可見通知, - [UIApplicationDelegate application:didReceiveRemoteNotification:fetchCompletionHandler:]用於靜默遠程通知

下面就只涉及到三個方法了

  1. didReceiveNotificationResponse:withCompletionHandler
  2. willPresentNotification
  3. didReceiveRemoteNotification
  • (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))completionHandler

iOS7-9之間用來接收通知和iOS10之後用來接受靜默通知。靜默推送參考
iOS10以後,app在前臺或者後臺收到通知時觸發的方法(如果集成了個推第三方,這個方法也不會觸發,而是會走第三方長連接)。
iOS10以後app被殺掉時收到靜默通知不會觸發。
當content-available=1且app在前臺或者後臺時不會在通知中心顯示通知),可用來做靜默推送進行後臺數據下載或者刷新UI等操作,需要打開app後臺模式。支持iOS7以上。
關於靜默推送(a) 增加content-available字段,並設成1 。(b) alert字段必須爲空,否則收到的就不是靜默推送而是普通通知。 (c)sound字段設不設不影響靜默推送的接收,只不過會出現符不符合需求的問題。還有一個badge屬性,設置的話也不影響靜默推送的接收,但是和sound一樣。
當普通推送中有content-available=1時,app在前臺和後臺時也會觸發該方法。

willPresentNotification

app在前臺收到通知被調用,支持iOS10以上

didReceiveNotificationResponse

支持iOS10以上,通過以下三種方式被調用

  1. 點擊通知進入應用
  2. 點擊action
  3. 清除了category是UNNotificationCategoryOptionCustomDismissAction的通知。

PS:

測試通知的生產環境需要打adhoc包進行測試。使用xcode的weindow->organizer可以查看之前已經打包的界面,在包上右鍵show in finder
,並顯示包內容,找到Products文件夾下的.app後綴的文件,在外面新建文件夾命名爲Payload,將.app拷貝進去,壓縮文件夾並該後綴爲.ipa之後,就可以安裝在手機上測試了。

參考鏈接1
參考鏈接2
參考鏈接3

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章