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证书均可使用。

  • 相关阅读:
    tomcat7:deploy (default-cli) on project myproject: Cannot invoke Tomcat manager: Software caused connection abort: socket write error
    android 更新版本案例
    Tomcat运行一段时间后,自动停止关闭,To prevent a memory leak,Druid 数据库连接自动关闭, the JDBC Driver has been forcibly unregistered.
    android调试debug快捷键
    android AlertDialog控件使用
    android RecyclerView的瀑布流布局案例
    android RecyclerView的Grid布局案例
    android RecyclerView的Linear布局案例
    android 子线程使用handle修改主线线程内容
    【CF840C】On the Bench DP
  • 原文地址:https://www.cnblogs.com/fire909090/p/6952391.html
Copyright © 2011-2022 走看看