标题 | 基于Android的消息推送的研究与实现 |
范文 | 闫俊英 李熙明 曹锡贵 摘 要:随着移动互联网的快速发展,消息推送在移动互联网领域智能终端的应用越来越广泛,成为智能终端产品实时发布信息的一种重要手段。本文主要研究了目前基于Android的消息推送的几种解决方案,并选择基于XMPP协议,实现了一个基于Android的消息推送系统。 关键词:Android,消息推送,XMPP协议 1.引言 随着移动互联网的发展,智能手机和各种智能终端的用户越来越多,移动互联网已经成为人们获取信息的一个最佳平台。如何及时或定时地向用户发送各种信息越来越成为目前研究的热点,消息推送就被用在了传送信息的各个领域。IOS平台已经提供了官方的消息推送的解决方案[1],但是Android平台的解決方案却比较复杂。本文分析了Android平台的消息推送的几种不同的解决方案,最后基于XMPP协议实现了一个消息推送系统。 2.消息推送技术 消息推送技术主要有两种方式[2]:一种是客户端使用PULL的方式,就是隔一段时间就去服务器上获取信息;另一种就是服务器使用PUSH的方式,当服务器端把最新的信息Push到客户端上。 2.1 GCM云推送 Google Cloud Messaging for Android(简称GCM),是谷歌新推出的云推送消息服务,即第二代的C2DM。该服务可以将服务器端的消息发送给客户端,简单,无需实现和部署服务端。但是受到Android版本的限制,而且需要连接Google的服务器,因此该服务在国内还不够稳定。另外,对于不同的硬件厂商平台,他们可能把Google所提供的这种服务去掉。 2.2 MQTT协议 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个轻量级的消息发布/订阅协议,是一种实现基于手机客户端的消息推送服务器的理想解决方案。该协议支持所有平台,几乎可以把所有联网物品和外部连接起来,被用来当做传感器和致动器的通信协议。该协议的优点是:协议简洁、小巧、可扩展性强、省流量、省电,目前已经应用到企业领域。但是目前还不够成熟、实现较复杂、服务端组件RSMB不开源,部署硬件成本较高。 2.3 XMPP协议 XMPP协议是一种基于标准通用标记语言的子集XML的协议,它继承了在XML环境中灵活的发展性。因此,基于XMPP的应用具有超强的可扩展性。该协议的前身是Jabber,目前已由IETF国际标准化组织完成了标准化工作。XMPP协议目前已经比较成熟,可扩展性强,协议是自由、源码开放的,这些都可以为开发人员直接使用,有利于减小项目的开发难度。 2.4 第三方平台 许多互联网公司看到了移动终端的消息推送的应用前景,推出了很多种成熟的第三方推送解决方案。对于一般用户来说,采用第三方解决方案,应用成本低,操作简单,第三方所提供的技术比较可靠。但是第三方解决方案,都需要连接第三方的服务器,因此数据的安全性方面可能会受到一定影响。另外,目前对于一些入门级别的服务目前是不收费的,但是从长远来看,收费是一种必然趋势。 3.系统设计与实现 本文采用XMPP协议作为消息推送系统的解决方案,XMPP协议也是目前最流行的一种消息推送协议。 XMPP中定义了三个角色,客户端,服务器,网关。通信能够在这三者的任意两个之间双向发生。服务器同时承担了客户端信息记录,连接管理和信息的路由功能。网关承担着与异构即时通信系统的互联互通。基本的网络形式是单客户端通过TCP/IP连接到单服务器,然后在之上传输XML。 基于XMPP协议的开源的客户端框架是smack,它主要封装了一些XMPP的实现,asmack是改进版的 smack。而另外一个开源框架的诞生,则是对在引用smack的基础上实现和服务器端的持久连接,以实现服务器对客户端的推送,那就是Android push notification,简称Androidpn。 3.1 服务器端 Androidpn 客户端需要用到一个基于java的开源XMPP协议包asmack,这个包同样也是基于openfire下的另外一个开源项目smack,不过我们不需要自己编译,可以直接把Androidpn客户端里面的asmack.jar拿来使用。客户端利用asmack中提供的XMPPConnection类与服 务器建立持久连接,并通过该连接进行用户注册和登录认证,同样也是通过这条连接,接收服务器发送的通知。 Androidpn服务器端也是java语言实现的,基于openfire开源工程,Web部分采用的是spring框架。Androidpn服务器包含两个部分,一个是侦听在5222端口上的XMPP服务,负责与客户端的 XMPPConnection类进行通信,作用是用户注册和身份认证,并发送推送通知消息。另一个是Web服务器,采用一个轻量级的HTTP服务器,负责接收用户的Web请求。 最上层包含四个组成部分,分别是SessionManager,Auth Manager,PresenceManager以及Notification Manager。SessionManager负责管理客户端与服务器之间的会话,Auth Manager负责客户端用户认证管理,Presence Manager负责管理客户端用户的登录状态,NotificationManager负责实现服务器向客户端推送消息功能。 3.2 客户端 Androidpn在客户端集成了asmack。这样就可以很容易的简立一个和服务器端的基于xmpp协议的socket连接。Androidpn的客户端中,进行管理连接的类是XmppManager,它主要用来管理连接的信息,比如XMPP的端口、IP、登录的用户名密码,以及对连接的维护。整个服务器端和客户端的通信是基于一个session(会话)过程。 4.系统实现 4.1 搭建平台[3] 首先去官网下载AndroidPN源码服务端和客户端,用Eclipse导入AndroidPN server即服务端。由于AndroidPn 默认采用的数据库是HSQLDB 数据库,并不具有普适性,这里采用服务器端本地的MySQL 数据库进行部署。修改服务器端配置文件jdbc.properties文件,修改jdbcurl项为:jdbc:mysql://localhost/apn?&useUnicode;=true&characterEncoding;=utf8,修改jdbcusername和jdbcpassword为MySql的连接账号和密码。若采用SQLServer 数据库系统,可修改为相应的数据库连接内容,并导入相应jar 包,新建一个对应的空数据库。然后,运行并导出war文件,上传到tomcat服务器。 解压androidpn-client-0.5.0.zip,导入eclipse工程,运行前更改一处IP地址,修改res/raw/androidpn.properties文件中的xmppHost为xmppHost=10.0.2.2。 4.2服务器端 Androidpn平台可以实现手動信息推送,但是不能实现自动消息推送,因此需要自己编写接口调用推送服务来实现信息的自动推送。在Androidpn Sever创建Apicontroller类,用于接收应用程序发送过来的数据,并将消息推送出去。应用程序可以通过接口调用来实现消息的自动推送。 4.3 客户端 获得NotificationManager对象,构建一个Notification对象,该对象描述了通知的标题和内容,然后再调用NotificationManager.notify方法发起通知,发起后的通知就会在消息栏提示。 5.结束语 移动终端的消息推送服务目前得到了广泛的应用,本文基于目前比较主流的消息推送协议XMPP协议,设计并实现了一个消息推送系统,利用Androidpn框架可以实现由服务器端向客户端的文本信息的推送。 参考文献 [1]王美妮,王颖,赵伟.基于XMPP协议消息推送机制的研究与实现[J].长春师范学院学报(自然科学版). 2014,33. [2]黄河清,陈文. Android平台消息推送服务的实现[J].网络与通信.2014,18. [3]常新峰,吕乐乐. Android平台下消息推送机制的研究与实现[J].计算机软件与应用. 2014,14. |
随便看 |
|
科学优质学术资源、百科知识分享平台,免费提供知识科普、生活经验分享、中外学术论文、各类范文、学术文献、教学资料、学术期刊、会议、报纸、杂志、工具书等各类资源检索、在线阅读和软件app下载服务。