注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

网易杭州 QA Team

务实 专注 分享 做有态度的QA

 
 
 
 
 

日志

 
 

iPhone的push机制功能原理浅析及应用举例  

来自阿妙   2012-02-03 21:05:21|  分类: 移动APP |举报 |字号 订阅

  下载LOFTER 我的照片书  |

第一部分:Push原理(转)
(以下绝大多数内容参考自、图片来自iPhone OS Reference Library)
机制简介
Push 的工作机制可以简单的概括为下图

iPhone的push机制功能原理浅析及应用举例 - 阿妙 - miaocjlu的博客

 
图中:

Provider 是指某个iPhone软件的Push服务器。
APNS 是Apple Push Notification Service(Apple Push服务器)的缩写,下文统一使用该缩写。
因此,整个过程可以分为三个阶段,下面用大家常用的聊天客户端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认证
许多朋友说Push不能用。其中一大部分,就是在认证阶段就出了问题。想了解原因?请细看:
这里所说的认证机制,实际上包含两层。一层是物理连接上的认证(Connection trust),另一层则才是涉及到iPhone 设备令牌的认证(token trust)。
物理连接上的认证:SSL/TLS链接

iPhone的push机制功能原理浅析及应用举例 - 阿妙 - miaocjlu的博客

 
(如果你了解TLS,那么这里我几乎无需介绍。)
iPhone在开启Push的时候,会连接 APNS建立一条TLS加密链接。每一台正常的iPhone都有一个独有的设备证书(iPhone激活时APNS分配的,破解会丢失这个证书),而APNS也有一个服务器证书。两者建立的时候,会验证彼此的证书有效性。
TLS链接一旦建立,在没有数据的情况下,只需要每隔15分钟进行一次保活的握手,因此几乎不占流量。而 一旦因为意外原因导致链接中断,iPhone会不断重新尝试建立TLS链接,直到成功。
更高一层次:基于token(令牌)的认证
在机制简介里,我提到过APNS判断Push推送消息该发给哪台iPhone的依据是一个“目的iPhone的标识”,这个 标识就是device token(设备令牌)
设备令牌是怎么生成的呢?是每次建立TLS 连接时,APNS通过前一层次(TLS层)里我们提到的每台正常的iPhone唯一的设备证书(unique device certificate),并用令牌密钥(token key)加密生成的。(实际上是通过设备证书生成,然后通过token key加密传输给Device的)

iPhone的push机制功能原理浅析及应用举例 - 阿妙 - miaocjlu的博客

 
在令牌生成了之后,APNS会把设备令牌(device token)返回给iPhone,而对应的Push应用程序(如BeejiveIM),则把返回来的设备令牌(device token)直接发送给Provider(如BeejiveIM服务器)(这个是必须的)。这样,当Provider有Push消息要发送时,就会把对应帐号的设备令牌(device token)和消息一起发送给APNS,而APNS再依据设备令牌(device token),找到相应TLS链接的iPhone,并发送相应的Push消息。
以上复杂的流程可以归纳为下面这幅图:

iPhone的push机制功能原理浅析及应用举例 - 阿妙 - miaocjlu的博客
图中,Client App是iPhone上的Push应用程序。(图中缺了一条(当有Push消息时)由Provider到APNS的链接)
最重要的部分——每台 iPhone独有的设备证书和密钥的来历
正常的iPhone刷系统之后,是没有设备证书和密钥的。这就是为什么iPhone会需要连接到 iTunes上进行激活——激活过程中,Apple会分配给每台iPhone独一无二的设备证书(device certificate)和密钥(key)。
以上我仅仅介绍了从iPhone到APNS的链接建立。其实从Provider到 APNS也有一条TLS链接,但是与本文关系不大,所以不多加介绍了。
 
后话
需要注意的地方:
1 每一个Provider需要一个唯一的证书和private cryptographics(私有密钥),前者由Apple提供,就是用你的开发者证书到网站上注册填写一些东西(其中的Topic信息很重要,就是Client application的Bundle ID)后得生成的证书。该证书在与APNS建立连接时需要用到。一个连接只能为一个application传输数据(topic)。此过程比较乱,不过还好网上有示例。
2 需要在client代码中注册push服务,当程序安装时,系统就会把应用程序的这个请求发给APNS,APNS产生一个设备令牌,加密后再回传给client,client需要将这个令牌发送给provider,因为provider每次notification都必须带有这个令牌。
几个比较重要的功能FeedBack和QoS :
FeedBack是指当APNS发现被推送的设备上的目标程序已经被卸载后,会给provider返回一个list列表,provider需要将这些设备去除。
Qos就是指当APNS收到一个push请求却发现目标device没有启动时候,会将这个请求缓存下来,等待device再次建立连接后再发送。
 
第二部分:网易云相册app的评论消息push提醒通知

先来说一下push通知的方式

在iOS5、iOS5.0.1及最新的iOS 5.1beta版(统一简称为新版ios系统)上,相较于iOS4.3.5及其之前的版本(统一简称为旧版ios系统),提醒样式变成可选择的,还可以选择是否在锁定屏幕时显示呢,如下图:


iPhone的push机制功能原理浅析及应用举例 - 阿妙 - miaocjlu的博客
 图1  iOS4.3.5上的云相册通知设置选项
iPhone的push机制功能原理浅析及应用举例 - 阿妙 - miaocjlu的博客
图2  iOS5.0.1上的云相册通知设置选项
(说明:由于屏幕长度限制,图2顶端被覆盖的部分是此应用的通知总开关iPhone的push机制功能原理浅析及应用举例 - 阿妙 - miaocjlu的博客 ,
如果应用的提醒可伴随声音,则在“应用程序图标标记”下会有个“声音”选项
iPhone的push机制功能原理浅析及应用举例 - 阿妙 - miaocjlu的博客
  
新版ios系统的提醒样式增加“无”和“横幅”两个选择,为了避免某些应用的打扰,就可以选择“无”,或则可以选择“横幅”,提醒会以横幅的方式在屏幕顶端出现,大概5s之后就会自动消失,既不会挡住你的视线,也很省地方,如下图:
iPhone的push机制功能原理浅析及应用举例 - 阿妙 - miaocjlu的博客
 “应用程序图标标记”选项还是指iPhone桌面app应用图标上的数字提醒,打开此选项,就算提醒方式选择“无”,得不到“时时提醒”,但是可以通过app图标的数字提醒知道有新内容。
“在锁定的屏幕显示”选项,是与提醒方式分开的,就说如果关闭此项就不会出现此应用的任何提醒,如果打开此选项,就算提醒方式选择“无”,在锁定的时也会给出提醒,而且相对于旧版ios系统,新版ios系统能显示多条信息提醒,如下图:
iPhone的push机制功能原理浅析及应用举例 - 阿妙 - miaocjlu的博客
 图3  锁定时,仅一条信息的提醒
iPhone的push机制功能原理浅析及应用举例 - 阿妙 - miaocjlu的博客
 图4  锁定时,有多条消息的提醒

下面具体介绍网易云相册对push通知的应用

在touch(新版ios系统)上安装网易云相册app,加入or创建相片群,并上传相片。打开系统设置,找到网易云相册的通知设置,按图2设置。使用别的机子or在web上对此相片进行评论:

1、在锁定情况下,提示如图3、图4;

2、在未锁定的情况下,提示如下图


iPhone的push机制功能原理浅析及应用举例 - 阿妙 - miaocjlu的博客
图5
 
图5上除了跳出弹框,云相册app图标上也会出现数字(如果通知设置里“应用程序图标标记”为否,那就不出现),且再有push来时会自动递增;点击[查看](如果提醒方式是“横幅”,点击顶部出现的横幅提醒),会自动打开云相册,如下图:
iPhone的push机制功能原理浅析及应用举例 - 阿妙 - miaocjlu的博客
图6
 图6的“消息”icon上会出现数字,且与外面“云相册app图标上的数字”一致,如图iPhone的push机制功能原理浅析及应用举例 - 阿妙 - miaocjlu的博客
如果用户并没有点击“消息”icon查看消息,而是做别的操作,那么再切换到桌面时,云相册app图标上的数字就不能消失,当再有消息来时,此数字会自动递增。
在图5上,如果点击的是[close],再点击云相册app登录,图6顶部的“您有新的消息,请点击查看”的提示语就不会显示(如果提醒方式是“横幅”,不通过横幅点击进入,提示语也不会显示)
 
后话
iPhone基本是单任务的,程序切出去之后就被挂起了,要由通知中心来处理接收到的消息,统一由push中心提示很节省资源!
比较神奇的地方是,如Twitter,如果以前用vpn上过,后来没上的时候,就是在你不能访问Twitter的情况下,iOS都可以给你Push Twitter消息消息(这个是不是很好哇iPhone的push机制功能原理浅析及应用举例 - 阿妙 - miaocjlu的博客


 

  评论这张
 
阅读(835)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016