android后台信息推送调研

前言
我们已经开发了一个应用,这里称为A应用,类似于天气那种 。现在的任务就是如果这些A应用有新版本了,或者天气出现比较恶劣的状况,要及时在手机上进行消息的推送,提示有新的应用可以更新了,和天气将要变遭了,提醒用户需要注意的情况 。及需要实现消息推送机制 。
推送方式基础知识
【android后台信息推送调研】要获取服务器上不定时更新的信息,一般来说有两种方法:第一种是客户端使用Pull(拉)的方式,就是隔一段时间就去服务器上获取一下信息,看是否有更新的信息出现 。第二种就是 服务器使用Push(推送)的方式,当服务器端有新信息了,则把最新的信息Push到客户端上 。这样,客户端就能自动的接收到消息 。
虽然Pull和Push两种方式都能实现获取服务器端更新信息的功能,但是明显来说Push方式比Pull方式更优越 。因为Pull方式更费客户端的网络流量,更主要的是费电量,还需要我们的程序不停地去监测服务端的变化 。
在开发和应用程序时,我们往往需要从服务器不定的向手机客户端即时推送各种通知消息 。我们只需要在或的通知栏处向下一拉,就展开了 Panel,可以集中一览各种各样通知消息 。目前iOS平台上已经有了比较简单的和完美的推送通知解决方案,可是平台上实现起来却相对比较麻烦 。
现行方案汇总 1.方案一:C2DM云端推送功能——官方
在手机平台上,提供了C2DM()服务,起初我就是准备采用这个服务来实现自己手机上的推送功能,并将其带入自己的项目中 。
Cloud to(C2DM)是一个用来帮助开发者从服务器向应用程序发送数据的服务 。该服务提供了一个简单的、轻量级的机制,允许服务器可以通知移动应用程序直接与服务器进行通信,以便于从服务器获取应用程序更新和用户数据 。C2DM服务负责处理诸如消息排队等事务并向运行于目标设备上的应用程序分发这些消息 。
下面是C2DM操作过程示例图:

android后台信息推送调研

文章插图
图1 C2DM操作过程示例图
经过一番研究发现,这个服务存在很大的问题:
1)C2DM内置于的2.2系统上,无法兼容老的1.6到2.1系统;
2)C2DM需要依赖于官方提供的C2DM服务器,由于国内的网络环境,这个服务经常不可用,如果想要很好的使用,我们的必须也在国外,这个恐怕不是每个开发者都能够实现的;
3) 不像在中,他们把硬件系统集成在一块了 。所以对于我们开发者来说,如果要在我们的应用程序中使用C2DM的推送功能,因为对于不同的这种硬件厂商平台,比如摩托罗拉、华为、中兴做一个手机,他们可能会把的这种服务去掉,尤其像在国内就很多这种,把这种原生的服务去掉 。买了一些像什么山寨机或者是华为这种国产机,可能的服务就没有了 。而像在国外出的那些可能会内置 。
2.方案二:利用MQTT协议,做代理服务器
MQTT是一个轻量级的消息发布/订阅协议,它是实现基于手机客户端的消息推送服务器的理想解决方案 。但是随着用户的增多这个方案会有问题,因为的连接数有上限,到了一定程度后就无法连接了,这也就导致消息很难发送出去 。
总之,连接数量有限制 。
android后台信息推送调研

文章插图
图2 MQTT协议架构图
3.方案三:XMPP协议实现推送功能
基于XMPP协议,很多人都建议使用这个,谷歌官方的C2DM也是基于XMPP研发的,使用这个方案不会依赖系统,也不依赖于谷歌服务器 。
事实上官方的C2DM服务器底层也是采用XMPP协议进行的封装 。XMPP(可扩展通讯和表示协议)是基于可扩展标记语言(XML)的协议,它用于即时消息(IM)以及在线探测 。这个协议可能最终允许因特网用户向因特网上的其他任何人发送即时消息 。是一个基于XMPP协议的Java开源 push 实现 。它包含了完整的客户端和服务器端 。