APNS推送服務證書製做 圖文詳解教程(新)

iOS消息推送的工做機制能夠簡單的用下圖來歸納:php


 

Provider是指某個iPhone軟件的Push服務器,APNS是Apple Push Notification Service的縮寫,是蘋果的服務器。html

 

上圖能夠分爲三個階段:java

第一階段:應用程序把要發送的消息、目的iPhone的標識打包,發給APNS。 ios

第二階段:APNS在自身的已註冊Push服務的iPhone列表中,查找有相應標識的iPhone,並把消息發送到iPhone。 git

第三階段:iPhone把發來的消息傳遞給相應的應用程序,而且按照設定彈出Push通知。github

 

從上圖咱們能夠看到:服務器

一、應用程序註冊消息推送。app

二、iOS從APNS Server獲取device token,應用程序接收device token。ide

三、應用程序將device token發送給PUSH服務端程序。oop

四、服務端程序向APNS服務發送消息。

五、APNS服務將消息發送給iPhone應用程序。

 

不管是iPhone客戶端和APNS,仍是Provider和APNS,都須要經過證書進行鏈接。

 

下面我介紹一下幾種用到的證書。

 

1、CSR文件

 一、生成Certificate Signing Request(CSR)


 

二、填寫你的郵箱和經常使用名稱,並選擇保存到硬盤。


 

點擊繼續:


 

這樣就在本地生成了一個Push.certSigningRequest文件。

 

2、p12文件

 

一、導出密鑰。



 

二、輸入你的密碼。

 

 

這樣就生成了一個Push.p12文件。

 

3、SSL certificate文件

 

一、用你付過費的賬號登陸到iOS Provisioning Portal,並新建一個Explicit App ID,這個過程能夠參考:個人另外一篇博客

iOS申請真機調試證書 圖文詳解

,這樣就會生成下面這條記錄:

 



 

二、點擊Edit:


 

三、勾選Push Notification -> Development SSL Certificate ->Creat Certifica...

 

四、點擊Continue

,



五、選擇前面生成好的Push.certSigningRequest文件,點擊Generate,出現以下所示的頁面:

 

六、點擊Download,並將文件命名爲aps_development.cer。

 

七、點擊左側App IDs, 找到剛纔新建的App ID, (testAppId) 你會發現狀態變成了Enabled:


 

注意:有的App ID的Apple Push Notification service列是灰色的,而且不容許使用Configure按鈕,這是由於APNS不支持帶通配符的App ID。

 

到如今爲止,咱們已經生成了三個文件:

 

一、Push.certSigningRequest

二、Push.p12

三、aps_development.cer

 

在項目的AppDelegate中的didFinishLaunchingWithOptions方法中加入下面的代碼:

[objc] view plaincopy
  1. - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions  
  2. {  
  3.     //註冊APNS  
  4.     [[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeBadge)];  
  5.     return YES;  
  6. }  


 

經過registerForRemoteNotificationTypes方法,告訴應用程序,能接受push來的通知。

 

在項目的AppDelegate中添加下面的方法來獲取deviceToken:

 

[objc] view plaincopy
  1. //APNS  
  2. - (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {  
  3.     NSString *token = [NSString stringWithFormat:@"%@", deviceToken];  
  4.     NSLog(@"My token is:%@", token);  
  5. }  
  6.   
  7. - (void)application:(UIApplication *)app didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {  
  8.     NSString *error_str = [NSString stringWithFormat: @"%@", error];  
  9.     NSLog(@"Failed to get token, error:%@", error_str);  
  10. }  
  11.   
  12. - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo  
  13. {  
  14.       
  15. }  

 

運行程序能夠獲取到device Token, 如圖,

獲取到的deviceToken,咱們能夠提交給後臺應用程序,

 

後臺程序實現有多種方式

一. PushMeBaby

我用的pushMeBaby,作的測試,https://github.com/stefanhafeneger/PushMeBaby

1,將下載的aps_development.cer文件拷貝到PushMeBaby工程文件所在目錄,

2.打開工程,在工程文件上右擊 add file to "PushMeBaby",

3.run PushMeBaby  ,詢問是否容許訪問鑰匙串,點容許,

4,運行界面及日誌如圖所示表示鏈接成功,

5, 將前面獲取到的 device Token 粘貼到輸入框中,點擊push,日誌以下,0表示成功,111表示發送的數據的長度,

 

二. java, php

發送通知的後臺應用程序若是用php, java 實現,除了須要知道deviceToken以外,還須要一個與APNS鏈接的證書。

 

這個證書能夠經過咱們前面生成的兩個文件中獲得。

 

一、將aps_development.cer轉換成aps_development.pem格式

 

  1. openssl x509 -in aps_development.cer -inform DER -out aps_development.pem -outform PEM  

 

二、將p12格式的私鑰轉換成pem

 

  1. openssl pkcs12 -nocerts -out Push_Noenc.pem -in Push.p12  

 

三、建立p12文件

 

  1. openssl pkcs12 -export -in aps_development.pem -inkey Push_Noenc.pem -certfile Push.certSigningRequest -name "aps_development" -out aps_development.p12  

 

這樣咱們就獲得了在.net或java等後臺應用程序中使用的證書文件:aps_development.p12

 

若是後臺應用是php的話,那麼用如下方法來生成php後臺應用程序中使用的證書文件:ck.pem

6. Copy the file apns-dev-cert.p12 to your server in the folder where you will put the rest of your PHP code.

7. Now run the following code on the server
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

We are running everything from a server running Ubuntu-9.04. Here we had to remove the passphrase, which can be done as follows
openssl rsa -in apns-dev-key.pem -out apns-dev-key-noenc.pem

Finally, combine the two to get your apns-dev.pem file
cat apns-dev-cert.pem apns-dev-key-noenc.pem > apns-dev.pem

 

 

 

 

原文來自 :  http://blog.csdn.net/zhugq_1988/article/details/37656107

相關文章
相關標籤/搜索