IOS推送總結

此文主要以證書生成配置爲主,實現簡單推送,部分截圖與內容來自於互聯網,若對大家有所幫助,還請給個贊O(∩_∩)O~~。如有誤,請指出,一起探討。

一、 推送原理


Provider是指某個iPhone軟件的Push服務器。APNS 是Apple Push Notification Service(Apple Push服務器)的縮寫,是蘋果的服務器。上圖可以分爲三個階段。
* 第一階段:Push服務器應用程序把要發送的消息、目的iPhone的標識打包,發給APNS。
* 第二階段:APNS在自身的已註冊Push服務的iPhone列表中,查找有相應標識的iPhone,並把消息發到iPhone。
* 第三階段:iPhone把發來的消息傳遞給相應的應用程序, 並且按照設定彈出Push通知。

1. 應用程序註冊消息推送。
2. IOS跟APNS Server要deviceToken。應用程序接受deviceToken。
3. 應用程序將deviceToken發送給PUSH服務端程序。
4. 服務端程序向APNS服務發送消息。
5. APNS服務將消息發送給iPhone應用程序。無論是iPhone客戶端跟APNS,還是Provider和APNS都需要通過證書進行連接的。

二、 證書的創建

1. 創建本地請求證書文件–CertificateSigningRequest

  • 鑰匙串訪問 –> 證書助理 –> 從證書頒發機構請求證書;
  • 填寫郵箱和名稱(可以隨意填寫) –> 存儲到磁盤
  • 選擇繼續-保存至桌面即可(此文件可長期重複使用,只作爲本機器的一個識別作用)

2. 進入蘋果開發者網站,生成證書以及profiles

依次選擇Member Center - Certificates, Identifiers &Profiles - Certificates
C95BD68F-E6FA-49F4-8ECB-C72902F41D4D.png
選擇當前要設置通知的APP IDs
這裏我以新建一個APP IDs爲例,若公司已有項目APP IDs,則略過此步
選擇右上角”+”號創建一個APPID
填寫name以及Bundle ID
A93F9CAF-20CA-47B8-8DA2-B46AF441C089.png
Bundle ID需要與Xcode裏項目Bundle ID一致
6F810F29-E7DF-4190-A069-457036873A10.png
勾選push notification 並完成提交
找到剛創建好的APP IDs,可以看到下面的通知選項處提示Configurable,表示證書還沒配置,點擊Edit進行編輯
這裏看到推送證書分爲2個版本,一個開發模式,一個生產模式,即我們在開發測試時使用開發模式證書,發佈上線後採用生產模式證書,兩個都要創建(本次只作開發模式演示,當然創建生產版證書的步驟也是一樣的)
Choose File選擇最開始創建在桌面的Request文件
1F5ABE01-3DD1-487D-B7D4-8470FE2FD686.png
創建證書OK後 下載到本地
86A5F026-7B97-41C4-A6BB-C3D7341D8A23.png
開發版和生產版證書都創建好後,此時這裏已經都是啓用狀態了。
生成XCODE使用的provisioning文件,該文件用於真機調試:
0D1B1B3A-FAB6-47BD-A721-C391CC63F0F8.png
生成過程:
進入developer.apple.com,選擇member center - Certificates, Identifiers & Profiles - Provisioning Profiles,然後選擇創建Provisioning file,接着選擇iOS App Development ,下一步選擇AppId,選中之前建立的支持push的appid,接着下一步選擇支持push的certificate,下一步勾選需要支持的device id,最後一步設置provisioning文件的文件名,這樣provisioning文件就生成了。

3. 生成服務端使用的證書文件

  • 首先雙擊前面保存的cer文件,此時會打開“鑰匙串訪問”軟件,裏面會出現一個Apple Development IOS push services證書,一個公用密鑰和一個專用祕鑰,祕鑰的名稱與證書助理中填寫的名稱一致。
  • 選中證書,導出爲 apns-dev-cert-development.p12 文件
  • 選中專有祕鑰,導出爲apns-dev-key-development.p12文件
  • 通過終端命令將這些文件轉換爲PEM格式:
  • 設置密碼,建議所有都爲一個密碼

    openssl pkcs12 -clcerts -nokeys -out apns-dev-cert-development.pem -in apns-dev-cert-development.p12
    openssl pkcs12 -nocerts -out apns-dev-key-development.pem -in apns-dev-key-development.p12
  • 最後, 需要將兩個pem文件合併成一個apns-dev.pem文件,此文件在連接到APNS時需要使用:
    “`
    cat apns-dev-cert-development.pem apns-dev-key-noenc-development.pem > apns-dev-development.pem

####4. 測試證書
執行下面命令:

telnet gateway.sandbox.push.apple.com 2195(apns的測試環境)
telnet gateway.push.apple.com 2195(apns的正式環境)

它將嘗試發送一個規則的,不加密的連接到APNS。如果你看到下面的反饋,那說明你的MAC能夠到達APNS。按下Ctrl+C關閉連接。如果得到一個錯誤信息,那麼你需要確保你的防火牆允許2195端口,一般這裏都不會出現什麼問題。
![終端顯示](http://upload-images.jianshu.io/upload_images/1085368-a72adc48d5be13db.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
下面我們使用生成的SSL證書和私鑰來設置一個安全的鏈接去鏈接蘋果服務器,執行命令如下:

openssl s_client -connect gateway.sandbox.push.apple.com:2195 -cert apns-dev-cert-development.pem -key apns-dev-key-development.pem
“`
執行之後需要輸入密碼,就是上面我們設置的密碼即可。
如果鏈接是成功的,你可以隨便輸入一個字符,按下回車,服務器就會斷開鏈接,如果建立連接時有問題,OpenSSL會給你返回一個錯誤信息。
輸出結果如下,則說明是正確鏈接了,把上述合併的apns-dev-development.pem給服務端使用。
ECCD5164-A95C-4777-A7CF-EA60D6D73398.png

如果有錯誤,請檢查是否導出正確的推送證書。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章