1. 推送流程:html
Provider: 咱們本身的後臺服務器;ios
APNS: 蘋果的消息推送服務器安全
(1) 當Provider有消息要推送給手機的時候,先將消息和deviceToken等字段發送到APNS服務器
(2) APNS在已註冊的設備列表中查找設備,並推送消息到設備;app
(3) iOS將消息傳遞給應用程序,或者顯示通知等;ide
2. 註冊-推送完整流程:測試
(1) App註冊消息推送;spa
(2) iOS向APNS請求DeviceToken,App獲取DeviceToken;.net
(3) App將DeviceToken發送至服務器;code
(4) 如有消息通知,則服務器將消息連同DeviceToken發送至APNS;
(5) APNS查找設備,而且將消息推送至設備;
3. 推送證書生成流程(開發版本):
//(我這裏證書所有新生成,如有可忽略,注意將如下步驟生成文件保存到同一個目錄,方便確認和使用);
--mac
(1) 中使用鑰匙串-->鑰匙串訪問-->證書助理-->從證書頒發機構申請證書,填寫郵箱,選擇保存到磁盤,將生產CSR文件;
--developer
(2) 在Identifiers中建立APPID,注意選擇Explicit App ID,Bundle ID中不能包含通配符,必須是肯定的ID;選擇Push Notifications;
(3) 在Certificates中建立開發證書,選擇iOS App Development,選擇AppID,導入前面生成的CSR文件,生成後Download下載證書;
(4) 在Certificates中建立推送證書,選擇App Push Notification service SSL (Sandbox),一樣選擇AppId,導入前面生成的CSR文件,生成後Download下載證書;
(5) Provising Profiles中建立配置文件,選擇iOS App Development,選擇前面的AppID,選擇前面的開發證書,選擇包含的設備,輸入名稱,生成後Download下載;
--mac
(6) 雙擊(3)(4)步驟中生成的證書,雙擊Provising Profile文件,在xCode中配置Code Signing,選擇對應的developer和profile文件;
(7) 在鑰匙串中找到(4)中證書Apple Devlopment IOS Push Services:xxxx,點擊箭頭展開,點擊專有密鑰,右鍵導出,輸入密碼如:hello123,保存,如testPush.p12;
(8) 確認下文件,此時目錄文件包含,CertificateSigningRequest.certSigningRequest,ios_development.cer,aps_development.cer,testPush.p12;
(9) 將testPush.p12和aps_development.cer分別生成pem文件,注意生成testPush.p12對應的pem時候,須要輸入密碼,爲了不混淆,使用hello123;
openssl x509 -in aps_development.cer -inform der -out PushChatCert.pem
openssl pkcs12 -nocerts -out PushChatKey.pem -in testPush.p12
Enter Import Password:
MAC verified OK
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
(10) 將兩個pem文件合併保存到一個pem文件中;
cat PushChatCert.pem PushChatKey.pem > ck.pem
(11) 測試是否可以telnet到蘋果服務器;
telnet gateway.sandbox.push.apple.com 2195
Trying 17.110.226.164... Connected to gateway.sandbox.push-apple.com.akadns.net. Escape character is '^]'. ^]
(12) 測試用生成的證書創建ssl安全鏈接到服務器,返回不少信息,表示成功了;
openssl s_client -connect gateway.sandbox.push.apple.com:2195 -cert PushChatCert.pem -key PushChatKey.pem
Enter pass phrase for PushChatKey.pem: CONNECTED(00000003) depth=1 /C=US/O=Entrust, Inc./OU=www.entrust.net/rpa is incorporated by reference/OU=(c) 2009 Entrust, Inc./CN=Entrust Certification Authority - L1C verify error:num=20:unable to get local issuer certificate verify return:0 --- Certificate chain 0 s:/C=US/ST=California/L=Cupertino/O=Apple Inc./CN=gateway.sandbox.push.apple.com i:/C=US/O=Entrust, Inc./OU=www.entrust.net/rpa is incorporated by reference/OU=(c) 2009 Entrust, Inc./CN=Entrust ... ... ... ... Key-Arg : None Start Time: 1458041365 Timeout : 300 (sec) Verify return code: 0 (ok) ---
(13) 在項目的AppDelegate.m中加入推送相關代碼;
(14) 將ck.pem放到服務器,服務器建立消息推送服務,測試是否成功;
感謝:
https://developer.apple.com
http://blog.csdn.net/shenjie12345678/article/details/41120637
http://www.cocoachina.com/industry/20130321/5862.html