IOS 推送总结

作者: damonzero1991 | 来源:发表于2016-10-19 12:54 被阅读152次

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

    一、 推送原理


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

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


    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

    C95BD68F-E6FA-49F4-8ECB-C72902F41D4D.png
    选择当前要设置通知的APP IDs
    这里我以新建一个APP IDs为例,若公司已有项目APP IDs,则略过此步
    选择右上角"+"号创建一个APPID
    填写name以及Bundle ID
    A93F9CAF-20CA-47B8-8DA2-B46AF441C089.png
    Bundle ID需要与Xcode里项目Bundle ID一致
    6F810F29-E7DF-4190-A069-457036873A10.png
    勾选push notification 并完成提交
    找到刚创建好的APP IDs,可以看到下面的通知选项处提示Configurable,表示证书还没配置,点击Edit进行编辑
    这里看到推送证书分为2个版本,一个开发模式,一个生产模式,即我们在开发测试时使用开发模式证书,发布上线后采用生产模式证书,两个都要创建(本次只作开发模式演示,当然创建生产版证书的步骤也是一样的)
    Choose File选择最开始创建在桌面的Request文件
    1F5ABE01-3DD1-487D-B7D4-8470FE2FD686.png
    创建证书OK后 下载到本地
    86A5F026-7B97-41C4-A6BB-C3D7341D8A23.png
    开发版和生产版证书都创建好后,此时这里已经都是启用状态了。
    生成XCODE使用的provisioning文件,该文件用于真机调试:
    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端口,一般这里都不会出现什么问题。


    终端显示

    下面我们使用生成的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给服务端使用。


    ECCD5164-A95C-4777-A7CF-EA60D6D73398.png


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

    相关文章

      网友评论

        本文标题:IOS 推送总结

        本文链接:https://www.haomeiwen.com/subject/lyhxuttx.html