第一步:證書創建
IOS的推送證書,有有效期限制,一般爲一年。當我們證書過期的時候,就需要重新生成證書了。有一段時間沒有上蘋果網站了,昨天上去一看,此奧,改版了,下邊我們將重新生成一個正式環境的push推送的證書。
1、先打開鑰匙串(應用程序-實用工具-鑰匙串訪問),請求一個證書
常用名稱寫爲:2013.04.27_push_production_***。並保存到磁盤上。
2、進入打開蘋果網站的證書標籤頁面,選擇 Identifiers標籤下邊的App IDs子標籤,顯示下邊圖片。紅色圈中的是我要重新生成push簽名的證書。點擊此證書。
3、證書詳情標籤,羅列出了所有的功能狀態,最後的Push Notifications顯示可以配置,並不是Enabled可以狀態,所以點擊Setting功能重新上傳證書。
4、證書設置頁面中,最下邊的Push Notifications 如下圖所示。
其中:Development SSL Certificate是測試環境證書,Production SSL Certificate爲正式環境證書,我們生成正式環境的證書,點擊後面的Create Certificate。
5、Create Certificate頁面如下。點擊下邊的continue。
6、選擇上傳的證書,我們第一步已經生成了一個證書,上傳此證書。
7、上傳成功後,將會顯示下邊的圖片。有可能在生成證書的過程中會有loading框一直在轉轉轉,這時候重新進入此頁面即可。其實此時證書已經生成了。
此時,push證書已經生成,上邊會標註過期時間,push的證書有效期爲一年。點擊Download下載此證書。
8、雙擊剛纔下載的證書,會自動把此證書加入到鑰匙串的簽名中
第二步:導出後臺使用證書
php 後臺需要 pem 證書,java 和 .NET 後臺需要 .p12 證書
模式一:.p12 證書的創建
1、打開鑰匙串,選擇剛剛安裝好的 push 證書,如下圖標示,紅色圈中的,既是我剛纔添加的證書,展開此證書
先右鍵點擊 Apple Production IOS PushServices:com.***.***,先導出一個.p12文件。命名爲cert.p12。在導出的過程中會讓輸入導出密碼,輸入相應的密碼即可,並輸入自己的郵箱。
模式二:pem 證書的創建,有兩種方案方案一:
1、打開鑰匙串,選擇剛剛安裝好的 push 證書,如下圖標示,紅色圈中的,既是我剛纔添加的證書,展開此證書
先右鍵點擊 Apple Production IOS PushServices:com.***.***,先導出一個.p12文件。命名爲cert.p12。在導出的過程中會讓輸入導出密碼,輸入相應的密碼即可,並輸入自己的郵箱。
2、在2012.04.27_push_producation_***上點擊右鍵,導出一個.p12的文件,命名爲key.p12,與上邊相同在導出的過程中會讓輸入導出密碼,輸入相應的密碼即可。
3、到此爲止,我們已經有了兩個.p12文件,把他們放到同一個文件夾(aaa)下,需要把兩個.p12文件轉換成.pem文件。
a.先打開終端,切換到文件夾aaa下執行
- openssl pkcs12 -clcerts -nokeys -out cert.pem -in cert.p12
在執行的時候,將會讓輸入密碼,輸入剛纔設置的密碼即可生成一個cert.pem文件。
b.再執行:
- openssl pkcs12 -nocerts -out key.pem -in key.p12
此時要注意在終端中的提示,第一次輸入的密碼是生成證書時候的密碼,第二次第三次輸入密碼是設置key.pem的新密碼。
c.如果需要對 key不進行加密,執行下邊語句
- openssl rsa -in key.pem -out key.unencrypted.pem
d.然後就可以合併兩個.pem文件,這個ck.pem就是服務端需要的證書了。
- cat cert.pem key.unencrypted.pem > ck.pem
方案二:
cd 進入證書所在目錄
把.cer文件轉換成.pem文件:
$ openssl x509 -in aps_developer_identity.cer -inform der
-out PushCert.pem
把私鑰Push.p12文件轉換成.pem文件:
$ openssl pkcs12 -nocerts -out PushKey.pem -in Push.p12
Enter Import Password:
MAC verified OK
Enter PEM pass phrase:
Verifying – Enter PEM pass phrase:
你首先需要爲.p12文件輸入passphrase密碼短語,這樣OpenSSL可以讀它。然後你需要鍵入一個新的密碼短語來加密PEM文件。還是使用”pushchat”來作爲PEM的密碼短語。你需要選擇一些更安全的密碼短語。
注意:如果你沒有鍵入一個PEM passphrase,OpenSSL將不會返回一個錯誤信息,但是產生的.pem文件裏面將不會含有私鑰。
最後。把私鑰和證書整合到一個.pem文件裏:
$ cat PushCert.pem PushKey.pem > ck.pem
爲了測試證書是否工作,執行下面的命令:
$ telnet gateway.sandbox.push.apple.com 2195
Trying 17.172.232.226…
Connected to gateway.sandbox.push-apple.com.akadns.net.
Escape character is ‘^]’.
它將嘗試發送一個規則的,不加密的連接到APNS服務。如果你看到上面的反饋,那說明你的MAC能夠到達APNS。按下Ctrl+C 關閉連接。如果得到一個錯誤信息,那麼你需要確保你的防火牆允許2195端口。
然後再次連接,這次用我們的SSL證書和私鑰來設置一個安全的連接:
$ openssl s_client -connect gateway.sandbox.push.apple.com:2195
-cert PushChatCert.pem -key PushChatKey.pem
Enter pass phrase for PushChatKey.pem:
你會看到一個完整的輸出,讓你明白OpenSSL在後臺做什麼。如果連接是成功的,你可以鍵入一些字符。當你按下回車後,服務就會斷開連接。如果在建立連接時有問題,OpenSSL將會給你一個錯誤消息,
ck.pem文件就是我們需要得到php連接APNS 的文件,將ck.pem和push.php放入同一目錄上傳到服務器。
注意:上面兩種方式的簡單命令描述如下
2. openssl pkcs12 -nocerts -out key.pem -in Certificates.p12
3. openssl rsa -in key.pem -out key.unencrypted.pem
4. cat cert.pem key.unencrypted.pem > ck.pem
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { NSString *token = [NSString stringWithFormat:@"%@", deviceToken]; //獲取終端設備標識,這個標識需要通過接口發送到服務器端,服務器端推送消息到APNS時需要知道終端的標識,APNS通過註冊的終端標識找到終端設備。 NSLog(@"My token is:%@", token); } - (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error { NSString *error_str = [NSString stringWithFormat: @"%@", error]; NSLog(@"Failed to get token, error:%@", error_str); }
2、在AppDelegate.m的(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions方法中加入
註冊消息通知推送能力;加入當應用程序處於未啓動狀態時,判斷是否由遠程消息通知觸發;加入清除消息推送通知標記。