天天看點

ios蘋果推送-APNS

什麼是遠端推送通知

顧名思義,就是從遠端伺服器推送給用戶端的通知(需要聯網)遠端推送服務,又稱為APNs(Apple Push Notification Services)

為什麼需要遠端推送通知

  • 傳統擷取資料的局限性 隻要使用者關閉了app,就無法跟app的伺服器溝通,無法從伺服器上獲得最新的資料内容
  • 遠端推送通知可以解決以上問題 不管使用者打開還是關閉app,隻要聯網了,都能接收到伺服器推送的遠端通知

遠端推送通知使用須知

  • 所有的蘋果裝置,在聯網狀态下,都會與蘋果的伺服器建立長連接配接 什麼是長連接配接 隻要聯網了,就一直建立連接配接
  • 長連接配接的作用 時間校準 系統更新 查找我的iPhone .. ...
  • 長連接配接的好處 資料傳輸速度快 資料保持最新狀态

推送原理

蘋果推送其實就是借助了蘋果的APNS來推送的。

步驟:

1:向apns請求注冊通知,需不需要要進行通知發送。(一般都在didFinishLaunchingWithOptions方法裡)

2:請求完畢,apns同意,傳回給你token,(代碼是didReceiveRemoteNotification方法,如果是第三方,則把token傳給第三方儲存,如果是你們自己寫的,則傳給你們的伺服器儲存。)

3:現在要發通知了:伺服器把token和消息一起發送給apns,apns根據token查找對應的裝置,然後發送。

4:當裝置已接收到遠端通知,

    *  程式運作狀态,:調用application:didReceiveRemoteNotification:方法

    *  當程式處于背景或者被殺死狀态,當你進入(aunch)程式時:調用application:didReceiveRemoteNotification:fetchCompletionHandler:來處

        理你需要做的事情,比方:除了badge、儲存資料、發送消息、彈框等等。

總:apns就是一個中轉站,你的所有的消息不是直接發送,需要經過apns這個中轉站倒手才能發送過去。

具體圖例

ios蘋果推送-APNS
ios蘋果推送-APNS

根據圖檔我們可以概括一下:

1、應用程式注冊APNS消息推送。

2、ios從APNS Server擷取devicetoken,應用程式接收device token。

3、應用程式将device token發送給程式的PUSH服務端程式。

4、服務端程式向APNS服務發送消息。

5、APNS服務将消息發送給iPhone應用程式。

問題

1:Device token for an iPhone device生成之後就永遠不變嗎?

不是,if a device is wiped (應該是重裝系統), it will get a new device token. 

官方網站是這樣寫的: If the user restores backup data to a new device or computer, or reinstalls the operating system, the device token changes

正是因為device有可能改變,是以建議在app start時(即在didFinishLaunchingWithOptions  裡)調用registerForRemoteNotificationTypes來擷取device token以檢查device token是否改變,如果改變了就應該把新token傳給push provider。(官方描述:An application should register every time it launches and give its provider the current token)

device token應該存儲在NSUserDefaults來達到新舊比較的目的

那麼舊device token在push provider對應的record怎麼辦?

方案1:把舊device token send to provider and request delete record

方案2:使用apns feedback service。

方案2可能更好些,因為總是需要使用apns feedback service來處理使用者在device裡删除app的情況。

調用registerForRemoteNotificationTypes方法後,成功注冊後,APNS就會傳回一個device token,然後回調delegate methoddidRegisterForRemoteNotificationsWithDeviceToken, 如果注冊失敗,則回調delegate method didFailToRegisterForRemoteNotificationsWithError。

注意:

* 在第一次調用registerForRemoteNotificationTypes方法時沒有聯網,則既不會調用didRegisterForRemoteNotificationsWithDeviceToken,也不會調用didFailToRegisterForRemoteNotificationsWithError

*在第一次調用registerForRemoteNotificationTypes注冊成功後,之後即使沒有聯網,再調用registerForRemoteNotificationTypes時都會以最上一次的device token作為參數回調didRegisterForRemoteNotificationsWithDeviceToken方法。

其他

準備證書類的工作都是一樣的,可以檢視這個連接配接

友情連結 http://www.51testing.com/html/46/249846-857789.html

繼續閱讀