iOS 遠程推送開發小結

1.推送過程簡介

(1)App啟動過程中,使用UIApplication::registerForRemoteNotificationTypes函數與蘋果的APNS服務器通信,發出注冊遠程推送的申請。若注冊成功,回調函數application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken 會被觸發,App可以得到deviceToken,該token就是一個與設備相關的字符串.

(2)App獲取到DeviceToken(插個嘴,獲取DeviceToken的方法可以參考我的另外一篇博客:iOS開發之獲取設備的Token)后,將DeviceToken發送給自己的服務端。

(3)服務端拿到DeviceToken以后,使用證書文件,向蘋果的APNS服務器發起一個SSL連接。連接成功之后,發送一段JSON串,該JSON串包含推送消息的類型及內容。

(4)蘋果的APNS服務器得到JSON串以后,向App發送通知消息,使得App的回調函數application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary*)userInfo被調用,App從userInfo中即可得到推送消息的內容。

2.?用到的證書文件及生成過程

(1)certSigningRequest文件,該文件在MAC系統中生成,用于在Apple網站上申請推送證書文件。

生成過程:

打開應用程序中的“鑰匙串訪問”軟件,從菜單中選擇 “鑰匙串訪問”-》“證書助理”-》“從證書頒發機構請求證書”,郵箱和名稱隨便填寫,然后選擇保存到磁盤,就可以在本地生成一個 CertificateSigningRequest.certSigningRequest文件(當然這個名字你隨便起都可以的)。

(2)注冊一個支持push的app id,后面會用到。

生成過程:

進入developer.apple.com,選擇member center -Certificates, Identifiers & Profiles ?-Identifiers- App Ids,然后選擇注冊app id,設置appid名稱,同時,app id?suffix一欄必須選擇explicit app id,然后設置bundle id,最后勾選App Services中的Push Notifications,這樣就可以注冊一個支持push的aphid。

(3) 推送證書cer文件,該文件在developer.apple.com中生成,用于生成服務端需要的文件。

生成過程:

進入developer.apple.com,選擇member center -Certificates, Identifiers & Profiles ?- ?Certificates,然后選擇創建certificate,類型分為Development和Product。這里以Development為 例,選擇Apple Push Notification service SSL (Sandbox) ,然后下一步,選擇之前生成的支持push的AppId,然后下一步,提交之前創建的CSR文件,再下一步就可以生成cer文件,然后保存到本地。

(4)生成服務端使用的證書文件。如果是使用網上的mac 版PushMeBaby工具,在mac機器上進行推送消息的發送,那么有上面的cer文件就夠了。如果是使用PHP、java/c#開發自己的服務端,那 么還需要將上面的cer文件做一個轉換,生成pem文件或者p12文件。

選中證書,導出為?apns-dev-cert.p12 文件

選中專有秘鑰,導出為apns-dev-key.p12文件

生成php用的pem文件過程為:(因為我們后臺是java寫的,所以這個就沒有截圖)

首先雙擊前面保存的cer文件,此時會打開“鑰匙串訪問”軟件,里面會出現一個Apple Development ?IOS push services證書,一個公用密鑰和一個專用秘鑰,秘鑰的名稱與證書助理中填寫的名稱一致。

通過終端命令將這些文件轉換為PEM格式:

openssl pkcs12 -clcerts -nokeys -out apns-dev-cert.pem -in apns-dev-cert.p12

openssl pkcs12 -nocerts -out apns-dev-key.pem -in apns-dev-key.p12

最后, 需要將兩個pem文件合并成一個apns-dev.pem文件,此文件在連接到APNS時需要使用:

cat apns-dev-cert.pem apns-dev-key-noenc.pem > apns-dev.pem

生成java/c#用的p12文件過程為

生成p12的文件列表

openssl pkcs12 -clcerts -nokeys -out apns-dev-cert.pem -in apns-dev-cert.p12

openssl pkcs12 -nocerts -out apns-dev-key.pem -in apns-dev-key.p12

當你用終端執行完上面這2句語句過后,就會變成這種樣子:

在原來的基礎上,是不是多了 2個.pem文件。這2個.pem文件就是合成推送證書的關鍵了。

最后,使用終端執行下面的語句:

openssl pkcs12 -export -in apns-dev-cert.pem?-inkey apns-dev-key.pem?-certfile CertificateSigningRequest.certSigningRequest -name "push" -out push.p12

這樣就得到了推送證書,將它發給你們公司寫后臺的人員,就坐等推送消息的到來咯!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容