第一步:证书创建
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 Imp
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放入同一目录上传到服务器。
注意:上面两种方式的简单命令描述如下
- (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方法中加入
注册消息通知推送能力;加入当应用程序处于未启动状态时,判断是否由远程消息通知触发;加入清除消息推送通知标记。