android消息推送概述
2014-08-26 16:32
190 查看
1.引言
所谓的消息推送就是从服务器端向移动终端发送连接,传输一定的信息。比如一些新闻客户端,每隔一段时间收到一条或者多条通知,这就是从服务器端传来的推送消息;还比如常用的一些IM软件如微信、GTalk等,都具有服务器推送功能。2.推送方法
1)通过SMS进行服务器端和客户端的交流通信。
在Android平台上,你可以通过拦截SMS消息并且解析消息内容来了解服务器的意图,可以实现完全的实时操作。但是问题是这个方案的成本相对比较高,且依赖于运营商。2)循环主动定时获取
这种方法需要客户端来做一个定时或者周期性的访问服务器端接口,以获得最新的消息。轮询的频率太慢可能导致某些消息的延迟,太快则会大量消耗网络带宽和电池。3)持久连接
这个方案可以解决由轮询带来的性能问题,但是还是会消耗手机的电池。我们需要开一个服务来保持和服务器端的持久连接(苹果就和谷歌的C2DM是这种机制)。但是对于Android系统,当系统可用资源较低,系统会强制关闭我们的服务或者是应用,这种情况下连接会强制中断。(Apple的推送服务之所以工作的很好,是因为每一台手机仅仅保持一个与服务器之间的连接,事实上C2DM也是这么工作的。即所有的推送服务都是经由一个代理服务器完成的,这种情况下只需要和一台服务器保持持久连接即可。C2DM=Cloud to Device Messaging)。相比之下第三种还是最可行的。为软件编写系统服务或开机启动功能;或者如果系统资源较低,服务被关闭后可以在onDestroy ()方法里面再重启该服务,进而实现持久连接的方式。
C2DM内置于Android的2.2系统上,无法兼容老的1.6到2.1系统;且依赖于Google官方提供的C2DM服务器,由于国内的网络环境,这个服务经常不可用。
下面介绍两种及时通讯协议。
3. XMPP协议
XMPP全称Extensible Messaging and Presence Protocol(可扩展消息处理现场协议),前身是Jabber项目,是一种以XML为基础的开放式即时通讯协议。XMPP因为被Google Talk和网易泡泡应用而被广大网民所接触。XMPP的关键特色是,分散式的即时通讯系统,以及使用XML串流。XMPP目前被IETF国际标准组织完成了标准化工作。建立在TCP协议之上的XMPP协议,不仅可提供可这种持久连接的功能,能实现服务器和客户机的双工通信,还能不依赖与系统版本和google服务器的限制,提供了比较好的解决方案。
XMPP的实现有很多,详见官网:www.xmpp.org
Android push notification(androidpn) 是一个基于XMPP协议的java开源实现,是韩国人的一个开源项目,可在开源项目托管网站sourceforge上下载。androidpn包含了完整的客户端和服务器端。该服务器端基本是在另外一个开源工程openfire基础上修改实现的。
androidpn客户端需要用到一个基于java的开源XMPP协议包asmack,这个包同样也是基于openfire下的另外一个开源项目smack,不过我们不需要自己编译,可以直接把androidpn客户端里面的asmack.jar拿来使用。客户端利用asmack中提供的XMPPConnection类与服务器建立持久连接,并通过该连接进行用户注册和登录认证,同样也是通过这条连接,接收服务器发送的通知。
androidpn服务器端也是java语言实现的,基于openfire开源工程,不过它的Web部分采用的是spring框架,这一点与openfire是不同的。Androidpn服务器包含两个部分,一个是侦听在5222端口上的XMPP服务,负责与客户端的XMPPConnection类进行通信,作用是用户注册和身份认证,并发送推送通知消息。另外一部分是Web服务器,采用一个轻量级的HTTP服务器,负责接收用户的Web请求。服务器的这两方式,意义非凡:当相应的TCP端口被防火墙封闭,可以使用轮询的方式进行访问,因此又有助于通过防火墙。
4.MQTT协议
MQTT全称Message Queuing Telemetry Transport(消息队列遥测传输),是IBM开发的一个即时通讯协议,有可能成为物联网的重要组成部分。该协议支持所有平台,几乎可以把所有联网物品和外部连接起来,被用来当做传感器和致动器(比如通过Twitter让房屋联网)的通信协议。MQTT协议是为大量计算能力有限,且工作在低带宽、不可靠的网络的远程传感器和控制设备通讯而设计的协议,它具有以下主要的几项特性:
1、使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合;
2、对负载内容屏蔽的消息传输;
3、使用 TCP/IP 提供网络连接;
4、有三种消息发布服务质量:
“至多一次”,消息发布完全依赖底层 TCP/IP 网络。会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送。
“至少一次”,确保消息到达,但消息重复可能会发生。
“只有一次”,确保消息到达一次。这一级别可用于如下情况,在计费系统中,消息重复或丢失会导致不正确的结果。
5、小型传输,开销很小(固定长度的头部是 2 字节),协议交换最小化,以降低网络流量;
6、使用 Last Will 和 Testament 特性通知有关各方客户端异常中断的机制。
MQTT协议的实现很多,详见官网:www.mqtt.org
MQTT已有C++版的服务端组件rsmb,但是不开源。
5.XMPP协议 VS MQTT协议
优点 | 缺点 | |
XMPP | 协议成熟、强大、可扩展性强、目前主要应用于许多聊天系统中 | 协议较复杂、冗余(基于XML)、费流量、费电,部署硬件成本高 |
MQTT | 协议简洁、小巧、可扩展性强、省流量、省电,目前已经应用到企业领域 | 不够成熟、实现较复杂、服务端组件rsmb不开源,部署硬件成本较高 |
相关文章推荐
- android SMS以及其他消息推送机制的相关好贴总结
- 采用MQTT协议实现Android消息推送
- android采用IBM-MQTT协议消息推送。
- Android消息推送(一)--AndroidPn(XMPP协议)Demo版到正式上线
- Android消息推送的Androidpn实现方式:(一)下载androidpn服务器端与客户端的Demo并运行
- Android中利用App实现消息推送机制的代码实例
- android中实现消息推送
- Android中的消息推送
- Android 服务器消息推送技术
- android网络通信之消息推送教程实例汇总
- 【新知提升】Android中的消息推送
- 基于MQTT实现Android消息推送(Push)
- Android推送通知的实现--PHP+ANDROID做消息推送:基于IBM的MQTT协议的Tokudu项目测试
- Android中的消息推送
- asp.net 关于android 消息推送
- Android Push Notificatioin Service(Android消息推送)
- Android推送通知的实现--采用MQTT协议实现Android消息推送
- 如何使用androidpn实现android手机消息推送(简单的源码分析)
- android消息推送-XMPP
- androidpn实现android消息推送功能——服务器端详解