您的位置:首页 > 移动开发 > IOS开发

IOS 申请push notification证书- 小结

2012-09-14 11:44 246 查看
同事说起要去整一下IOS的push notification,于是也查阅了相关的文章,也碰到了一些问题,在这里简单的总结一下。

【push 原理】

Provider(软件服务器)-->APNS-->IOS设备-->对应的软件

Push认证:一层是物理连接上的认证,另一层则才是涉及到iPhone 设备令牌的认证;

物理连接上的认证:SSL/TLS链接

iPhone在开启Push的时候,会连接 APNS建立一条TLS加密链接。每一台正常的iPhone都有一个独有的设备证书,而APNS也有一个服务器证书。两者建立的时候,会验证彼此的证书有 效性。

TLS链接一旦建立,在没有数据的情况下,只需要每隔15分钟进行一次保活的握手,因此几乎不占流量。而 一旦因为意外原因导致链接中断,iPhone会不断重新尝试建立TLS链接,直到成功。

基于token(令牌)的认证

在机制 简介里,我提到过APNS判断Push推送消息该发给哪台iPhone的依据是一个“目的iPhone的标识”,这个 标识就是device token(设备令牌)。

设备令牌是怎么生成的呢?是每次建立TLS 连接时,APNS通过前一层次(TLS层)里我们提到的每台正常的iPhone唯一的设备证书(unique device certificate),并用令牌密钥(token key)加密生成的。



在令牌生成了之后,APNS会把设备令牌(device token)返回给iPhone,而对应的Push应用程序(如BeejiveIM),则把返回来的设备令牌(device token)直接发送给Provider(如BeejiveIM服务器)。这样,当Provider有Push消息要发送时,就会把对应 帐号的设备令牌(device token)和消息一起发送给APNS,而APNS再依据设备令牌(device token),找到相应TLS链接的iPhone,并发送相应的Push消息。

最重要的部分——每台 iPhone独有的设备证书和密钥的来历

正常的iPhone刷系统之后,是没有设备证书和密钥的。这就是为什么iPhone会需要连接到 iTunes上进行激活——激活过程中,Apple会分配给每台iPhone独一无二的设备证书(device certificate)和密钥(key)。

【参考文章】http://www.devdiv.com/home.php?mod=space&uid=20&do=blog&id=9018

【几种证书】

一、*.certSigningRequest文件

1、生成Certificate Signing Request (CSR):

Keychain Access->Certificate Assistant->request a Certificate from a Certificate Authority..

填写你的邮箱和Common Name,这里填写为PushChat。选择保存

这样就在本地生成了一个PushChat.certSigningRequest文件。

二、生成*.p12文件

选中生成的“PushChat.certSigningRequest”就可以

1、导出密钥,并输入你的密码。

这样就生成了一个PushChatKey.p12文件。

三、新建一个App ID 和SSL certificate文件

1、用你的付过费的apple帐号登录到iOS Provisioning Portal。新建一个App ID。

Description:中输入PushChat

Bundle Seed ID:默认选择Generate New

Bundle Identifier:输入com.mysoft.PushChat

点击提交,这样就会生成新记录, 点击configurate,一路继续,途中选择前面生成好的PushChat.certSigningRequest文件,点击生成;生成完毕,我们把它下载下来。命名为aps_developer_identity.cer。

点击完成,你会发现状态变成Enabled。



【参考文章】http://www.cnblogs.com/aspnethot/articles/2248903.html

【注意】在跟同事的操作过程中,碰到的问题是,certSigningRequest证书不是自己产生的,直接拿到的是“aps_developer_identity.cer”,导致P12证书无法导出。所以得使用自己的开发账号;而且是主账户才行。

获取deviceToken的过程,参考上文;provider发送信息给APNS的例子,参见MainApnsend
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: