消息推送 IOS---APNS

一.关于推送通知

推送通知,也被叫做远程通知,是在iOS 3.0以后被引入的功能。是当程序没有启动或不在前台运行时,告诉用户有新消息的一种途径,是从外部服务器发送到应用程序上的。一般说来,当要显示消息或下载数据的时候,通知是由远程服务器(程序的提供者)发送,然后通过苹果的推送通知服务(Apple Push Notification Service,简称apns)推送到设备的程序上。

推送的新消息可能是一条信息、一项即将到期的日程或是一份远程服务器上的新数据。在系统上展现的时候,可以显示警告信息或在程序icon上显示数字,同时,也可以播放警告音。一旦用户注意到程序有新的信息、时间或是数据,他们可以运行程序并访问新的内容。也可以选择忽略通知,这时程序将不会被激活。

iPhone, iPad和iPod touch上同一时刻只有一个app在前台运行。大多数程序在后台运行的时候,可以对某些用户感兴趣的内容做出回应(定时、或数据等)。推送通知能让程序在这些事件发生的时候通知用户。

作为提供者为程序开发和部署推送通知,必须通过iOS Developer Program Portal获得SSL证书。每个证书限用于一个程序,使用程序的bundle ID作为标识。证书有两种用途的:一种是针对sandbox(用于开发和测试),另外一种针对发布产品。这两种运行环境拥有为各自指定的IP地址并且需要不同的证书。还必须为两种不同的环境获取各自的provisioning profiles。

APNS提供了两项基本的服务:消息推送和反馈服务。

消息推送:使用流式TCP套接字将推送通知作为二进制数据发送给APNs。消息推送有分别针对开发和测试用的sandbox、发布产品的两个接口,每个都有各自的地址和端口。不管用哪个接口,都需要通过TLS或SSL,使用SSL证书来建立一个安全的信道。提供者编制通知信息,然后通过这个信道将其发送给APNs。 注:sandbox:   gateway.sandbox.push.apple.com:219 产品接口:gateway.push.apple.com:2195

反馈服务:可以得到针对某个程序的发送失败记录。提供者应该使用反馈服务周期性检查哪些设备一直收不到通知,不需要重复发送通知到这些设备,降低推送服务器的负担。 注:sandbox:feedback.push.apple.com:2196 产品接口:feedback.sandbox.push.apple.com:2196

二.Apple Push Notification的工作机制

自己的客户端发送消息到自己应用软件的apns,apns发送消息到你的手机。这个是根据令牌识别的。手机在发送消息到你的应用软件。

  •   首先是应用程序注册消息推送。
  • IOS跟APNS Server要deviceToken。应用程序接受deviceToken。
  • 应用程序将deviceToken发送给PUSH服务端程序(Provider)。
  • 服务端程序向APNS服务发送消息。
  • APNS服务将消息发送给iPhone应用程序。

1. Provider是指某个iPhone软件的Push服务器,是我们将要开发的服务器。

2. APNS 是Apple Push Notification Service(Apple Push服务器)的缩写,是苹果的服务器。 

上图可以分为三个阶段:

第一阶段:推送服务器(provider)把要发送的消息、目的iPhone的标识打包,发给APNS;

第二阶段:APNS在自身的已注册Push服务的iPhone列表中,查找有相应标识的iPhone,并把消息发到iPhone;

第三阶段:iPhone把发来的消息传递给相应的应用程序,并且按照设定弹出Push通知。

三. 推送之前的配置

在任何iOS应用开发里面,开发人员总是在团队里面扮演某一角色:团队经理,团队管理员,和团队成员。iPhone开发证书和配置文件由不同角色完成。通常团队经理是团队里面唯一可以创建Development SSL证书(沙箱环境)和Distribution SSL证书(产品环境)的人。而团队经理和团队管理员都可以创建Development和Distribution的配置文件。团队成员只能下载并安装证书和配置文件(!这里要区别好证书和配置文件的概念:证书,即Certificates,它主要是使用Access Key Chain来生成的一个签名密钥。而配置文件,即Provisioning profiles,它主要是根据不同的App来生成的针对性的代码签名文件。二者区别是一般一个开发者账户只能有一个Certificates(而Development一个,Distribtuion一个),但是可以有多个Provisioning profiles文件,且这些Provisioning profiles通常创建的时候都使用同一个Certrificates)。以下部分详细介绍该过程。

一、CSR文件

1、生成Certificate Signing Request(CSR)

2、填写你的邮箱和常用名称,并选择保存到硬盘。

点击继续:

 这样就在本地生成了一个Push.certSigningRequest文件。

二、p12文件

1、导出密钥。


2、输入你的密码。

这样就生成了一个Push.p12文件。

三、SSL certificate文件

1、用你付过费的帐号登录到iOS Provisioning Portal,并新建一个App ID,这个过程可以参考:iOS应用的真机调试,这样就会生成下面这条记录:


2、点击右侧的Configure:

3、点击Development Push SSL Certificate一行后的Configure:

4、点击Continue:

5、选择前面生成好的Push.certSigningRequest文件,点击Generate,出现如下所示的页面:

6、点击Continue:

7、点击Download,并将文件命名为aps_developer_identity.cer;双击aps_developer_identity.cer 文件导入Keychain中。

8、点击Done,你会发现状态变成了Enabled:

注意:有的App ID的Apple Push Notification service列是灰色的,并且不允许使用Configure按钮,这是因为APNS不支持带通配符的App ID。

到现在为止,我们已经生成了三个文件:

1、Push.certSigningRequest

2、Push.p12

3、aps_developer_identity.cer

四. 服务端程序

下载apns-php: https://code.google.com/p/apns-php/

要进行推送服务的第一件事就是获取推送许可证。产品服务端通过SSL与APNS通讯进行连接,使用pem许可证进行识别。这时会发现,还差两个pem文件

证书的生成步骤可看连接:https://code.google.com/p/apns-php/wiki/CertificateCreation

1.server_certificates_bundle_sandbox.pem

证书上一步已经获取到了,现在只需在终端执行 
openssl pkcs12 -in server_certificates_bundle_sandbox.p12 -out server_certificates_bundle_sandbox.pem -nodes -clcerts

2.entrust_root_certification_authority.pem


  两个.pem都搞定之后,就可以测试推送消息了

posted @ 2013-10-19 12:01  无心花  阅读(814)  评论(0)    收藏  举报