苹果推送APNS总结(转载NickJackson的博客)

  • Post author:
  • Post category:其他




2015年之前:



开发状态服务器地址   gateway.sandbox.push.apple.com      2195





产品状态服务器地址  gateway.push.apple.com         2195
















2015之后:



PRODUCTION_APNS_HOST = “api.push.apple.com”;

DEVELOPMENT_APNS_HOST = “api.development.push.apple.com”;















Development和Production两个版本对应的apns device token是不同的



,前者是develop的





mobileprovision下获取的。后者是production的mobileprovision获取的。









Development和Production两个版本



可以共用一个App ID





不推荐



。共用时每次调试前都要删除设备上的app,重新打包生成。而且共用appid会经常抓狂,早上行,下午就不行了。所以不推荐),但是



不能











用一个mobileprovision



,所以要单独生成Distribution的证书供production版本使用。

注:Distribution的版本是无法在设备上debug调试的!




Development和Production两个版本的code sign是不同的,前者是



iPhone Developer,后者是iPhone Distribution。注意不能搞错。

无论是Development Push SSLCertificate还是Production Push SSL Certificate 都有过期时间的。



Development Push SSL Certificate



有效期大概



四个月



左右(后来好像改到一年了),而



ProductionPush SSL Certificate



的有效期是



一年



。需要注意在过期之前生成新的证书,以免影响使用。官网可以同时设置两个,第一个快过期的时候,生成第二个,然后替换服务器证书,等第二个使用一周没问题后删除第一个证书设置。



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-cert.p12






openssl rsa -in apns-dev-key.pem -out apns-dev-key-noenc.pem






cat apns-dev-cert.pem apns-dev-key-noenc.pem > apns-dev.pem


在Mac上生成 Apple推送通知SSL许可证:

1.    登录到 iPhone Developer Connection Portal 并点击 App IDs

2.    创建一个不使用通配符的 App ID 。通配符 ID 不能用于推送通知服务。例如,我们的iPhone程序ID像这样:  AB123346CD.com.serverdensity.iphone

3.    点击App ID旁的“Configure”,然后按下按钮生产 推送通知许可证。根据“向导”指导的步骤生成一个签名并上传,最后下载生成的许可证。此步骤在 Apple文档中 也有谈到。

4.    通过双击.cer文件将你的 aps_developer_identity.cer 引入Keychain中。

5.    在Mac上启动 Keychain助手,然后在login keychain中选择 Certificates分类。你将看到一个可扩展选项“Apple Development Push Services”

6.    扩展此选项然后右击“Apple Development Push Services” > Export “Apple Development Push Services ID123”。保存为 apns-dev-cert.p12 文件。

7.    扩展“Apple Development Push Services” 对“Private Key”做同样操作,保存为 apns-dev-key.p12 文件。

8.    需要通过终端命令将这些文件转换为PEM格式:

openssl pkcs12 -clcerts -nokeys -out apns-dev-cert.pem -in apns-dev-cert.p12

9.    转换得到key的pem:

openssl pkcs12 -nocerts -out apns-dev-key.pem -in apns-dev-cert.p12

10.    如果你想要移除密码,要么在导出/转换时不要设定或者执行:

openssl rsa -in apns-dev-key.pem -out apns-dev-key-noenc.pem

11.    最后,你需要将键和许可文件合成为apns-dev.pem文件,此文件在连接到APNS时需要使用:

cat apns-dev-cert.pem apns-dev-key-noenc.pem > apns-dev.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将会给你一个错误消息,但是你不得不向上翻输出LOG,来找到它。



当然上面要测试prodution版本是否正确的话,把

gateway.sandbox.push.apple.com换成gateway.push.apple.com就好。













客户端很好做,申请证书,复制代码,就行了。




服务器端,



如果是php的,那必须使用.pem的证书,如果是java的,那必须使用.p12的证书



。(很可能还需要双击证书进行安装!)

















链接地址:http://blog.sina.com.cn/s/blog_6f9a9718010128hi.html