推送消息通常用於事件通知。在蘋果後臺以及XCode成功配置推送消息後,能夠由後臺(或者任何程序),和APNS(Apple Push Notification Server)通訊後觸發。常規的消息推送能夠在(由APNS token)指定用戶的屏幕頂端生成一則消息欄,並伴隨消息音效。可是,推送消息也能夠附着內容,而且讓iOS執行一段App的後臺代碼。這類推送則須要額外的配置,對消息體也有特殊要求。函數
本文主要總結這些額外的配置項,和其中隱晦的回調。fetch
Project->Capabilities->Background Models->Remote notification 打勾。code
在推送消息體裏面必須包含"content-available"項而且設置值爲"1"。
知足以上兩點後,推送消息則能夠激活在掛起狀態(suspension)的App,並讓它進入後臺狀態(background)。說具體點,推送消息能夠觸發iOS激活App註冊的回調函數。token
下面解釋"Silent Push Notification"的幾種特殊狀況事件
當App既註冊了didReceiveRemoteNotification:fetchCompletionHandler:
,也註冊了didReceiveRemoteNotification:
時,當消息發送到設備時,只有didReceiveRemoteNotification:fetchCompletionHandler:
會被調用。內存
當App在前臺運行時, 上述的兩個回調也能夠被調用,可是不會生成屏幕頂端的消息欄,也沒有提示音。回調函數
即便以上的配置和條件都知足,若是App被殺死了(說直接點,被用戶踢了,或者內存用多了被系統踢了),即,App在終止狀態(killed),iOS不會調用上述回調函數的。it
下面要解釋關於用戶點擊(消息欄)的事件產生
a) App在終止狀態: iOS只會調用DidFinishLaunchingWithOptions:
。
b) App在其餘狀態: iOS會調用上述回調。io
注意, 和網上不少錯誤的文章不一樣的是, Background fetch 是不須要打勾的。後臺