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

时间: 2024-10-12 16:10:05

iOS 推送服务的简易原理与配置的相关文章

ios推送通知之ios推送证书的申请和使用配置

很多人初次接触推送通知,不知道怎么去申请ios推送证书和配置推送. 很多人犯的错误就是用推送证书p12去打包ipa,推送不是用来打包的,下面详细介绍ios推证书的申请和配置使用. ios推送证书分为测试调试用的iOS推送证书(开发环境)和上架到App Store的ios 推送证书!(生产环境) APP要推送通知首先要在创建APPID时勾选推送服务. 推送证书是配置上传到推送平台的,如极光推送.个推.小米推送等,不是用来打包ipa的,下面会有介绍. 一.创建唯一标示符App IDs 首先打开开发者

ios推送服务,php服务端

本文转载至http://my.oschina.net/AStar/blog/176531 生成证书 证书生成参考:https://parse.com/tutorials/ios-push-notifications 会生成三个文件 xxx.cer xxx.certSigningRequest xxx.p12 用PHP做推送需要 推送证书生成. 生成pem步骤: 1.下载下来你配置好的推送证书aps_developer_identity.cer 文件. 2.转换 .cer 文件到 .pem 文件:

移动互联网实战--Apple的APNS桩推送服务的实现(2)

前记: 相信大家在搞IOS推送服务的开发时, 会直接使用javapns api来简单实现, 调试也直连Apple的APNS服务(产品/测试版)来实现. 很少有人会写个APNS的桩服务, 事实也是如此. 只是当时我所面临的应用场景有些特殊, 为了测试服务的性能和调试功能方便, 特地写了APNS的桩服务(其实主要原因是当时的iphone测试机, 被小组长"霸占"占为己用, ⊙﹏⊙b汗). 在此写一篇关于APNS桩服务的文章, 以此纪念逝去的"青春", 也希望对读者有所帮

MQTT协议及推送服务(二)

MQTT简介 MQTT全称叫做Message Queuing Telemetry Transport,意为消息队列遥测传输,是IBM开发的一个即时通讯协议.由于其维护一个长连接以轻量级低消耗著称,所以常用于移动端消息推送服务开发. MQTT特性 MQTT具有如下特性: 使用发布/订阅消息模式,提供一对多消息发布: 对负载内容屏蔽的消息传输: 使用TCP/IP进行网络连接: 主流的MQTT是基于TCP进行连接的,同样也有UDP版本的MQTT,但是不太常用,叫做MQTT-SN. 具有三种消息发布服务

移动互联网实战--Apple的APNS桩推送服务的实现(1)

前记: 相信大家在搞IOS推送服务的开发时, 会直接使用javapns api来简单实现, 调试也直连Apple的APNS服务(产品/测试版)来实现. 很少有人会写个APNS的桩服务, 事实也是如此. 只是当时我所面临的应用场景有些特殊, 为了测试服务的性能和调试功能方便, 特地写了APNS的桩服务(其实主要原因是当时的iphone测试机, 被小组长"霸占"占为己用, ⊙﹏⊙b汗). 在此写一篇关于APNS桩服务的文章, 以此纪念逝去的"青春", 也希望对读者有所帮

互联网推送服务原理:长连接+心跳机制(MQTT协议)

互联网推送消息的方式很常见,特别是移动互联网上,手机每天都能收到好多推送消息,经过研究发现,这些推送服务的原理都是维护一个长连接(要不不可能达到实时效果),但普通的socket连接对服务器的消耗太大了,所以才会出现像MQTT这种轻量级低消耗的协议来维护长连接,那么要如何维护长连接呢: 在写之前,我们首先了解一下为什么Android维护长连接需要心跳机制,首先我们知道,维护任何一个长连接都需要心跳机制,客户端发送一个心跳给 服务器,服务器给客户端一个心跳应答,这样就形成客户端服务器的一次完整的握手

基于Qt移动应用的消息推送服务原理与应用

说到移动应用,大家都觉得移动嘛,当然是Java和Object-c来做啦,什么推送啊,各种系统调用啊,其实不然?如果你了解Qt, 你就知道我说的不然,也有所道理. 说道几点 一.目前Android的移动的消息.通知推送 1)轮询(Pull)方式:应用程序应当阶段性的与服务器进行连接并查询是否有新的消息到达,你必须自己实现与服务器之间的通信,例如消息排队等.而且你还要考虑轮询的频率,如果太慢可能导致某些消息的延迟,如果太快,则会大量消耗网络带宽和电池. 2)SMS(Push)方式:在Android平

互联网推送服务原理

本文摘抄自网络,原地标题:互联网推送服务原理:长连接+心跳机制(MQTT协议) 互联网推送消息的方式很常见,特别是移动互联网上,手机每天都能收到好多推送消息,经过研究发现,这些推送服务的原理都是维护一个长连接(要不不可能达到实时效果),但普通的socket连接对服务器的消耗太大了,所以才会出现像MQTT这种轻量级低消耗的协议来维护长连接,那么要如何维护长连接呢? 在写之前,我们首先了解一下为什么android维护长连接需要心跳机制,首先我们知道,维护任何一个长连接都需要心跳机制,客户端发送一个心

转 互联网推送服务原理:长连接+心跳机制(MQTT协议)

http://blog.csdn.net/zhangzeyuaaa/article/details/39028369 目录(?)[-] 无线移动网络的特点 android系统的推送和IOS的推送有什么区别 推送的实现方式 互联网推送消息的方式很常见,特别是移动互联网上,手机每天都能收到好多推送消息,经过研究发现,这些推送服务的原理都是维护一个长连接(要不不可能达到实时效果),但普通的socket连接对服务器的消耗太大了,所以才会出现像MQTT这种轻量级低消耗的协议来维护长连接,那么要如何维护长连