原文地址:http://blog.csdn.net/showhilllee/article/details/8631734
最近在研究ios的推送問題,遇到了一些問題,最終整理了一下。放在這裡和大家分享
APNS的推送機制
首先我們看一下蘋果官方給出的對ios推送機制的解釋。如下圖
Provider就是我們自己程式的後台伺服器,APNS是Apple Push Notification Service的縮寫,也就是蘋果的推送伺服器。
上圖可以分為三個階段:
第一階段:應用程式的伺服器端把要發送的訊息、目的iPhone的標識打包,發給APNS。
第二階段:APNS在自身的登入Push服務的iPhone列表中,尋找有相應標識的iPhone,並把訊息發送到iPhone。
第三階段:iPhone把發來的訊息傳遞給相應的應用程式,並且按照設定彈出Push通知。
APNS推播通知的詳細工作流程
下面這張圖是說明APNS推播通知的詳細工作流程:
根據圖片我們可以概括一下:
1、應用程式註冊APNS訊息推送。
2、iOS從APNS Server擷取devicetoken,應用程式接收device token。
3、應用程式將device token發送給程式的PUSH服務端程式。
4、服務端程式向APNS服務發送訊息。
5、APNS服務將訊息發送給iPhone應用程式。
準備工作
首先要有一台蘋果的裝置,模擬器是不支援推送的,所以你需要一台iphone,ipod touch或者ipad。
我們的用戶端與蘋果伺服器之間和我們自己的伺服器與蘋果伺服器之間都需要認證來進行連結。下面我們來開始進入認證的製作過程。
一 CSR檔案
首先我們要有產生一個Certificate Signing Request(也就是CSR)的請求檔案。
在應用程式裡的使用工具中找到鑰匙串訪問。
選擇從憑證授權單位請求認證
填上你的郵箱和常用名,常用名要記一下,一會會用到。然後選擇儲存到磁碟,繼續
儲存位置在案頭,點擊儲存。
到這裡點擊完成後我們會在案頭上看到一個CertificateSigningRequest.certSigningRequest的請求檔案,也就是我們說的CSR檔案。在我們產生CSR檔案的同時,會在鑰匙串訪問中產生一對秘鑰,名稱為剛才我們填寫的常用名
二 下載開發認證和發布認證
(這裡我為了大家能看清楚,已經把之前的認證事先吊銷了)
到https://developer.apple.com/devcenter/ios/index.action登入後,在右側的ios Developer Program裡點擊iOS Provisioning Portal。
進入下一級頁面後在左側選擇Certificates
點擊紅色的部分產生一個開發認證
點擊選擇檔案,選擇剛才我們產生到案頭的CSR請求檔案。
注意,如果你在後面測試的時候出現了問題,請檢查一下這裡,這裡的CSR請求檔案必須是我們剛才產生的那個
選擇完成後點擊Submit提交
提交完成後返回頁面。頁面會是這樣的,然後我們重新整理一下頁面
重新整理後會出現一個下載按鈕,我們點擊下載。現在我們的開發認證已經配置並下載好了,發布認證的配置過程和開發認證是一致的,不再贅述。下載完後雙擊,會跳到鑰匙串訪問裡。這就是我們之後要進行測的認證
三 配置AppID,配置並下載SSL認證
點擊左側的App IDs,找到我們要做推送功能的程式的id(如果沒有的話要先New一個。注意,這裡的App ID必須不能是通配的,通配的不可以做推送)。點擊Configure
進入後預設推送功能是關閉的,我們需要把推送功能開啟
選中開啟後,點擊右邊灰色的Configure按鈕
這裡的檔案同樣的,還是選擇我們產生在案頭上的CSR請求檔案
然後點擊繼續
出現了我們需要的SSL認證,我們點擊下載後點擊Done完成。
Status狀態變成了綠色可用了。這裡右邊的下載和上一步的下載是一樣的,如果在上一步中下載了認證,便無需再次下載。此時我們有了一個名字叫aps_development.cer的SSL認證,同樣,我們把他放在案頭。雙擊後會跳到鑰匙串訪問,出現我們的SSL推送認證
同樣的,發布的SSL認證的步驟也是一樣的。
四 下載Provisioning認證
在左側選擇Provisioning
配置好後點擊提交(注意App ID要與我們剛的程式對應)
之後變回出現下載按鈕,我們點擊下載。下載後雙擊,並將我們的裝置上的描述檔案更新一下(最好把之前的全部刪除,然後再安裝,防止出錯)。
五 從鑰匙串訪問中匯出秘鑰
開啟鑰匙串訪問,找到我們的專用秘鑰(專用秘鑰的名稱就是我們在最開始產生CSR請求的時候填寫的常用名)
右鍵選擇匯出
匯出的檔案名稱我們叫做Push
在這裡需要輸入一個密碼來對檔案進行加密。這裡我們選擇abcabc,當然你也可以自己選擇是什麼,但是這個密碼必須要銘記,切記。
然後輸入你電腦的密碼,點擊允許。
這樣我們就在案頭上產生了一個Push.p12檔案。
到此為止,我們在案頭上一共產生了三個檔案。一個是CSR請求檔案,一個是aps_development .cer的SSL認證檔案,還有一個剛才產生的Push.p12秘鑰檔案。
現在我們的準備工作已經做完了。要開始對產生的檔案進行處理了。原因上面已經解釋過,因為我們的服務鏈結接蘋果伺服器也是需要認證的,但是我們直接產生的認證windows系統(我們一般的伺服器都是win系統的)是不識別的,所以我們需要產生一個尾碼為pem的帶認證帶秘鑰的檔案。
六 處理認證
下面我們開啟終端(位置:應用程式à工具 + 生產力à終端)。
cd到案頭,我們那三個檔案所在的位置
1、把.cer的SSL認證轉換為.pem檔案,執行命令: