IOS-Push通知

来源:互联网 发布:mysql已删除的表 编辑:程序博客网 时间:2024/06/01 14:42

IOS
1.The app register for push notifications
The OS asks APNS for a device token
|
APNS Server
2.The app receives the device token
|
Your App
3.The app sends the token to your server
|
Your Server
4.When someting interesting happens,your server send
a push notification to the APNS server.

从上面的流程图中,可以看到一个能接收推送通知的App,需要3个东西:
App ID(唯一标识一个App程序)
Provisioning Profile(App程序的发布需要它,所以推送通知只能在真机上测试)
Device Token(设备标识,这个是推送通知功能中特有的)
而能推送通知的服务器端则要2个东西:

SSL Certificate
Private Key
值得注意的是APNS(ApplePush Notification Service) Server,完成发送Device Token和通知内容的功能,而且这2个动作都是被动的,即第一个动作是由App发起的,第二个则是推送通知的服务器发起的。

下面举例来说明:
整个过程可以分为三个阶段,下面用大家常用的聊天客户端BeejiveIM来说明。(BeejiveIM是一款支持多账户登录的支持Push的 iPhone聊天客户端,支持MSN、Google Talk等)
此时Provider为BeejiveIM服务器,我们在 BeejiveIM上登陆MSN,其实软件是先把登录信息发送到BeejiveIM服务器,再通过其服务器来登陆MSN。因此,当我关 闭了BeejiveIM,BeejiveIM服务器会继续为我登陆MSN,此时如果有人对我的MSN账户发送了消息,那么就会触发Push。此时:
第一阶段:BeejiveIM服务器把要发送的消息、目的iPhone的标识打包,发给APNS。
第二阶段:APNS在自身的已注册Push服务的iPhone列表中,查找有相应标识的iPhone,并把消息发到iPhone。
第三阶段:iPhone把发来的消息传递给相应的应用程序, 并且按照设定弹出Push通知。

Push认证:
iPhone在开启Push的时候,会连接 APNS建立一条TLS加密链接。每一台正常的iPhone都有一个独有的设备证书,而APNS也有一个服务器证书。两者建立的时候,会验证彼此的证书有 效性。
TLS链接一旦建立,在没有数据的情况下,只需要每隔15分钟进行一次保活的握手,因此几乎不占流量。而 一旦因为意外原因导致链接中断,iPhone会不断重新尝试建立TLS链接,直到成功。
更高一层次:基于token(令牌)的认证
在机制 简介里,我提到过APNS判断Push推送消息该发给哪台iPhone的依据是一个“目的iPhone的标识”,这个 标识就是device token(设备令牌)。
设备令牌是怎么生成的呢?是每次建立TLS 连接时,APNS通过前一层次(TLS层)里我们提到的每台正常的iPhone唯一的设备证书(unique device certificate),并用令牌密钥(token key)加密生成的。
在令牌生成了之后,APNS会把设备令牌(device token)返回给iPhone,而对应的Push应用程序(如BeejiveIM),则把返回来的设备令牌(device token)直接发送给Provider(如BeejiveIM服务器)。这样,当Provider有Push消息要发送时,就会把对应 帐号的设备令牌(device token)和消息一起发送给APNS,而APNS再依据设备令牌(device token),找到相应TLS链接的iPhone,并发送相应的Push消息。

0 0
原创粉丝点击