APNs原理解析


 

什么是APNs

先說一下遠程推送,一般我們有自己的服務器,在這個過程中是Provider的角色,如圖,推送從我們的服務器到我們的APP的過程就是要通過APNs來發送

2016-07-29_10:34:17.jpg

APNs(Apple Push Notification service)是遠程推送功能的核心,通過APNs客戶端和蘋果服務器建立一個長連接,推送也是通過這個長連接發送到客戶端上

deviceToken

deviceToken是設備的一個標識符,屬於你這款APP裝在你這個設備上的標識符,即每個APP在每一個不同的設備上都有着不同的deviceToekn,通過注冊遠程推送服務,APNs會返回給你的APP的deviceToken,如圖

2016-07-29_09:22:33.jpg

在項目的AppDelegate里面有一個方法,如果成功注冊了便可以接收到deviceToken

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken

deviceToken不是唯一確定的,當你的設備更新了系統然后deviceToken就會改變

安全架構

為了保證安全性,APNs用連接信任(connection trust)和token信任(token trust)來控制通信入口,你要用APNs則必須用通過這兩種驗證。

連接信任

連接信任第一個作用是保證APNs連接的provider是蘋果已經同意可通信的,然后第二個是保證與APNs連接的設備的合法性,第二步是APNs處理的,你所要處理的是provider與APNs之間的連接安全性。

服務器與APNs之間的連接信任

每個服務器都必須要有唯一的provider證書和私鑰,都是用來驗證連接的。provider證書就是在開發者官網申請的。

服務器通過TLS驗證和APNs連接,HTTPS中用的也是TLS協議,即四步握手,首先初始化TLS連接,即provider(服務器)發送請求給APNs,APNs服務器返回APNs證書(即公鑰)給provider,然后服務端收到后生成provider證書后再返回給APNs,APNs收到后驗證后即可以建立TLS連接,不過APNs用的不是HTTPS,而是HTTP/2,具體過程如下圖

2016-07-29_22:13:00.jpg

APNs與設備之間的連接信任

設備和provider一樣,都有私鑰和設備證書,當設備激活了就保存在鑰匙串(keychain)中,但是這部分的連接信任你是不用管的,由APNs負責,也是通過TLS來驗證,過程和provider和APNs相同

2016-07-29_23:35:06.jpg

Token信任

Token信任就是保證通知從合法的起點推送到合法的終點,Token信任即要用到上面說的deviceToken,deviceToken提供給provider,然后之后你的provider每次發送要推送的通知都要攜帶deviceToken,這就是token信任

APNs會用token鑰匙去保證通知來源(即你的服務器)的合法性,用包含在deviceTokenl里面的device ID去確定目標設備的身份,過程如下圖

2016-07-29_23:41:02.jpg

參考資料

圖全部來自官方文檔,很多關鍵詞都是我自行翻譯

蘋果官方文檔-Apple Push Notification Service

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM