iOS远程推送通知服务APNs

iOS远程推送通知服务APNs

苹果的APNs(苹果推送通知服务Apple Push Notification server)允许设备和苹果的推送通知服务器保持链接,支持开发者推送消息到给用户设备对应的应用程序。

工作机制概括图:

这里要提到的一点是,我们的设备和APNS服务器之间的通讯是基于SSL协议的TCP流通讯,二者之间维持一个长连接,当从APNS服务器注册成功后,一定 要将device_token发送给我们的应用服务器,因为在推送过程中,首相是由我们的应用服务器(上图中Provider)将需要推送的消息结合 device_token按指定格式(后面会提到)打包然后发送给APNS服务器,然后由APNS服务器推送给我们的设备。


一、苹果的APNs基本原理是:

苹果利用自己专门的推送服务器(APNs)接收来自我们自己应用服务器的需要被推送的信息,然后推送到指定的iOS设备上,然后由设备通知到我 们的应用程序,设备以通知或者声音的形式通知用户有新的消息。
推送的前提是装有我们应用的设备需要向APNs服务器注册,注册成功后APNs服务器会返给 我们一个device_token,拿到这个token后我们将这个token发给我们自己的应用服务器,当有需要被推送的消息时,我们的应用服务器会将 消息按指定的格式打包,然后结合设备的device_token一并发给APNs服务器,由于我们的应用和APNs维持一个基于TCP的长连接,APNs 将新消息推送到我们设备上,然后在屏幕上显示出新消息来。


原理图:


二、实现消息推送的步骤:

    1、注册:为应用程序申请消息推送服务。此时你的设备会向APNs服务器发送注册请求。

    2、APNs服务器接收请求,并将deviceToken返给你设备上的应用程序
    3、客户端应用程序将deviceToken发送给后台服务器程序,后台接收并储存。
    4、后台服务器向APNs服务器发送推送消息
    5、APNs服务器将消息发给deviceToken对应设备上的应用程序

三、APNs操作流程

1、创建请求证书

       1)、打开“钥匙串访问”

       2)、选择  KeychainAccess[钥匙串访问] -> Certificate Assistant [证书助理] -> Request a Crerihicate From CretificatieAuthority[从证书颁发机构请求证书]

       3)、输入付费的账号信息后以默认的文件名保存到本地磁盘。


2、申请SSL证书

       1)、创建App ID

                使用APNs服务的iOS应用有一个唯一的App ID。

                进入苹果开发者中心 https://developer.apple.com

                选择 iOS Apps -> Identifiers ,点击右上角加好添加一个App ID。

       2)、配置App ID

              创建好App ID之后,进入App ID 详情界面 -> setting。

              选择”Create an additional certificate to use for this App ID -> Create Certificate",根据提示选择上一步生成的请求证书上传。

             下载生成好的开发版的SSL证书,双击安装证书到钥匙串。


3、创建描述文件 Provisioning Profile

      1)、进入苹果开发者中心 https://developer.apple.com

      2)、选择Provisioning Profiles,点击右上角加好添加Provisioning Profile,选择iOS App Development,选择刚刚创建的App ID。

      3)、生成证书后下载到本地安装该文件。名称一般为xxx.mobileprovision。将该文件xxx.mobileprovision导出p12格式的私钥文件(比如:Certificates.p12)。


4、制作后台服务器使用的p12文件

 制作p12文件,我们需要使用Open SSL

我们需要上面几步得到的三个文件:

      1)、CertificateSigningRequest.certSigningRequest

      2)、Certificates.p12

      3)、aps_development.cer

 在终端执行如下操作:

   (1)、将aps_development.cer转换成aps_development.pem格式


        $ : openssl x509 -in aps_development.cer -inform DER -out aps_development.pem -outform REM


  (2)、将p12格式的私钥转化成pem,需要设置几次密码


        $ : openssl pkcs12 -nocerts -out Certificates.pem -in Certificates.p12


 (3)、用CertificateSigningRequest.certSigningRequest、Certificates.pem、aps_development.pem创建p12格式的文件。


        $ : openssl pkcs12 -export -in aps_development.pem -inkey Certificates.pem -certifile CertificateSigningRequest.certSigningRequest -name "aps_developer_identity" -out aps_developer_identity.p12


这样我们就得到了在.net 应用程序中使用的证书文件:aps_developer_identity.p12

在测试该程序中,需要给出这里的aps_developer_identity.p12文件已经密码。为了方便iOS开发者测试APNs,已经有很多做好的线程服务器端的demo,比如:PushMeBaby[下载地址:http://github.com/stefanhafeneger/PushMeBaby]。

下载完成后打开工程,将aps.developer.cer文件加载到工程中,修改工程中对应得代码:

self.deviceToken = @"填入第4步中didRegisterForRemoteNotificationsWithDeviceToken获取到的deviceToken";

self.certificate = [[NSBundle mainBundle] pathForResource:@"aps_developer" ofTyre:@"cer"];

运行PushMeBaby工程,点击push就可以给app终端发送消息。


5、本地app代码参考

iOS远程推送通知服务APNs_第1张图片  


奋斗如果帮到了你,要记得转发分享哦奋斗

你可能感兴趣的:(iOS远程推送通知服务APNs)