Android实现推送方式解决方案
本文介绍在Android中实现推送方式的基础知识及相关解决方案。
当我们开发需要和服务器交互的应用程序时,基本上都需要获取服务器端的数据,比如《地震应急通》就需要及时获取服务器上最新的地震信息。要获取服务器 上不定时更新的信息一般来说有两种方法,第一种是客户端使用Pull(拉)的方式,隔一段时间就去服务器上获取信息,看是否有更新的信息出现。第二种就是 服务器使用Push(推送)的方式,当服务器端有新信息了,则把最新的信息Push到客户端上。
1)C2DM内置于Android的2.2系统上,无法兼容老的1.6到2.1系统;
2. 几种常见的解决方案 1)轮询(Pull):应用程序应当阶段性的与服务器进行连接并查询是否有新的消息到达,你必须自己实现与服务器之间的通信,例如消息排队等。而且你还要考虑轮询的频率,如果太慢可能导致某些消息的延迟,如果太快,则会大量消耗网络带宽和电池。
Android操作系统允许在低内存情况下杀死系统服务,所以你的通知服务很可能被操作系统Kill掉了。 前两个方案存在明显的不足,第三个方案也有不足,不过我们可以通过良好的设计来弥补,以便于让该方案可以有效的工作。毕竟,我们要知道GMail,GTalk以及GoogleVoice都可以实现实时更新的。
采用MQTT协议实现Android推送 MQTT是一个轻量级的消息发布/订阅协议,它是实现基于手机客户端的消息推送服务器的理想解决方案。 wmqtt.jar 是IBM提供的MQTT协议的实现。我们可以从这里下载该项目的实例代码,并且可以找到一个采用PHP书写的服务器端实现。
架构如下所示:
Really Small Message Broker (RSMB) ,他是一个简单的MQTT代理,同样由IBM提供。缺省打开1883端口,应用程序当中,它负责接收来自服务器的消息并将其转发给指定的移动设备。 SAM是一个针对MQTT写的PHP库。我们可以从这个下载它.
这是我在项目中采用的方案。事实上Google官方的C2DM服务器底层也是采用XMPP协议进行的封装。 XMPP(可扩展通讯和表示协议)是基于可扩展标记语言(XML)的协议,它用于即时消息(IM)以及在线探测。这个协议可能最终允许因特网用户向因特网上的其他任何人发送即时消息。关于XMPP协议我在上篇博文中已经介绍,大家可以参考:http://www.apkbus.com/android-23750-1-1.html
androidpn是一个基于XMPP协议的java开源Android push notification实现,我会在以后的博文中详细介绍androidpn。它包含了完整的客户端和服务器端。经过源代码研究我发现,该服务器端基本是在另外一个开源工程openfire基础上修改实现的,不过比较郁闷的是androidpn的文档是由韩语写的,所以整个研究过程基本都是读源码。
实现意图如下图所示:
完毕。
转自:安卓巴士>Android开发资料共享区>Android开发进阶交流>Android实现推送方式解决方案 |
推荐阅读
-
Android中创建快捷方式及删除快捷方式实现方法
-
Android 静默方式实现批量安装卸载应用程序的深入分析
-
Android中实现异步任务机制的AsyncTask方式的使用讲解
-
Android集成极光推送的实现步骤
-
Android实现音乐播放进度条传递信息的两种方式(在service和activity中)
-
Android定时器实现定时执行、重复执行、定时重复执行、定次数执行的多种方式
-
使用SignalR推送服务在Android的实现 SignalA
-
Android 极光推送别名与标签方式
-
Android中Rxjava实现三级缓存的两种方式
-
Android中实现「类方法指令抽取方式」加固方案原理解析