IOS 推送总结

此文主要以证书生成配置为主,实现简单推送,部分截图与内容来自于互联网,若对大家有所帮助,还请给个赞O(∩_∩)O~~。如有误,请指出,一起探讨。

一、 推送原理


Provider是指某个iPhone软件的Push服务器。APNS 是Apple Push Notification Service(Apple Push服务器)的缩写,是苹果的服务器。上图可以分为三个阶段。

  • 第一阶段:Push服务器应用程序把要发送的消息、目的iPhone的标识打包,发给APNS。
  • 第二阶段:APNS在自身的已注册Push服务的iPhone列表中,查找有相应标识的iPhone,并把消息发到iPhone。
  • 第三阶段:iPhone把发来的消息传递给相应的应用程序, 并且按照设定弹出Push通知。


    IOS 推送总结_第1张图片
  1. 应用程序注册消息推送。
  2. IOS跟APNS Server要deviceToken。应用程序接受deviceToken。
  3. 应用程序将deviceToken发送给PUSH服务端程序。
  4. 服务端程序向APNS服务发送消息。
  5. APNS服务将消息发送给iPhone应用程序。无论是iPhone客户端跟APNS,还是Provider和APNS都需要通过证书进行连接的。

二、 证书的创建

1. 创建本地请求证书文件--CertificateSigningRequest

  • 钥匙串访问 --> 证书助理 --> 从证书颁发机构请求证书;
  • 填写邮箱和名称(可以随意填写) --> 存储到磁盘
  • 选择继续-保存至桌面即可(此文件可长期重复使用,只作为本机器的一个识别作用)

2. 进入苹果开发者网站,生成证书以及profiles

依次选择Member Center - Certificates, Identifiers &Profiles - Certificates

IOS 推送总结_第2张图片
C95BD68F-E6FA-49F4-8ECB-C72902F41D4D.png

选择当前要设置通知的APP IDs
这里我以新建一个APP IDs为例,若公司已有项目APP IDs,则略过此步
选择右上角"+"号创建一个APPID
IOS 推送总结_第3张图片

填写name以及Bundle ID
IOS 推送总结_第4张图片
A93F9CAF-20CA-47B8-8DA2-B46AF441C089.png

Bundle ID需要与Xcode里项目Bundle ID一致
IOS 推送总结_第5张图片
6F810F29-E7DF-4190-A069-457036873A10.png

勾选push notification 并完成提交
IOS 推送总结_第6张图片

找到刚创建好的APP IDs,可以看到下面的通知选项处提示Configurable,表示证书还没配置,点击Edit进行编辑
IOS 推送总结_第7张图片

这里看到推送证书分为2个版本,一个开发模式,一个生产模式,即我们在开发测试时使用开发模式证书,发布上线后采用生产模式证书,两个都要创建( 本次只作开发模式演示,当然创建生产版证书的步骤也是一样的)
IOS 推送总结_第8张图片

Choose File选择最开始创建在桌面的Request文件
IOS 推送总结_第9张图片

1F5ABE01-3DD1-487D-B7D4-8470FE2FD686.png

创建证书OK后 下载到本地
IOS 推送总结_第10张图片
86A5F026-7B97-41C4-A6BB-C3D7341D8A23.png

开发版和生产版证书都创建好后,此时这里已经都是启用状态了。
生成XCODE使用的provisioning文件,该文件用于真机调试:
IOS 推送总结_第11张图片
0D1B1B3A-FAB6-47BD-A721-C391CC63F0F8.png

生成过程:
进入developer.apple.com,选择member center - Certificates, Identifiers & Profiles - Provisioning Profiles,然后选择创建Provisioning file,接着选择iOS App Development ,下一步选择AppId,选中之前建立的支持push的appid,接着下一步选择支持push的certificate,下一步勾选需要支持的device id,最后一步设置provisioning文件的文件名,这样provisioning文件就生成了。

3. 生成服务端使用的证书文件

  • 首先双击前面保存的cer文件,此时会打开“钥匙串访问”软件,里面会出现一个Apple Development IOS push services证书,一个公用密钥和一个专用秘钥,秘钥的名称与证书助理中填写的名称一致。
  • 选中证书,导出为 apns-dev-cert-development.p12 文件
  • 选中专有秘钥,导出为apns-dev-key-development.p12文件
  • 通过终端命令将这些文件转换为PEM格式:
  • 设置密码,建议所有都为一个密码
openssl pkcs12 -clcerts -nokeys -out apns-dev-cert-development.pem -in apns-dev-cert-development.p12     
openssl pkcs12 -nocerts -out apns-dev-key-development.pem -in apns-dev-key-development.p12   
  • 最后, 需要将两个pem文件合并成一个apns-dev.pem文件,此文件在连接到APNS时需要使用:
 cat apns-dev-cert-development.pem apns-dev-key-development.pem > apns-dev-development.pem

4. 测试证书

执行下面命令:

telnet gateway.sandbox.push.apple.com 2195(apns的测试环境)
telnet gateway.push.apple.com 2195(apns的正式环境)

它将尝试发送一个规则的,不加密的连接到APNS。如果你看到下面的反馈,那说明你的MAC能够到达APNS。按下Ctrl+C关闭连接。如果得到一个错误信息,那么你需要确保你的防火墙允许2195端口,一般这里都不会出现什么问题。


IOS 推送总结_第12张图片
终端显示

下面我们使用生成的SSL证书和私钥来设置一个安全的链接去链接苹果服务器,执行命令如下:

openssl s_client -connect gateway.sandbox.push.apple.com:2195 -cert apns-dev-cert-development.pem -key apns-dev-key-development.pem

执行之后需要输入密码,就是上面我们设置的密码即可。
如果链接是成功的,你可以随便输入一个字符,按下回车,服务器就会断开链接,如果建立连接时有问题,OpenSSL会给你返回一个错误信息。
输出结果如下,则说明是正确链接了,把上述合并的apns-dev-development.pem给服务端使用。


IOS 推送总结_第13张图片
ECCD5164-A95C-4777-A7CF-EA60D6D73398.png


如果有错误,请检查是否导出正确的推送证书。

你可能感兴趣的:(IOS 推送总结)