- 1 -
中国科技论文在线
基于 XMPP 的 Android 终端位置信息实时
交互系统的设计与实现#
罗智,黄小红**
基金项目:国家 CNGI 专项(CNGI-12-03-009)
作者简介:罗智(1989-),男,硕士研究生,主要研究方向:位置隐私保护算法,移动终端数据安全
通信联系人:黄小红(1978-),副教授,主要研究方向:下一互联网
(北京邮电大学网络技术研究院,北京 100876) 5
摘要:随着移动互联网和基于位置服务(LBS)的飞速发展,越来越多的移动终端具有定位
功能。用户之间位置信息的交互越来越频繁,位置信息交互的安全性和实时性是一大问题。
为了使得移动终端用户能够安全又实时地进行位置信息的交互,设计并实现了针对 Android
平台的实时推送系统。系统采用 C/S 体系结构,使用开源的 XMPP 协议作为即时通信协议,10
客户端定位功能和地图相关功能采用百度提供的工具包实现。用户通过系统能够实时地进行
位置信息的交互,同时 XMPP 协议的安全机制能保护数据不被泄露。
关键词:移动终端;Android 平台;XMPP;位置信息
中图分类号:TP399
15
Research and implementation of location information
real-time interactive system on the Android platform based
on XMPP
LUO Zhi, HUANG Xiaohong
(Institute of Network Technology, Beijing University of Posts and Telecommunications, Beijing 20
100876, China)
Abstract: With the rapid development of mobile Internet and the location-based services (LBS),
an increasing number of mobile terminals with positioning function. The interaction of location
information between the users is more and more frequent, the security and the real-time of which
is a major problem. In order to make the interaction of location information between the users is 25
secure and real-time, this paper proposes a location information real-time interactive system on the
Android platform. The system adopts C/S architecture and uses open-source XMPP as instant
communication protocol. Users can communicate their location information in real time by using
this system, and the security mechanism of XMPP can protect the data from being leaked.
Key words: The mobile terminal; Android platform; XMPP; location information 30
0 引言
基于位置的服务(Location-Based Services,LBS)是社会信息化发展的趋势,是测绘、卫
星导航、GIS 和无线通信网络等技术相集成的产物,这种新型的服务在为用户提供丰富的移
动服务体验的同时,也成为信息产业新的经济增长点。随着社会的发展,人们的活动范围越35
来越大,而且越来越不确定。这种移动性和不确定性给移动通信带来市场和挑战的同时,也
为位置服务的开展和扩大带来了无限商机[1]。
随着物联网技术和 LBS技术的发展,越来越多的电子设备具有位置定位、基于位置的查
询等功能[2],用户经常有知晓自己或好友位置信息的需要,这就涉及到了用户之间位置信息
的交互。然而,位置信息属于个人隐私,用户之间在进行位置信息交流时需要防止位置信息40
的泄露;另外,在用户之间进行实时交流(比如聊天),需要实时跟进对方的位置时,假如
- 2 -
中国科技论文在线
对方处于高速运动状态(如在快速行驶的车上),位置信息的交互就需要良好的实时性来保
证实时跟进的要求。本文的研究目的就是基于 XMPP(Extensible Messaging and Presence
Protocol)协议[3],提供在 Android 平台上实现一个安全的实时推送系统来完成用户之间位置
信息实时交互的需求。 45
1 Android 平台推送机制
常见的推送技术原理剖析
推送技术的实现主要有以下三种方式:
(1) 轮询方式
客户端以一定频率主动向服务器请求最新的未读消息。频率过快费电也费流量,频率过50
慢导致实时性不够。
(2) SMS 方式
消息以短信指令的方式推送。这种方案稳定可靠但成本较高,必须向运营商缴费才能获
取短信发送接口。
(3) 持久连接方式 55
此方案可以有效解决以上两种方案存在的问题,但是推送系统的稳定性和效率也跟开发
人员的设计有关。
XMPP 协议
持久连接方式是实现移动推送性价比较高的一种方式,具有综合性能稳定、价格低廉、
消耗终端电量流较低的优点,其中基于 XMPP 协议的实现方式最为广泛。 60
XMPP 协议简介
XMPP 的前身是 Jabber,Jabber 是 Jeremie Miller 在 1998 年开发的一个免费、开源的项
目,用于提供给 MSN、Yahoo 等的 IM(Instant Messaging)服务。而 XMPP 最早在 Jabber
上实现,在 IM 通讯中被广泛采用,已得到互联网工程任务组(IETF)的批准。
XMPP 协议优点 65
XMPP 协议是 IETF 国际标准组织正式正式确认的基于可扩展性标记语言(XML)流的
即时通信协议,它由很多开源的客户端、服务器、组件与代码库实现,是免费、开放、共有、
容易被理解的协议,同时,基于 XML 使得 XMPP 有很强的可扩展性。XMPP 从 1998 年被
开发到实现,已经相当成熟、稳定。有数以千计的开发者在 XMPP 技术上工作,有数以万
计的 XMPP 服务器在 Internet 上运行,超过百万的 XMPP 终端用户[4]。另外,XMPP 协议是70
在 TCP 通信的基础上由 TLS 协议作为通信信道的加密方法,能够很好的保证通信安全。
XMPP 消息格式
XMPP 协议流约定了三个 XML 节:Presence、Message、IQ,每一个节都包括子节点和
属性。Presence 用于表明用户的在线状态;Message 是 XMPP 中实体间用来传递消息的 XML
节;IQ(Info/Query)是一种请求/相应机制,采用一问一答的方式,从一个对象发出请求,75
目标对象接收后并把应答信息返回给请求目标[5]。
XMPP 地址格式
XMPP 网络结构中的一个实体被称为一个节点,它具有一个唯一的标志 JID(Jabber
- 3 -
中国科技论文在线
Identifier)用于表示一个用户地址。一个合法的 JID 包括一些排列好的元素,其中必要的有
域名(Domain Identifier)、节点名(Node Identifier)和资源名(Resource Identifier)[4],80
其格式是:<node@domain/resource>node@domain。其中 node 表示用户在服务器上注册的用
户名,domain 用来表示节点不同的设备或位置。
XMPP 通信安全
XMPP 协议使用了 TLS 协议来保证双方通信的机密性和数据完整性。TLS 协议由 TLS
记录协议和 TLS 握手协议两层协议构成。TLS 记录协议通过对应用层信息进行加密来保证85
连接的安全,加密采用对称密码算法(如 R4 和 DES 等);TLS 握手协议主要是使服务器
和客户端在传递信息前减缓 TLS 版本、协商加密算法、进行身份认证并交换密钥。所以说
TLS 可以用于保障网络上通信软件的用户隐私[6]。
2 Android 平台实时推送系统设计与实现
该系统旨在将即时通信系统建立在联系人位置服务之上,使联系人双方可以实时获取对90
方的位置并标注于地图之上,从而实现位置的实时跟进。系统采用 C/S 结构,包括服务器端
和客户端两部分,系统总体功能层次如图 1 所示。
图 1 系统总体功能层次
服务器端设计与实现 95
服务器端架构
服务器端 Web 平台的实现基于 Spring、Hibernate 框架,使用 作为服务器,网
络数据传输采用 MINA 高性能并发框架,确保服务器可以处理更多的并发数和持久连接数,
系统采用 MySQL 作为后台数据库。服务器功能模块的实现是基于如图 2 所示的服务器端架
- 4 -
中国科技论文在线
构。登录管理负责验证登录用户的身份信息,并检查数据库中有无当前登录用户的未读离线100
消息,若有则将这些消息推送给相应用户,并删除缓存的属于该用户的未读离线消息;状态
管理负责管理用户的当前状态,如在线、离线,并可以在网页端显示出用户的状态;消息处
理器负责监听并接收来自客户端的 XML 格式的 Jabber 消息文本,然后做出相应的处理,也
负责缓存不在线用户的离线消息;注册处理器负责将新用户的各种信息(如用户名、密码、
邮箱等)存入后台 MySQL 数据库。 105
服务器启动后,在 5222 端口监听来自客户端的请求,对于每个连接请求开辟一个子线
程来负责服务器端与该客户端的会话。
图 2 服务器端总体架构
服务器端各功能模块设计与实现 110
(1) 新用户注册登记模块
该模块负责处理来自客户端的用户注册请求。当收到注册请求时,检查负责存储已注册
用户信息的数据库中是否存在当前申请注册的用户的用户信息。若存在,则说明当前申请注
册的用户之前已经注册,返回一个拒绝重新注册的标志;若不存在,则将该用户的信息存入
相应的数据库,返回注册成功标志,完成注册。 115
- 5 -
中国科技论文在线
图 3 服务器端注册功能流程图
(2) 验证用户登录身份模块
该模块负责处理来自客户端的用户登录请求。当收到登录请求时,使用身份验证机制验
证当前请求登录用户,若通过验证则允许登录。登录成功后将检查离线消息数据库里是否存120
在属于该用户的未读离线消息,若有则将这些消息推送给该用户,并在离线消息数据库中清
除这些消息。
- 6 -
中国科技论文在线
图 4 服务器端验证用户登录身份功能流程图
(3) 网页显示用户状态模块 125
该模块负责在服务器网页端显示出用户的在线状态。可以查看系统中已注册的用户,哪
些用户在线,哪些用户离线。服务器端使用 Spring 框架中的 MultiActionController 管理器来
负责管理网页端请求。
(4) 消息监听与处理模块
该模块负责消息的监听与处理。这里的消息指的是来自客户端的各种消息,包括连接请130
求、注册请求、登录请求、断开连接、用户之间的消息文本。该模块采用的 MINA 框架来
负责监听并接收这些消息,得到消息后对之进行解析来得出消息类型,然后根据消息类型再
进行相应的操作。如收到注册请求就派给注册登记模块负责,收到用户发送给另一个用户的
消息则进行推送处理。在推送消息的时候,首先检查消息接收对象用户是否在线,若在线则
- 7 -
中国科技论文在线
直接推送给该用户所在的客户端;若不在线则将此条消息存入离线消息数据库,待相应用户135
上线后再推送当该用户所在的客户端。
图 5 服务器端处理消息功能流程图
客户端各功能模块实现
服务器端有一个后台数据库专门负责存储已注册的用户信息和需要缓存的离线消息,用140
户信息和离线消息的存储分别对应两个数据库表,其设计如下:
表 1 服务器端注册用户信息表
字段 说明 类型 长度 主键 允许空值
id 用户 ID bigint 19 Yes No
created_date 成功注册时间 datetime 19 No Yes
username 登录用户名 varchar 64 No No
password 登录密码 varchar 64 No No
email 注册用户邮箱 varchar 64 No Yes
updated_date 最近一次注册
信息修改时间
datetime 19 No Yes
name 用户昵称 varchar 64 No Yes
表 2 服务器端离线消息表
字段 说明 类型 长度 主键 允许空值
- 8 -
中国科技论文在线
id 消息 ID bigint 19 Yes No
sender_name 消息发送者用
户名
varchar 64 No Yes
receiver_name 消息接收者用
户名
varchar 64 No No
mtype 消息类型 varchar 49 No No
text 消息内容文本 varchar 8192 No Yes
lat 消息被发送时
用户所在的纬
度值
double 22 No Yes
lon 消息被发送是
用户所在的经
度值
double 22 No Yes
receive_date 服务器端收到
消息的时间
datetime 19 No Yes
客户端设计与实现 145
客户端程序架构
客户端采用 MVC 设计模式,将视图层、数据模型层、业务逻辑层进行分离,实现了客
户端程序的高内聚,低耦合,有效地提高了代码的可重用性。客户端主要实现的是与服务器
端进行通信、用户注册与登录、定位与显示位置、消息发送与接收等功能。客户端是位于
Android 平台的移动终端上,使用 XMPP 协议作为即时通信协议,采用开源的 asmack 库进150
行开发。Asmack 是用纯 Java 语言编写的开源开发包,适用于服务器端和客户端,并封装了
XMPP 协议的实现。
客户端架构如图 3 所示,客户端使用 Android 中四大组件之一的 Service 机制来保证与
服务器端的持久连接不会被系统清理掉;心跳包发送机制负责与服务器端维持心跳数据的发
送,从而保证服务器端了解客户端的在线状态;断线重连机制包含通话切换、网络切换等多155
个监听器,保证在需要的情况下发起重连请求;消息管理负责用户之间消息格式的组装、消
息发送与接收;位置管理负责获取用户所在位置并能在地图上显示出制定经纬度的位置点;
连接请求管理负责向服务器端发起连接请求、注册请求、登录请求,并根据服务器端的回应
做出相应的处理。
160
图 6 客户端总体架构
- 9 -
中国科技论文在线
客户端各功能模块设计与实现
(1) 用户注册与登录模块
该模块负责用户在客户端请求注册和登录服务器的功能。客户端程序启动时向服务器端
发起连接请求,成功连上服务器后,客户端会发送注册请求,注册请求带有用户名和密码。165
服务器端注册成功后会向客户端返回注册成功消息,客户端收到这条消息后立即进行登录请
求;若果服务器端注册失败,则返回失败结果,若失败结果为“已注册,请直接登录”,则客
户端立即进行登录请求。待服务器端验证完请求登录用户的身份并同意登录后,返回给客户
端登录成功的消息,客户端再发送一个 Presence 数据包给服务器端要求修改其用户状态为在
线。服务器端将用户状态设为在线后,客户端与服务器端就正式建立起了持久连接,该连接170
在空闲时通过心跳包维持。
- 10 -
中国科技论文在线
图 7 客户端注册与登录流程图
(2) 位置获取与显示模块
该模块负责获取客户端所在的地理位置并能够显示在地图上。定位功能的实现由百度定175
位工具包完成,位置点在地图上显示功能也是使用百度地图工具包的 API 来完成。地理位
置信息必须的数据是经度和纬度,这也是在百度地图上描绘出该位置点的必要参数。
(3) 消息发送与接收模块
该模块负责用户之间带有位置信息的消息的发送与接收功能。由于 XMPP 具有很好的
扩展性,客户端单独创建了一个 XML 节来封装带有位置信息的消息,这个 XML 节顶部字180
段为:Xmppmsg,它与 Presence、Message、IQ 是同一个级别的 XML 节。在 Xmppmsg 中
- 11 -
中国科技论文在线
有多个子节点,与其它三个 XML 节的子节点一样,必须的子节点包括包的 id、消息接收对
象地址、此条消息的发送地址。可选子节点有消息类型、消息文本、经度值、纬度值等。在
收到消息时根据消息类型做出相应处理,若是 Xmppmsg 类型消息,则弹出提示并把消息数
据解析出来存入本地数据库,用户可以在相应的界面看到这些消息。 185
图 8 客户端消息发送与接收流程图
3 实现结果
实时推送系统的测试环境拓扑搭建如下图所示:
190
图 9 系统测试环境拓扑
其中,XMPP 服务器、后台数据库部署在一台装有 Windows XP Professinal 系统的电脑
上,版本为 2002 Service Pack 3。计算机处理器为 Intel(R) Xeon(R) CPU,主频 ,内
存 2GB。
客户端程序使用 Android 版本 SDK 开发,测试平台为 Android 手机,搭载 ARMv7195
双核处理器, 操作系统,测试网络为无线路由器简历的局域网络和运营商开通
- 12 -
中国科技论文在线
的数据流量通信网络。
下面是服务器端的一些实现效果图:
图 10 服务器端收到客户端连接请求时后台部分日志 200
图 11 服务器端修改用户状态为上线时后台部分日志
图 12 服务器端缓存离线消息时后台部分日志
205
图 13 网页端显示系统已注册用户列表
- 13 -
中国科技论文在线
图 14 网页端显示当前在线用户列表
客户端运行起来后,部分相关截图如下图所示:
210
(1) (2)
(3) (4)
图 15 客户端相关截图
图 15(1)表明当前测试终端的登录用户名为“shan”,在图 14 中也可以看到服务器215
网页端显示的在线用户中有“shan”这个用户名,即表明用户在客户端登录成功;图 15(2)
- 14 -
中国科技论文在线
显示了当前测试终端(用户名为“shan”)与另一测试终端(用户名为“lll”,在图 14 中
也能查看到其用户名显示为在线)相互通信的界面,双方消息交互通过服务器端推送,延迟
为毫秒级,充分满足实时性;图 15(3)为长按由“lll”发送过来的某一条消息而弹出的对
话框,因为每条消息都带有位置信息,所以点击“查看位置”选项可以查看到该条消息被发220
送时用户所在的位置;图 15(4)即为图 15(3)点击“查看位置”后跳转到的界面,可以
在地图上看到蓝色定位图标表示的地点即为该条消息被发送的地点,点击该图标可是弹出具
体位置信息提示(发信人、纬度值、经度值)。
4 结论
为了使移动终端用户能够安全实时地交流位置信息数据,针对 Android 平台,本文提出225
了一种安全的实时推送系统,实现了 Android 移动终端用户之间安全又实时地进行位置信息
的交互的需求,满足了用户实时跟进对方位置的需要。系统采用 C/S 架构,包括客户端和服
务器端,通过对目前服务器端和客户端通信机制的调研,采用了开源的 XMPP 作为即时通
信协议。服务器端 web 平台能够高效地将信息推送至客户端,并能显示用户的在线状态;
客户端能够创造新的 XMPP 节来组装带有位置的信息,并能在客户端程序中的地图上准确230
显示出对方的位置。下一步研究工作将放在提高服务器性能与吞吐量,能允许海量用户同时
在线进行位置信息交互的实现方案上。
[参考文献] (References)
[1] 孟小峰,潘晓. 基于位置服务中的隐私保护[J]. 中国计算机学会通讯,2010, 6(6). 235
[2] 何康. 基于物联网的个性化 k-匿名位置隐私保护技术的研究和实现[D]. 南京:南京邮电大学,2012.
[3] 陈武. 基于 XMPP 的企业级即时通信系统的研究与实现[D]. 武汉:武汉理工大学,2009.
[4] 黄伟敏. 基于 XMPP 协议的 Android 即时通信系统设计[J]. 电子设计工程. 2011,19(8):57-59.
[5] 傅镜艺, 马兆丰,罗守山. 基于 XMPP 的移动终端远程安全管理系统的研究与实现[OL].[2014-05-23].
240
[6] 高明鹏. 基于 XMPP 协议的 Android 手机即时通信应用研究与实现[D]. 江西:南昌大学,2012.