iOS推送過程詳解

2021-07-04 12:50:49 字數 2272 閱讀 2370

閒得無聊整合了一下信鴿推送,首先信鴿推送的文件裡面有很詳細的關於生成推送證書的教程,以後再要生成證書記不住過程的看它就可以了。即使你不用第三方,證書生成的過程是一樣的。推送證書生成詳細過程

注:需要強調一點的是,我在生成開發證書和發布證書的過程中犯了乙個錯誤,由於兩個成證書都需要生成cersigningrequest(csr)檔案,因此我的發布和開發證書都使用了同乙個,於是就怎麼著都推送不成功,重新生成了csr檔案再次製作證書就成功了。

為什麼要生成這些證書呢?為了支援apns中的安全模型,服務端和裝置必須具有某些證書,ca證書或者是token.

服務端:每乙個服務端需要乙個唯一的服務端證書和私有的秘鈅來驗證他們與apns之間的連線。這個證書,是由蘋果提供的,它必須能夠鑑別出服務端發布的特定主題,這個特定的主題就是客戶端應用的bundle id.服務端傳送給apns的每一條通知,都帶有能鑑別目標裝置的裝置號。服務端會希望使用apns伺服器提供的服務端證書來驗證它正在連線的伺服器。

裝置:系統使用apns傳遞給它的公共服務證書來認證它已經連線的伺服器。它有乙個唯一的私有的鑰匙來向伺服器認證自己並建立tls連線。它在裝置活動期間獲取裝置證書和鑰匙並把他們儲存在鑰匙串中。系統也持有他的特有的裝置號,這是他在與伺服器的連線過程中獲取的。每乙個已經註冊的客戶端應用都有責任向他的服務端傳遞這個裝置號。

apns:apns也有必要的證書,ca證書,秘鑰(公有的和私有的)來驗證連線和服務端與裝置的身份。

apns服務傳輸並傳送乙個來自特定伺服器的遠端通知給一台特定的裝置。通知就是乙個簡短的資訊,這條資訊包含兩塊主要的資料:裝置token和有效載荷。裝置號類似於**號碼,它包含了能夠促使apns定位到安裝了客戶端應用的裝置。apns 還使用它來認證乙個通知的傳送。payload就是乙個json格式的屬性列表,它詳細描述了某台裝置上的應用的使用者將被如何被通知。

遠端通知的資料通過乙個方向流入。服務端合成乙個通知包,這個包包含了客服端應用的裝置號和payload。服務端傳送通知給apns而apns轉而把通知傳送給裝置。當服務端向apns認證時,它傳送他的主題給apns伺服器,apns據此識別它即將提供資料的應用。現在的主題指的就是目標應用的bundle identifier.

apns也不會跟任意的服務端建立連線,apns的連線是和蘋果已經同意傳送通知的已授權的服務端的。這就叫做apns的連線信任。同時,在裝置連線方面,apns也必須驗證連線是和一台合法的裝置之間建立的。

下面介紹apns與伺服器以及裝置建立連線的具體過程以及token的產生。

apns與裝置連線驗證

apns通過tls點對點的認證確定一台連線裝置的身份。(注意系統負責該階段的連線信任,你本身不需要做任何事情。)在這個過程期間,一台裝置初始化了與apns之間的tls連線,apns返回它的服務證書。裝置驗證這份證書並且給apns傳送它的裝置證書,apns驗證它傳送過來的證書。

伺服器與apns連線驗證

token的產生過程

1.裝置第一次安裝應用時,由上述「token的產生過程」產生token並與伺服器共享token。

2.伺服器向apns請求連線,apns驗證伺服器是否是蘋果已授權伺服器,驗證過程為上述「伺服器與apns連線驗證」過程,驗證通過乙個安全的tls連線就建立起來了。伺服器向apns傳送通知內容(payload)同時還有devicetoken。

3.apns接收到devicetoken並解密,根據token中包含的裝置id找到目標裝置。

4.目標裝置向apns初始化一條tls連線,apns傳送給裝置自己的服務證書,裝置驗證通過後,傳送自己的裝置證書以及devicetoken給apns,apns將devicetoken解密並對比裝置證書中的裝置id是否一致,驗證通過,apns就會將推送內容傳送給目標裝置。

Android專案整合信鴿推送過程詳解

推送現在在移動專案開發中已經很常見了,比較常見的推送方式有小公尺推送 極光推送和個推,今天我們所講解的是 tencent 的信鴿推送在 android 上的應用。一 信鴿 android 專案環境搭建 sdk,並整合到自己專案中。2 配置 androidmanifest.xml,詳情可參加官網開發文...

iOS本地推送實現過程

第二步 實現乙個推送訊息 void localpush nslog notification.alertbody 減少角標的顯示個數 如何解除本地通知 獲取本地推送陣列 宣告本地通知物件 uilocalnotification localnotification if localarray loca...

iOS 中推送的使用詳解

ibaction setreminder id sender else uilocalnotification remindernotification uilocalnotification alloc init when notification should fire remindernoti...