zoukankan      html  css  js  c++  java
  • iOS 推送服务的简易原理与配置

    最近的项目需要用到iOS的push功能,在配置push功能的过程中遇到了一些不清楚的地方,经过查阅资料和思考,已有初步认识,下面进行一下梳理,我们的服务器端用的是Facebook的Parse。

    完整的push流程是这样的,服务器端将信息传递给APNS(Apple Push Notification Service),再由APNS将信息push到目标设备。

    服务器——APNS   

    服务器与APNS之间是通过SSL(Secure Sockets Layer)协议进行通信的,简单的原因应该是这样的,Apple的推送服务器肯定不能随便接受外界的push请求,只有经过它的认证才可以,于是我们的服务端程序需要有一个Apple授予的SSL证书。这个证书怎样获得呢?分几步:

    1.生成SSL证书请求文件CertificateSigningRequest.certSigningRequest

    • 打开Keychain Access
    • 选择Keychain Access > Certificate Assistant > Request a Certificate From a Certificate Authority…
    • 填写Email

           

    2.将SSL证书请求文件上传至 Apple Developer Member Center以取得真正的SSL证书,我们假设已经创建好了App ID

           

    • 向下滑动页面至 Push Notifications,在这里我们就可以创建即将配置在服务器上的SSL证书了,开发证书和发布证书申请的流程是一样的,我们这里以开发证书为例。 
     

                     

    • 在下一页点击Continue,我们将会被要求上传之前生成的Certificate Signing Request (CSR)文件,即CertificateSigningRequest.certSigningRequest。
    • 上传后点击Generate,至此SSL证书便生成出来了,我们需要将它下载到本地,本地便有了这样一个文件aps_development.cer。

    3.将SSL证书配置在服务器端

    虽然本地已经有了服务器端所需的SSL证书aps_development.cer,但是它并不能直接送给服务器端,还需要一点工序,如何加工请看下面的流程。

    • 双击SSL证书aps_development.cer,它将自动导入到Keychain中,注意观察双击前后Keychain Access中的变化。
    • 在Keychain Access的"My Certificates"分类中右击刚才导入SSL证书(名字是Apple Development iOS Push Services:App的Bundle ID),选择图中的Export。
     
        
     
     
    • 选择Export后会出现一个页面,以便我将证书以.p12格式导出,.p12是服务器端所需的文件,至少是Parse所需的。*注意*,一定确保上一步中我们选中了"My Certificates"分类,否则在这一步中.p12格式是disable的。终于得到了服务器端所要的“Apple签证”,按照服务器端的配置要求去配置吧,在Parse中只需将这个.p12文件上传就可以了。
     
            

    至此,服务器端——APNS已打通,我们继续考虑APNS——设备之间的通信。

    APNS——设备(设备将Push信息分发至App)

    APNS怎么知道要将服务器端要将信息push给哪个设备或是哪一群设备呢?显然是服务器端将目标设备告诉了APNS,经了解,APNS要求服务器端以JSON(JavaScript Object Notation) 格式将目标设备的Device ID集合告诉它,然后它再将push信息发到相应设备上,push信息到了设备,设备再根据push信息内容把push信息指定到具体的App。于是,设备中安装的App也需要有一些能够验明正身的东西,这个东西肯定也是由Apple Developer Member Center提供的。

    1. 创建Provisioning Profile

     
    2. 配置App
    • 将provisioning profile下载到本地,双击,自动导入到Xcode。
    • 在Xcode中设置code signing。
     

    到这里,App的验明正身工作已经做完了,服务器端——APNS——设备(准确的说是App)全部打通,剩下就是代码层面的工作了。最后总结一下Apple Push的配置,想要实现Server——APNS——App的Push通信,就要让APNS认识Server和App,于是需要两个物件,一个是给Server的SSL证书(最终形式为.p12),一个是给App的provisioning profile,这两个物件肯定都是要向Apple申请的,这便是上面一系列流程要达到的目的。

    另外,再补充一点关于CertificateSigningRequest.certSigningRequest文件的事情,这个文件是我们向Apple申请证书的证书请求文件,在Keychain Access中可以随意生成,那么,每次制作证书都要生成一次吗?不是的,这个CertificateSigningRequest.certSigningRequest文件中可能只是包含一些Mac设备信息,时间戳等,在同一台Mac上生成的多个CertificateSigningRequest.certSigningRequest文件可能只是时间戳不同,其他是一样的,所以它只需生成一个,之后做各种SSL证书均可使用。

  • 相关阅读:
    【PAT甲级】1043 Is It a Binary Search Tree (25 分)(判断是否为BST的先序遍历并输出后序遍历)
    Educational Codeforces Round 73 (Rated for Div. 2)F(线段树,扫描线)
    【PAT甲级】1042 Shuffling Machine (20 分)
    【PAT甲级】1041 Be Unique (20 分)(多重集)
    【PAT甲级】1040 Longest Symmetric String (25 分)(cin.getline(s,1007))
    【PAT甲级】1039 Course List for Student (25 分)(vector嵌套于map,段错误原因未知)
    Codeforces Round #588 (Div. 2)E(DFS,思维,__gcd,树)
    2017-3-9 SQL server 数据库
    2017-3-8 学生信息展示习题
    2017-3-5 C#基础 函数--递归
  • 原文地址:https://www.cnblogs.com/fire909090/p/6952391.html
Copyright © 2011-2022 走看看