iOS 消息推送 (Message) 證書設置指南
本文檔包括:
- 創建App ID
- 創建並配置Provisioning Profiles
- 創建並配置Certificates
- 技術支持
1. 創建App ID
如果你已經擁有所需的App ID,請跳至創建並配置Provisioning Profiles
登陸Apple Member Center https://developer.apple.com/membercenter
a.選擇Certificates, Identifiers & Profiles

b.選擇Identifiers中的App IDs

c.創建Explicit App ID

d.App Services選擇Push Notifications

至此bundle IdentifierIDApp ID已經創建完畢,最終形如下圖: 
注意
上面在Member Center設置的App id需要和工程的bundle Identifier一致 
2. 創建並配置Provisioning Profiles
a.選擇Development(如果是發布上線,需要選擇Distribution)

b.創建新的Provisioning Profiles,並選擇之前生成好的App ID

c.選擇你自己的開發證書,並選擇好需要調試Push的開發設備

注意
1、如果需要的設備不在列表中,需要通過左側的Devices中手動添加,或者通過XCode的Organizer自動添加。
2、Provisioning Profiles創建完成后是可以重新編輯更新的
d.下載剛剛創建Provisioning Profiles,並雙擊導入至電腦
e.在XCode的Target中對應Build Settings選擇這個Provisioning Profiles

如果電腦中有Provisioning Profiles中引用的證書,XCode會自動選擇相應的證書對代碼進行簽名
至此iOS Push Notification客戶端的配置就完成了,如果你一切配置正確,第一次真機啟動應用時會彈出是否允許消息通知的提示框。
3. 創建並配置Certificates
a.創建certSigningRequest
a1.在Mac中開啟“鑰匙串訪問(keychain)”應用,並從證書助理中選擇“從證書頒發機構請求證書”

a2.填寫郵件地址、名稱並保存到磁盤

b.根據certSigningRequest創建Certificates
b1.回到Apple Member Center選擇Development證書(如果是發布上線,需要選擇Distribution)

b2.選擇證書的類型“Apple Push Notification service SSL (Sandbox)”

b3.選擇之前創建的AppId

b4.下一步提示創建certSigningRequest,我們已經創建完畢,直接下一步選擇即可


b5.沒有問題的話,便創建成功,下載至本地並導入鑰匙串訪問(KeyChain)即可

c.導出p12證書
c1.在鑰匙串訪問(KeyChain)的我的證書中選擇剛剛導入的證書,選擇導出,注意不要選中私鑰,並設置相應密碼即可

最后導出包含證書和密鑰的p12文件
命名為 apns-dev-gmbridge.p12
生成這個之后后台同學需要的文件格式是pem文件,需要做一個轉換
pem文件是服務器向蘋果服務器做推送時候需要的文件,主要是做服務器的同學要用,下面介紹一下pem文件的生成。
- 打開Keychain Access,在Certificates里面找到上篇文章中介紹的包含推送的證書。分別將certificate和private key導出得到.p12文件。例如:Apple Development Push Services > Export “Apple Development Push Services ID123”,保存為 apns-dev-cert.p12。對“Private Key”做同樣操作,保存為 apns-dev-key.p12 文件。
- 需要通過終端命令將這些文件轉換為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
此處要求輸入一個密碼,輸入123456.
- 移除密碼(上面的123456)
openssl rsa -in apns-dev-key.pem -out apns-dev-key.pem
- 最后,你需要將鍵和許可文件合成為apns-dev.pem文件,此文件在連接到APNS時需要使用:
cat apns-dev-cert.pem apns-dev-key.pem > apns-dev.pem
同樣 Distribution Certificate 的pem文件生成方式一樣。
openssl pkcs12 -clcerts -nokeys -out apns-dis-cert.pem -in apns-dis-cert.p12
openssl pkcs12 -nocerts -out apns-dis-key.pem -in apns-dis-key.p12
openssl pkcs12 -nocerts -out apns-dis-key.pem -in apns-dis-key.p12
openssl rsa -in apns-dis-key.pem -out apns-dis-key.pem
cat apns-dis-cert.pem apns-dis-key.pem > apns-dis.pem
接受push通知還需要真機的token
使用下面這個代碼可以打印出token, 在
didRegisterForRemoteNotificationsWithDeviceToken
這個函數里面
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch. self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; // Override point for customization after application launch. self.window.backgroundColor = [UIColor whiteColor]; [self.window makeKeyAndVisible]; ViewController *controller = [[ViewController alloc] init]; self.window.rootViewController = controller; [[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeNewsstandContentAvailability)]; return YES; } - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { NSString *token = [NSString stringWithFormat:@"%@", deviceToken]; 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); } - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { }
