转载自http://www.codeforge.cn/article/256428?go_blog_box=1

应用背景

最近,领导让研究android系统的应用开发,于是就开始研究数据库访问+消息推送+实时视频播放等基本应用,下面主要是android消息推送功能的研究。

消息的推送就是从服务器端向移动终端发送连接请求,传输特定的信息。例如一些新闻客户端,每隔一段时间都会受到一条或者多条通知(Notification),这就是从服务器端传过来的推送消息。

推送的技术主要是以下三种:

(1)通过SMS(Short Message Service,短信群发服务系统)进行服务器端和客户端的交流通信。在Android平台上,可以通过拦截SMS消息并解析内容来了解服务器的意图,就可以实现完全的实时操作。但是该方案成本比较高,而且基本依赖运营商。

(2)循环主动定时获取。该方法需要客户端编写一个定时或者周期性访问服务器端接口,从而获取最新的消息。但是,轮询的频率太快会消耗网络带宽和电量,太慢会导致消息更新不及时。

(3)持久连接方案。需要在客户端开通一个服务来保持和服务器端的持久连接(Apple和谷歌的C2DM采用该机制),从而当服务器端有最新的消息时,可以及时接收到通知。但是该方案也会消耗系统的性能和电量,当Android系统可用资源较低时,系统会关闭服务,从而与系统的连接会终端。

相比较其它两种方案,第三种方案的优势还是比较明显,而且可行性最高。在Android系统软件中编写系统服务或开机启动功能,当系统资源利用率较低而关闭服务器时,可以再重启该服务,进而实现持久连接的方式。使用谷歌的C2DM(Android Cloud to Device Message)应该是实现PUSH消息的最便捷方式,但是C2DM必须依赖谷歌的服务器,国内网络无法正常使用。

目前,有两种较好的方式可以实现这种持久连接的功能,一种是IBM的MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)协议实现PUSH消息功能,第二种是采用基于XMPP协议的第三方Androidpn实现消息推送。

MQTT是IBM开发的一个即时通信协议,该协议支持所有平台,可以将所有物联网设备和外部连接起来,被用来当作传感器和致动器的通信协议。

使用它作为消息推送协议的基本原理是:使用消息代理服务器(Message Broker),客户端连接上消息代理服务器,跟服务器协商可以接受哪些类型的消息,同时也可以发布自己的消息,这些消息根据协议的内容可以被其它客户端收到,业务流程如图1所示。

<!--[if gte vml 1]><!--[if !vml]--><!--[endif]--><!--[if gte mso 9]>

关键技术

通知功能的实现

1. Apollo服务器的安装和配置

想要实现基于MQTT的消息推送功能,必须先配置message broker服务器,这里选择服务器Apollo1.7来搭建环境。具体的搭建主要分为下面几个步骤:

(1)先到官方网站现在最新版的Apollo1.7服务器。

(2)然后运行apollo.cmd 创建服务器实例。

(3)在服务器实例的文件夹下面配置参数。

(4)运行apollo-broker.cmd run开启服务器,在浏览器中输入服务器的IP地址,即可以访问Apollo服务器界面。


(5)输入之前配置好的用户名和密码参数,即可以访问Apollo Console控制台。

2. MQTT客户端的实现

使用WebService服务器向Android端发送通知,实际上可以看成是两个MQTT 客户端之间的通信过程,消息在传播过程中间经过了Message Broker服务器的转发,所以需要在WebService服务器和Android端分别配置MQTT客户端。两边的代码实现过程基本一致,都是要在工程中导入mqtt-client-0.4.0.jar的类库,然后要使用如下图这些工具类实现MQTT功能。

具体的代码可以参考:

源代码地址:http://www.codeforge.cn/article/256428?go_blog_box=1




更多相关文章

  1. Android(安卓)提交数据到服务器
  2. Android(安卓)Studio 使用jdbc远程连接阿里云主机web数据库(逃坑)
  3. Android中Intent,service,broadcast应用浅析
  4. Android中关于C2DM开发的一点总结
  5. Android(安卓)面试题(5):谈谈 Handler 机制和原理?
  6. Android(安卓)开发技巧之Log发送UDP报文,Socket编程
  7. Android数据与服务器交互的GET,POST,HTTPGET,HTTPPOST的使用
  8. Android通过Intent.ACTION_CLOSE_SYSTEM_DIALOGS监听Home按键消
  9. Android(安卓)Debug Bridge(ADB) 技术实现(译)

随机推荐

  1. android隐藏软键盘
  2. [置顶] android系统功能调用大全
  3. Android(安卓)如何实现竖排文字显示?
  4. Running GPS positioning in a backgroun
  5. android 测试Activity,Content Provider,
  6. [android]gsm smsmessage 类部分详解
  7. Android(安卓)Menu菜单的编写及事件响应
  8. android retrofit2 如何多文件上传
  9. android中读取assets中的文件
  10. 通过adb shell命令查看当前与用户交互的