关于这个话题,已经有很多写的很好的文章了。但是,在自己做的过程中,即使别人写的已经很好了,还是会遇到这样那样的问题。自己还是再写一遍吧。
本文记录了从无到有申请证书,到最后能够发出通知。当然,前提是我们有一个合适的开发者帐号。
准备工作
1. 登录开发者帐号,如果帐号的权限合适。我们会看到如下图:
或者最新的界面应该是下面(刚刚发现页面更新了):
2. 点击红色框内的菜单,会来到如下界面:
创建App ID
这里要创建的App ID就是我们的App的Bundle Id。
3. 点解左侧的“App IDs”,会看到当前帐号下的所有App ID。
4. 点击右上角的?
App ID Description下添加这个这个App ID的描述,如“My Test App”。
App ID Prefix下填写App的Bundle ID。不要带*号。
App Services下,勾选Push Notifications。
5. 点击Continue,会看到刚创建的App Id的信息。如下图:
6. 这时候再点击左侧的“App IDs”,会看到右边的列表多了一条。
申请证书
推送证书分为开发证书和生产证书。我们以生产证书为例。
7. 点击左侧的“Certificates”下的“Production”,会看到当前帐号下的所有生产证书
8. 点击右上角的?
9. 选中Production下的Apple Push Notification service SSL,点击Continue
10. 在App ID下选中我们新建的App ID。点击Continue
11. 点击Continue,来到如下界面,需要我们上传CSR文件
接下来,我们要先在本地生成CSR文件。
12. 打开钥匙串(Keychain Access)程序,点击左上角的Keychain Access,做如下图的选择
12. 然后会看到如下提示
13. 填入邮箱等信息,选择“Save to Disk”。点击Continue后,会提示保存选择保存位置。选择合适的保存位置,保存。
14. 再接着第#11步,我们要上传刚才生成的CSR文件。点击“Choose File”,选择我们刚才生成的文件,然后点击Continue。然后会来到如下界面:
这时,我们的证书已经创建好了。点击Download,将证书下载到本地。我在桌面创建一个名为Cert的文件夹,将证书放到该文件夹下。一会儿还会用。
创建Provisioning Profile
15. 点击左侧的Provisioning Profiles下的Distribution
16. 点击右上角的?
17. 点击Distribution下的In House,点击Continue
18. 在App ID下选择我们新建的App ID。点击Continue
19. 选择我们刚才新建的证书所属的帐号。点击Continue
19. 在Profile Name中,输入Profile的名字。点击Continue
这时,我们的Profile已经创建好了。点击Download,下载到本地。我把下载的Profile放到了在#14步中新建的Cert文件下。
生成供服务端使用的证书
这一步是在我们已经申请好的证书基础上,运行SSL命令。生成供我们的服务端使用的证书(也就是说,我们的服务端在发送通知的时候,要加载合适的证书)。
20. 打开桌面上的Cert文件夹,双击我们新申请的证书,证书会被倒入到钥匙串(Keychain Access)中。
打开钥匙串程序,点击Certificate,找到我们新建的证书,右键导出。如下图:
21. 输入文件名称,选择要保存的位置(我放在桌面上)。点击Save
22. 导出的时候,会要求输入密码,如下图:
23. 输入密码。点击OK。证书就被保存到了桌面上
24. 好吧,刚才保存的位置不好。把刚才导出的证书拖到Cert文件夹中。
25. 在Cert下创建一个Gen文件夹,将下载的证书和导出的证书复制到Gen中。并在Gen文件下,做如下的重命名:
下载的证书->developer_identity.cer
导出的证书->mykey.p12
注:这一步不是必须的,完全可以省略。我只是为了方便实用接下来的命令(参考自这里)。
25. 打开终端(Terminal)程序,cd到桌面的Gen文件夹下。依次输入如下命令:
openssl x509 -in developer_identity.cer -inform DER -out developer_identity.pem -outform PEM openssl pkcs12 -nocerts -in mykey.p12 -out mykey.pem openssl pkcs12 -export -inkey mykey.pem -in developer_identity.pem -out iphone_dev.p12
期间会要求输入密码(导出的证书的密码和新生成的证书的密码),按要求输入就可以了。如下图:
运行完毕后,会在Gen下生成几个文件,其中iphone_dev.p12就是供服务端使用的证书。
使用新证书对程序签名
当然,我们打包的时候要用新的证书和Profile。如下图:
在Project下,
在Target下,
接下来,就是打包了。当然,还需要在服务端实现通知的推送。
参考:
http://blog.csdn.net/kepoon/article/details/22672133
http://stackoverflow.com/questions/7213074/notnoop-java-apns-push