基于Android数据交互系统的研究与实现

2015-03-27 16:09
关键词:极光应用程序消息

周 兵

(郧阳师范高等专科学校 计算机科学系,十堰 442000)

参 考 文 献



基于Android数据交互系统的研究与实现

周 兵

(郧阳师范高等专科学校 计算机科学系,十堰 442000)

针对Android移动终端与远程web服务器在进行数据通讯时,一是要保证通讯数据的安全、通用、快速,二是要保持移动终端的数据与服务器端的数据同步.在移动终端进行数据通讯时,一般采用XML数据格式和JSON数据格式,选择JSON格式进行数据交互,可以提高数据的传输率,减少响应时间和数据流量;而要保证移动终端数据与服务器数据同步,Android目前通常采用C2DM云端推送、MQTT、RSMB、XMPP等方法方案.通过研究发现该方案都有不足之处,针对持久连接(Push)方式的不足,结合国内情况,采用极光推送第三平台,搭建基于极光推送平台的web 服务器与Android客户端的数据推送来解决数据同步问题.

Android;服务器端;客户端;消息推送

0 引 言

Android是Google公司推出的开源手机平台,它由操作系统、中间件、用户友好界面和应用软件组成[1].随着移动互联网的快速发展,智能机的普及,很多用户都喜欢通过移动终端进行购物、娱乐等,致使移动终端应用程序迅速发展,越来越多的web应用程序向移动终端移植.而在进行PC端应用程序向移动终端移植的过程中,一是需要合理的考虑系统资源的使用,尤其在Android系统中,内存是其重要资源,Android操作系统允许在低内存情况下杀死系统服务或一些应用程序,此时就有可能将我们开发的应用程序或服务杀死.因此,在进行移动终端应用开发时,要尽量对内存的占用进行优化;二是要考虑在实现移动终端与web 服务器进行数据的通讯时,在保证数据安全快速的同时,如何实时保证数据一致,实现更好的用户体验.

1 JSON简介

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于计算机解析和生成,JSON采用的是完全独立于语言的文本格式,JSON相对于XML在解析速度上要更快,而且文档更小,非常适合在移动终端上使用.JSON主要分两种结构:一是“名称/值”对象集合.不同的语言理解为对象、记录、结构、字典、哈希表等.二是值的有序列表.大部分语言中理解为数组.典型的JSON 格式中“[]”符号对表示 JSON 数组,“{ } ”符号对表示JSON对象[2],对象与对象之间用逗号分开,名称与值之间用冒号分开,值是String类型时用引号,“名称/值”之间用逗号分开,所有名称必须用引号引起来,在整个JSON结构中只用到了这七种符号,使用起来非常方便.

2 常见消息推送的方法

2.1 轮询(Pull)方式

轮询方式是应用程序采用定时与服务器连接,查询是否有新消息到达,客户端与服务器之间的通信需要自己实现,例如消息排队等.在实现过程中还要考虑轮询的频率,太慢可能导致某些消息的延迟,太快,则会大量消耗网络带宽和电池.而Android平台对网络带宽和电池要求是有限制的,如果应用程序更新频率不是很高,不适合采用轮询方式.

2.2 SMS(Push)方式

在Android平台上,通过拦截SMS消息并解析消息内容来了解服务器的意图,客户端根据获取内容进行相应处理.这种方案的好处是,可以实现完全的实时操作.但是这个方案的成本较高,要向移动公司缴纳一定的费用.对于不需要考虑成本的可以采用该方案进行Android的消息推送.

2.3 持久连接(Push)方式

这个方案需要客户端与服务器端之间一直保持连接,只要服务器端有消息需要发送,直接推送就完成了,该方案可以解决由轮询带来的性能问题,但是还是会消耗手机的电池,同时也会耗费服务器的资源.

3 基于Android消息推送的解决方案

3.1 C2DM云端推送

在Android手机平台上,Google提供了C2DM(Cloud to Device Messaging)是一个用来帮助开发者从服务器向Android应用程序发送数据的服务,该服务提供了一个简单的、轻量级的机制[3],允许服务器可以通知移动应用程序直接与服务器进行通信,以便从服务器获取应用程序的更新和用户数据.C2DM服务负责处理诸如消息排队等事务并向运行于目标设备上的应用程序分发这些消息.但是经过一番研究发现,这个服务存在很大的问题:①C2DM内置于Android的2.2系统上,无法兼容老的1.6到2.1系统;②C2DM依赖Google提供的C2DM服务器,而Google已退出中国市场,这个服务在国内已不可用;③把硬件系统集成在一块了.不同的品牌的硬件厂商平台,他们可能会把Google的这种服务去掉,尤其在国内,就有很多把Google这种原生的服务去掉.

3.2 MQTT协议实现Android推送

MQTT是一种基于发布/订阅的轻量级消息传输协议[4],它由IBM于2001年发布,协议简单、扩展性强、低带宽,低耗电量,但技术不够成熟,实现起来比较复杂,硬件成本比较高,不适合小型企业开发.

3.3 RSMB实现推送

Really Small Message Broker (RSMB) ,同样由IBM提供.其缺点是技术不够成熟、实现较复杂、服务端组件不开源,部署硬件成本较高.

3.4 XMPP协议实现Android推送

XMPP(可扩展通讯和表示协议)是基于可扩展标记语言(XML)的协议,该协议自由、开放、公开的,并且易于了解,而且在客户端、服务器、组件、源码库等方面,都已经各自有多种实现,主要用于即时消息(IM)以及在线探测,但是协议复杂、冗余、费流量、费电,部署成本高[5].

3.5 使用第三方平台JPush

第三方平台有商用的也有免费的,可以根据实现情况选择使用.关于国内的第三方平台有很多,目前比较不错的有极光推送.通过极光推送服务,主动、及时地向用户发起交互,向其发送聊天消息、日程提醒、活动预告、进度提示、动态更新等服务[6].移动终端的应用程序在开发时除了考虑内存外,还需要考虑其电池的使用时间,用户移动数据的使用,而极光推送采用了AlarmManager机制,用于管理里面封装的一个独立硬件时钟RTC模块,CPU在休眠的时候也可以正常运行,这样就可以节省电量的消耗.采用极光推送进行消息推送,不用客户端不停的去轮询访问服务器,节省了用户的流量,同时也节省了系统资源,提高了用户的体验感.

4 基于Android平台数据交互系统的实现

在基于Android平台数据交互系统实现过程中,有些移动客户端数据需要及时提交给服务器,此时采用直接与远程服务器通信方式;有些服务器中变化的数据需要实时更新(如影院购票系统中电影介绍、娱乐、上映电影等信息)到移动终端合法在线的用户手机上,采用消息推送的方式,将web服务器中更新的数据推送到JPush平台,JPush平台再将消息推送到所有预定该消息的在线客户端,客户端再将推送过来的消息通过解析存储到SQLite中并更新相应的UI界面.

4.1 直接与远程数据的交互的实现

在基于Android数据交互系统中,有些数据需要实时与服务器进行数据的交互,如:用户的验证等信息,需要实时交互的数据采用直接与服务器连接的方式来访问,此时就需要建立客户端的程序和web服务器端的程序,先由客户端采用POST或GET方式将数据提交给web服务器服务器,服务器获得客户端请求后对该请求进行处理,将处理的结果返回给客户端进行相应的页面更新.以用户登陆为例,其实现步骤如下:

(1)Android客户端的实现创建一个Activity,该Activity继承系统提高Activity类,在该类中使用DefaultHttpClient类创建一个HttpClient对象获得响应,使用HttpPost类创建一个HttpPost对象,调用HttpPost的setParams()方法添加请求参数,也可以调用setEntity()方法设置请求参数,HttpPost 对象的主要作用是将Android 手机端的数据提交给 Web 应用服务器[7],接着调用HttpClient对象的execute()方法发送请求,返回一个HttpResponse对象,调用HttpResponse的getEntity()方法获取包含了服务器响应内容的HttpEntity对象,通过这个对象获取服务器的响应内容.部分代码片段如下:

String url=“http://192.168.1.120:8080/android/LoginServlet”;//目标地址

HttpClient client=new DefaultHttpClient();//创建HttpClient对象

HttpPost httpRequest=new HttpPost(url);//创建HttpPost对象

String name=userName.getText().toString().trim();

String pwd=userPwd.getText().toString().trim();//将要传递的参数保存到List集合中

List params=new ArrayList();params.add(new BasicNameValuePair(“userName”, name));

params.add(new BasicNameValuePair(“userPwd”,pwd));

…………

httpRequest.setEntity(new UrlEncodedFormEntity(params,“utf-8”));//设置编码方式

…………

HttpResponse httpResponse=client.execute(httpRequest);//执行请求

//判断请求是否成功

if(httpResponse.getStatusLine().getStatusCode()==HttpStatus.SC_OK){

System.out.println(“登陆成功”);

//获得数据并解析该数据

String str=EntityUtils.toString(httpResponse.getEntity());

}else{

System.out.println(“登陆失败”);

}

(2)web 服务器端的实现

在web 服务器端建立一个servlet类,重写service(HttpServletRequest request, HttpServletResponse response)方法,通过request对象中的getParameter()方法,获得Android客户端请求的数据,将获得的数据与数据库中的数据进行比较,将比较的结果返回给Android客户端,客户端根据返回的数据进行相应的更新操作,其部分代码如下:

String name = request.getParameter(“userName”);//获得传递过来的用户名

String pwd = request.getParameter(“userPwd”);//获得传递过来的用户密码

UsersDao dao = new UsersDao();//实例化UsersDao对象

boolean flag = dao.isValidUser(new Users(name, pwd));//用户合法性验证

//判断用户是否合法

if (flag) {

//合法用户

} else {

//不合法用户

}

4.2 极光推送平台与客户端交互的实现

当web服务器数据库中的数据发生变化时,需要将变化的数据先推送到极光推送平台,极光推送平台再将该数据推送到所有合法的在线的移动终端,客户端获得极光推送平台推送过来的数据后,通过解析,将解析的数据存储到SQLite中并将该数据实时更新到用户UI界面中.其实现步骤如下:

(1)在极光推送平台上注册账号.登陆注册页面https://www.jpush.cn/,填写相应的注册信息如:用户名、密码、公司名、联系方式、Email等进行注册;

(2)注册成功后会将激活链接发送到填写的Email邮箱中,通过该Email地址激活该用户,激活用户后,登陆极光推送平台创建一个应用,输入应用程序的名称和应用包名,此时最关键是应用包名一定要与Android项目中的包名一致,否则当Android客户端部署后不能成功推送,应用创建成功后会自动生成一个AppKey和一个API 主密码,这是客户端或web服务器端与极光推送平台连接通信的凭证;

(3)在极光推送官网上分别将jpush-client-3.2.3.jar、gson-2.2.4.jar、slf4j-ap0.i-1.7.5.jar包下载下来,再在web项目中将该包导入到web项目中libs目录下;

(4)在web项目中相应的servlet中添加代码,实现数据库中表的数据发生增删改等操作时,将变化的数据以消息或通知的方式推送到极光推送平台,极光推送平台再将该消息或通知推送到所有合法在线的移动客户端,其web 服务器端的主要代码如下:

// masterSecret:极光网站上申请的密钥 ;appKey:网站上申请应用的appKey

//建立JpushClient类,用来发送消息的对象

JPushClient jPushClient = new JPushClient(masterSecret, appKey);

…………

//设置推送平台、接收者、推送内容等信息

PushPayload payload = PushPayload.newBuilder().setPlatform(Platform.all()).setAudience(Audience.all()).

setNotification(Notification.

alert(json.toJson(users))).

build();

jPushClient.sendPush(payload); //发送消息

(5)创建一个Android客户端项目,该项目的包名一定要与创建应用的包名一致,新建一个libs目录,将jpush-sdk-release1.7.1.jar从官网上下载下来,并导入到Android项目的libs目录下,修改AndroidManifest.xml,主要不同点就是需要添加,其中appKey是在创建应用的时候自动生成的,其它的配置和正常的Android应用开发一致.

(6)添加代码,通过cn.jpush.android.api.JPushInterface类的init()方式初始化的JPush,官方建议新建一个类,该类继承android.app.Application;重写onCreate()方法,在onCreate()方法中添加JPushInterface.init(getApplicationContext())代码即可初始化JPush.

(7)使用广播接收极光推送平台推送过来最新信息.定义一个类,该类必须继承android.content.BroadcastReceiver,重写onReceive()方法,在该方法中接收推送过来的信息,并将接收到JSON格式的信息进行解析,更新相应的UI界面.代码如下:

public void onReceive(Context context, Intent intent) {

Bundle bundle = intent.getExtras();

…………

//将JSON格式数据转换成JSON数组

JSONArray jsonArray = new JSONArray(json);

//存放转换后的Java对象

List all=new ArrayList< FilmInfo >();for(int i=0;i

//对JSON数组遍历并转换成Java对象

JSONObject jsonObject=jsonArray.getJSONObject(i);

String filmName=jsonObject.getString(“filmName”);

…………

all.add(new FilmInfo (filmName,……));

}}

(8)更新UI界面.Handler主要接收子线程发送的数据,并对此数据进行处理,从而可以实现异步更新[8].

5 结 语

在基于Android数据交互系统的实现过程中,采用直接连接web服务器的方式,实现移动客户端与服务器的实时访问,采用极光推送平台将服务器中变化的数据实时推送到移动客户端的方式,实现移动终端用户界面的动态更新,保持移动终端的数据与服务器数据的同步更新,使用户的体验更加流畅,延长电池的使用时间,节省用户的流量,提高系统的运行效率.

参 考 文 献

[1] 王 楠,宋 飞,周华春.一种基于Android平台的即时通信方案[J]. 计算机应用与软件,2013(4).

[2] 龚成莹,邢敬宏,胡银保.基于JSON的Android移动终端与PHP及MySQL数据通信[J].工业仪表与自动化装置, 2013(1).

[3] 邹 海,李 强,邱慧丽.基于Android C2DM服务的云端推送研究与实现[J]. 计算机技术与发展,2012(7).

[4] 关庆余,李鸿彬,于 波. MQTT协议在Android平台上的研究与应用[J]. 计算机系统应用,2014(4).

[5] 倪红军.基于Android 平台的消息推送研究与实现[J]. 实验室研究与探索,2014(5).

[6] 刘 平. Android手机访问服务器的一种数据交互方法[J]. 电子设计工程,2010(9).

[7] 周 兵. Android中UI线程与后台线程交互的探讨[J]. 郧阳师范高等专科学校学报,2013(3).

Design and Implementation of Data Exchange Based on Android System

ZHOU Bing

(Department of Computer Science,Yunyang Teatechers' College, Shiyan 442000, China)

In view of the Android mobile terminal and the remote web server in data communication, a communication is to ensure data security,popularity and speediness.The second one is to maintain the data of the mobile terminal and the server data synchronization. Data communication in a mobile terminal, the general use of XML data format and JSON data format,and selection of JSON format data exchange can improve the data transmission rate, reduce the response time and data flow.It can also ensure the mobile terminal data with the server data synchronization. Android is commonly used in current C2DM cloud push, MQTT, RSMB, XMPP method scheme.The study finds that the program has shortcomings.Persistent connection (Push) mode is insufficient. In view of the domestic situation, the aurora push third platform is used to build web server Aurora push platform and Android client data are sent to solve the data synchronization problem.

Android ;server; client; message push

2015-01-18

2013郧阳师范高等专科学校科研项目(2013B16 ).

周 兵(1979-),男,讲师,研究方向,计算机软件应用.

TP31

A

1671-119X(2015)03-0046-05

猜你喜欢
极光应用程序消息
基于U-net的紫外极光观测极光卵形态提取
一张图看5G消息
删除Win10中自带的应用程序
神奇的极光
谷歌禁止加密货币应用程序
极光之上的来客
神奇的极光
消息
消息
消息