禤 静 赵朝辉 南宁职业技术学院 530008
【文章摘要】
消息推送技术在当前移动互联网领域智能终端的应用非常广泛,如手机上的新闻客户端通过推送新的消息,使用户方便获知最新的新闻信息。本文介绍Android 实现推送方式和基于XMPP 协议的开源信息推送框架AndroidPn 的相关知识,并结合一个Android 校园应用消息推送案例讨论相关的技术实现。
【关键词】
Android ;XMPP 协议;推送技术; AndroidPn
随着信息技术和移动互联网络的高速发展,智能手机、平板电脑等各种智能移动终端已在人们的生活中普及开来,面向手机、平板等移动平台开发的应用也在相互竞争中呈现爆炸式的增长,越来越多的应用服务提供商使用消息推送这种技术,实现服务器主动向客户端发送数据,以提高应用的留存率。例如手机上的新闻客户端通过推送新的消息,向用户提供最新的新闻信息。
本文介绍Android 实现推送方式和基于XMPP 协议的开源信息推送框架AndroidPn 的相关知识,并结合一个Android 校园应用消息推送案例讨论相关的技术实现。
1 Android 平台的推送机制1575932840
推送技术的实现主要有以下三种方式:
1.1 轮询(Pull) 方式
当客户端以一定的频率主动与服务器端连接并查询有无最新消息到达时,可以实现“假”推送效果。如果频率过快就会消耗大量的电量和流量,如果频率过慢就会导致更新不够及时。假设终端所有应用都采用该方式显然是无法忍受的。
1.2 SMS(Push) 方式
更新消息可以以短信指令的方式推送,Android 系统拦截分析指令后再有客户端发起请求拉取最新数据。这种方案非常稳定可靠但是成本较高必须向电信运营商缴费才能获得短信发送接口,当用户卸载应用程序后,服务器端并不能及时知道很可能会导致用户收到指令短信引起反感。
1.3 持久连接(Push) 方式
这个方案实现移动推送性价比较高的一种方式,具有综合性能稳定、价格低廉、消耗终端电量流量较低的优点,可以有效的解决以上两种方案存在的问题,因此吸引了大量软件开发人员。现在主要有基于 MQTT 协议和 XMPP(Extensible Messaging and Presence Protocol)协议的两种实现方式。
2 基于XMPP 协议的AndroidPn 开源框架
AndroidPn 是一个基于 XMPP 协议的 java 开源 Android push notification 实现,它包含了完整的客户端和服务器端。
该服务器端主要是在另外一个开源工程openfire 基础上修改实现的,Web 部分采用spring、hibernate 框架。Androidpn 服务器包含两个部分,一个是侦听在 5222 端口上的 XMPP 服务,负责与客户端的XMPPConnection 类进行通信,作用是用户注册和身份认证,并发送推送通知消息。另外一部分是 Web 服务器,采用一个轻量级的 HTTP 服务器, 负责接收用户的Web 请求。
3 Android 平台消息推送的设计与实现
3.1 消息推送的设计
Android 校园应用消息推送案例由服务器与客户端组成(如图1 所示)。推送服务器由一个经过二次开发的AndroidPn 服务器组成,负责提供推送消息的录入(如图2 所示)、向终端设备即使推送消息并将消息存入数据库。应用服务器向终端设备提供任何时间的消息查询与加载。
3.2 推送服务器端实现
首先到官网或相关网站下载AndroidPn,下载的文件为androidpn- 0.5.zip,解压得到客户端androidpn-client-
图2 推送消息的录入界面
图1 推送案例实现设计
图4 从数据库中读取到的推送信息效果图
图3 Android 客户端接收即时推送信息效果图
软件开发
Software Development
045
电子制作
目的需要,可以将androidpn-server-
实现的方法比较简单,根据spring、hibernate 框架结构,在org.androidpn. server.model 包中添加实体类Notice ;在org.androidpn.server.dao 包中添加dao 接口与实现类;在org.androidpn.server.service 包中添加业务接口NoticeService 与实现类NoticeServiceImpl ;org.androidpn.server. console.controller. NotificationController 类中添加调用业务接口的代码:
Notice notice =new Notice();
notice.setTitle(title);
notice.setContent(message);
S i m p l e D a t e F o r m a t d f = n e w S i m p l e D a t e F o r m a t ( " y y y y - M M - d d HH:mm:ss");
n o t i c e . se t D a t e t i me ( d f . f o r m a t ( n e w Date()));
noticeService.saveNotice(notice);
最后,在配置文件spring-config.xml、hibernate.cfg.xml 添加相应的配置信息。
3.3 Android 客户端实现
接收推送的Android 客户端,要能即时接收到服务器推送的消息,需要导入AndroidPn 官网提供的androidpn-client-
4 结束语
使用AndroidPn 可以简单地做到:把消息推送到客户端。但是,单点容量有限, 集群方案复杂、不成熟,不稳定,容易出现各种问题。要使其适合开发者需要,并在生产环境上运行,则可能需要做很多定制开发工作。
【参考文献】
[1] 沈洪洲,宗乾进,袁勤俭. 应用Google 云消息框架C2DM 实现商务信息推送服务[J]. 现代图书情报技术,2012,28(6) :78-83.
[2]SHEN Hong-zhou,ZONG Qian-jin, Y U A N Q i n - j i a n . I m p l e m e n t a t i o n o f Commerce Information Push Service Using Google C2DM[J].NewTechnology of Library and Information Service,2012, 28(6) :78-83.
[3] 陈武. 基于XMPP 的企业级即时通信系统的研究与实现[D]. 武汉:武汉理工大学,2009.