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服务器发送注册请求。
三、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代码参考
(如果帮到了你,要记得转发分享哦 )