作者:HW-WXT
关于PUSH消息通知,之前只了解一下粗枝大叶,只知道通过手机通知栏发的消息,是通过PUSH通道下发下来的。近期要分析一个PUSH消息通知的需求方案,有幸研究了一下,整理汇总一番。参考网上相关文档,有不对的地方,欢迎指正。
-------------------------------------------------------------------------------
要获取服务器上不定时更新的信息,一般说有两种方式:
① 客户端轮询从服务器端查询(pull方式),隔一段时间从服务器上去查询,看是否有查询信息;
② 服务器使用推送的方式(push方式),当服务器端有新消息了,则把最新的消息Push到客户端上。
轮询方式,会涉及到功耗的问题,目前在一些应用中会有限制,不建议使用,因此推荐使用push方式。本文针对iPhone的PUSH通知和华为应用的PUSH通知,做简单对比分析。
l Push通知栏显示效果

点击Push通知栏,可以打开特定APP、打开特定网页也可以自定义处理行为。
l iPhone的Push功能原理
参考:
Push的工作原理:

Provider:某个iPhone软件的Push服务器
APNS:Apple Push Notification Service

如上图所示,消息推送的流程为:
① iPhone在开启Push的时候,会连接APNS建立一条TLS加密链路。 每个iPhone都会有一个独有的设备证书,APNS也有一个服务器证书。TLS链路建立后,会每隔15分钟进行一次保活的握手。如果链路中断,iPhone会尝试重新建立连接。
② APNS根据设备上报的设备证书,使用令牌密钥加密生成设备令牌(deviceToken)。APNS将deviceToken返回给iPhone
③ iPhone将该deviceToken给对应的push应用程序,如我们的智能家居APP;
④ iPhone上的应用程序,把这个deviceToken直接发送给Provider,如智能家居云;
当Provider有Push消息要发送时,就会把对应账号的deviceToken和消息一起发给APNS。APNS根据deviceToken找到相应的TLS链接的iPhone,并发送消息。上图中,缺少Provider和APNS之间的这条通路。
l 华为PUSH推送平台
华为Push服务相关的介绍,在华为开发者联盟上有详细介绍,参考:http://developer.huawei.com/push

如上图所示,华为Push消息通知的流程和iPhone的类似。
Step1: 开发者的App集成华为Push客户端SDK,调用客户的获取华为PushToken接口获取到PushToken;
Step 2: 开发者的App对于获取到的华为PushToken需要上报到开发者自己的服务器上;
Step 3: 开发者利用服务器上保存的PushToken向设备上App发送通知消息;
Step 4: 消息携带的PushToken作为鉴权和路由机制会通过华为Push平台将消息发送到最终用户设备上;
PUSH消息在终端的显示通知方式支持以下两种:
透传消息方式:由三方APP开发者自己控制,PUSH仅提供通道能力,具体的展现形式,由三方APP实现。局限性是:对于透传消息的处理,只有在三方APP进程在运行时,才能在android中,通过广播的方式接收到消息通知,对该消息进行处理。如果进程被kill,则无法正确显示消息内容。
手机通知栏消息:通过PUSH通道直接推送拉起手机通知栏,对通知栏中的点击通知栏操作和点击按钮操作可配置指定动作。
华为PUSH服务平台中,比较支持第二种方式,通过PUSH直接拉起手机通知栏来显示,降低了整个Push业务的功耗,并且通知栏的消息到达率也比透传的高。透传消息处理要依赖对应APP的运行状态。从灵活性上来看,透传消息要比通知栏消息好些。






































苏公安网备 32011402010933号