iOS推送原理和證書生成簡介

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

相關文章
相關標籤/搜索