Android消息推送

1.引言java

  所谓的消息推送就是从服务器端向移动终端发送链接,传输必定的信息。好比一些新闻客户端,每隔一段时间收到一条或者多条通知,这就是从服务器端传来的推送消息;还好比经常使用的一些IM软件如微信、GTalk等,都具备服务器推送功能。android

  推送方法以下:spring

  1)经过SMS进行服务器端和客户端的交流通讯。服务器

  在Android平台上,你能够经过拦截SMS消息而且解析消息内容来了解服务器的意图,能够实现彻底的实时操做。可是问题是这个方案的成本相对比较高,且依赖于运营商。微信

  2)循环主动定时获取网络

  这种方法须要客户端来作一个定时或者周期性的访问服务器端接口,以得到最新的消息。轮询的频率太慢可能致使某些消息的延迟,太快则会大量消耗网络带宽和电池。并发

  3)持久链接框架

  这个方案能够解决由轮询带来的性能问题,可是仍是会消耗手机的电池。咱们须要开一个服务来保持和服务器端的持久链接(苹果就和谷歌的C2DM是这种机制)。可是对于Android系统,当系统可用资源较低,系统会强制关闭咱们的服务或者是应用,这种状况下链接会强制中断。(Apple的推送服务之因此工做的很好,是由于每一台手机仅仅保持一个与服务器之间的链接,事实上C2DM也是这么工做的。即全部的推送服务都是经由一个代理服务器完成的,这种状况下只须要和一台服务器保持持久链接便可。C2DM=Cloud to Device Messaging)。性能

  相比之下第三种仍是最可行的。为软件编写系统服务或开机启动功能;或者若是系统资源较低,服务被关闭后能够在onDestroy ()方法里面再重启该服务,进而实现持久链接的方式。google

  C2DM内置于Android的2.2系统上,没法兼容老的1.6到2.1系统;且依赖于Google官方提供的C2DM服务器,因为国内的网络环境,这个服务常常不可用。

  创建在TCP协议之上的XMPP协议,不只可提供可这种持久链接的功能,能实现服务器和客户机的双工通讯,还能不依赖与系统版本和google服务器的限制,提供了比较好的解决方案。

2. XMPP协议

  XMPP全称Extensible Messaging and Presence Protocol,前身是Jabber项目,是一种以XML为基础的开放式即时通信协议。XMPP由于被Google Talk和网易泡泡应用而被广大网民所接触。XMPP的关键特点是,分散式的即时通信系统,以及使用XML串流。XMPP目前被IETF国际标准组织完成了标准化工做。

  Android push notification(androidpn) 是一个基于XMPP协议的java开源实现,它包含了完整的客户端和服务器端。该服务器端基本是在另一个开源工程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端口被防火墙封闭,可使用轮询的方式进行访问,所以又有助于经过防火墙。

相关文章
相关标签/搜索