ios 推送證書的配置和制作


iOS 消息推送 (Message) 證書設置指南

本文檔包括:

  1. 創建App ID
  2. 創建並配置Provisioning Profiles
  3. 創建並配置Certificates
  4. 技術支持

1. 創建App ID

如果你已經擁有所需的App ID,請跳至創建並配置Provisioning Profiles

登陸Apple Member Center https://developer.apple.com/membercenter

a.選擇Certificates, Identifiers & Profiles

Certificates, Identifiers & Profiles

b.選擇Identifiers中的App IDs

Identifiers App IDs

c.創建Explicit App ID

Explicit App ID

d.App Services選擇Push Notifications

App Services

至此bundle IdentifierIDApp ID已經創建完畢,最終形如下圖: iOS App IDs

注意

上面在Member Center設置的App id需要和工程的bundle Identifier一致 Xcode bundle Identifiers

2. 創建並配置Provisioning Profiles

a.選擇Development(如果是發布上線,需要選擇Distribution)

Provisioning Profile Development

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

Create Provisioning Profile 
Select App ID

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


Config Provisioning Profile

注意 
1、如果需要的設備不在列表中,需要通過左側的Devices中手動添加,或者通過XCode的Organizer自動添加。
2、Provisioning Profiles創建完成后是可以重新編輯更新的

d.下載剛剛創建Provisioning Profiles,並雙擊導入至電腦

e.在XCode的Target中對應Build Settings選擇這個Provisioning Profiles

XCode Build Setting Provisioning Profile
如果電腦中有Provisioning Profiles中引用的證書,XCode會自動選擇相應的證書對代碼進行簽名

至此iOS Push Notification客戶端的配置就完成了,如果你一切配置正確,第一次真機啟動應用時會彈出是否允許消息通知的提示框。

3. 創建並配置Certificates

a.創建certSigningRequest

a1.在Mac中開啟“鑰匙串訪問(keychain)”應用,並從證書助理中選擇“從證書頒發機構請求證書”

KeyChain Request

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

Create certSigningRequest

b.根據certSigningRequest創建Certificates

b1.回到Apple Member Center選擇Development證書(如果是發布上線,需要選擇Distribution)

Certificates development

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

Apple Push Notification service SSL

b3.選擇之前創建的AppId

Certificates, App ID

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

Create CSRGenerate Certificater

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

Import KeyChain

c.導出p12證書

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

Export Certificates

最后導出包含證書和密鑰的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 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 {
    
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM