Android之消息推送实现

http://blog.csdn.net/weidi1989/article/details/7948269

Android消息推送

1.引言

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

推送方法如下:

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服务器,由于国内的网络环境,这个服务经常不可用。

建立在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端口被防火墙封闭,可以使用轮询的方式进行访问,因此又有助于通过防火墙。

http://www.cnblogs.com/devinzhang/archive/2012/02/16/2354981.html

Android中利用App实现消息推送机制的代码

1.消息推送机制
服务器器端需要变被动为主动,通知客户一些开发商认为重要的信息,无论应用程序是否正在运行或者关闭。
我想到了一句话:don't call me,i will call you!

2.独立进程
无论程序是否正在运行,我们都要能通知到客户。我们需要一个独立进程的后台服务。在androidmanifest.xml中注册service时,有一个android:process属性,如果这个属性以"."开头,则为此服务开启一个全局的独立进程,如果以":"开头则为此服务开启一个为此应用私有的独立进程。

http://www.jb51.net/article/27054.htm

更多相关文章

  1. Android(安卓)Service+Socket 联网交互
  2. 转:RTC搭建android下三层应用程序访问服务器MsSql-客户端
  3. 关于Android连接远程数据库(mysql、oracle)
  4. Android(安卓)Push Notification实现信息推送使用
  5. [转]Android(安卓)开发中的日常积累
  6. android的几种网络请求方式详解
  7. Android(安卓)ADK 编程简介
  8. Android之间互相的录屏直播 --点对点传输(tcp长连接发送h264)(一
  9. Android应用程序与SurfaceFlinger服务的连接过程分析

随机推荐

  1. Android防止崩溃的库,有效的降低Crash率
  2. Android高手进阶教程(十)之----Android(
  3. Android(安卓)JNI 调用 C/C++
  4. Qt on Android(安卓)Episode 5(翻译)
  5. Android初学者必知会的编程规范
  6. android 设备唯一码的获取,Cpu号,Mac地址
  7. Android(安卓)NDk 开发简易教程
  8. Android第十三期 - 百度云推送(百度后台版
  9. Android(安卓)Volley 库通过网络获取 JSO
  10. Android资源文件中特殊字符未转义引起的