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 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
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 {
}