基于Android的阅读回执即时通讯系统的研究和开发

2018-01-25 03:28王玉明陈钧
现代计算机 2017年36期
关键词:群组客户端聊天

王玉明,陈钧

(南京工程学院计算机工程学院,南京 211167)

0 引言

Android系统占有市场超过80%的份额,占有更大的用户基数,世界很多智能手机厂家几乎都加入了An⁃droid阵营,并推出了一系列的Android智能机。终端越多,其市场潜力就越大。从程序的移植和安装这一角度来说,Android应用商店最大的优势是,不对An⁃droid应用程序的来源或者提供商进行严格的把控。在这一点上优于苹果。从Android系统自身的而更深层面来说,Android平台是基于Linux内核,具有更佳的可靠和安全,新的Linux内核是未来的发展趋势,An⁃droid开发更是未来趋势[1]。

本项目的主要任务是完成在Android平台上开发以XMPP协议为通信协议的即时通信应用。在项目的研究开始阶段,首先要求的是Android模拟器上模拟客户端应用程序的运行,搭设Tomcat或者Java程序作为主要通信的服务器。在项目的后期,丰富功能后,添加设计Socket服务器作为辅助进行通信。同时在设计该保证节约成本,优化存储结构,使用客户端和服务器一同进行存储,避免相同数据的冗余和堆积现象。重要的是,对于聊天信息的阅读状况的正确及时的反馈。

1 系统相关技术

1.1 Android的相关组件

Android开发四大组件分别是:活动(Activity):用于提供功能模块的实现以及可视化的表现。服务(Ser⁃vice):后台运行服务,对用户隐藏,不对用户可见,不会和应用组件进行交互。广播接收器(Broadcast Re⁃ceiver):用于接收广播,异步接受Intent,一类主要是完全异步的接收正常广播,另外一种是传播有序广播。内容提供商(Content Provider):主要功能是存储和传递数据,另一个重要的功能是对外数据共享。

1.2 Android的UI的优势

Android平台兼容多种的媒体格式,并提供相关插件和版本控制。在部分的按键和Viewer上,提供全息样式和3D的立体图标,并且自带图片编辑器利用相关的数值参数控制斜度和纹理等特点。另外,Android的UI设计采用的是单线程的模型,拒绝在子线程中对于UI进行操作,所以另外提供了Handler的机制来进行协调通信。Handler机制中的主要对象是Looper,每一个线程中只会存在一个Looper对象,与ThreadLocal的思路一致,解决多线程的并发问题。

2 XMPP协议

XMPP协议是一个开放源码的,以XML为基础的可扩展的即时通信协议,其继承了XML的灵活的可扩展性,以XML数据流为载体进行数据传输。其前身是Jabber协议,在2002年,XMPP工作组开发和改编协议以适应IETF组织的消息和出席技术后有了目前的XMPP协议可以说协议是Jabber协议的核心。XMPP尽管不局限网络拓扑结构,但是通信时必须采用TCP协议,在协议结构上使用的是结构模型,由支持该协议的服务器转发到目标用户,完成此类通讯[3]。

3 创新点和技术点

3.1 消息回执的实现

在聊天的过程中,如果消息的接收方在已经查看了信息的情况下,应该对于该条的信息的发送方,给出一个问题的反馈,从而使得发送方得知,这条消息已经被阅读,从一定程度上,能够解决问题推诿的问题。

其实现主要是对于消息包的监控。在检测到包的相关内部检测标准已经有了改变的话,通过成员方法获得到消息的相关信息,然后交给服务端,反馈信息给发送者。

3.2 长链接的实现

用户所在客户端需要不断地从网络上获取信息,那么就需要解决两个问题,一个是判断当前是否链接到网络,另一则就是是否有新的信息需要接受。那么就需要一个长链接模块。

长链接线程会先检查网络连接的状态,由内部的循环判断是否建立过连接,是否来连接网络,连接是否超时,一次来确定是否连接到网络/。建立长链接的过程,其实质是客户端向服务器发送连接请求,请求服务器通过此链接向客户端发送消息,客户端维持一个消息分发线程,消息调用不同的处理过程

另外,如果想保持websocket连接的稳定性,建议加上心跳包。可以每隔一段时间就发个简单的字符串给后台,让后台知道用户在线,可以调用timetask以及CountDownTimer来完成。

4 系统模块的设计与实现

4.1 系统总体框架的实现

参照MVC(Model View Controller,模型—视图—控制器)的架构设计模式,可以达到将业务逻辑、数据、界面显示分离的结构形式。可以把这个系统分为如下的几个功能层次:数据库层(Model层),表现层(View层),业务处理层(Controller层),网络通信层(网络业务的处理层)。根据不同的业务要求,每一个层次同样具有不同的模块,每个模块都具备各自的功能。

注意点主要集中在,需要固定层与层之间的通信接口,能够清楚明白的描述层次和功能。有专业的要求尽量做到“高内聚,低耦合”,在层次的内部应该模块化,尽可能的降低模块与模块之间的联系。同时要保证,接口的调用清晰明了。

4.2 客户端的功能模块与设计

针对此次对于通讯软件的设计要求,尽量将软件的使用的模块简化,大致包括以下的模块:登录注册模块、主界面显示模块、好友管理模块、群组管理模块、聊天模块、个性化设置模块等。每个模块负责具体的不同的功能。

(1)用户注册界面:在新用户要求注册时,提供界面要求用户对于昵称、密码、email信息进行填写,并且在提交之前进行检验,满足全部要求的才能注册到服务器中保存。保存刚注册的账号和密码,方便及时登录。

(2)用户登录界面:在用户登录时,检测账号、密码是否正确进行匹配,判断账号是否的格式、内容输入有误,判断该账号有没有存在共同登录或者异地登录的情况。

(3)好友管理模块:进行好友的管理,功能要求要能够进行添加好友、删除好友、修改好友备注和分组等的操作,在这些操作之后,需要将修改的内容存储到本地或者是远程的数据库。

(4)群组管理模块:进行群组的管理,功能要求要能够进行创建群组、删除群组、邀请好友、修改群组信息等。同时这些信息要注意管理员与普通用户之间的权限的不同。

(5)主界面模块:负责多个功能之间的切换。通过左划、右划以及对提供的工具栏的操作方式实现。以此来完成多个不同的模块的功能的集合。同时要能够显示用户的头像,个性签名,呈现状态以及最近的聊天界面等状态。但是同样这些功能有的是平行的功能,有的是作为承载在主界面是上面的应用。如聊天管理界面图1。

由此也是所有的activity中布局最为复杂的一种,通过添加TextView,Button,ProgressBar等常用控件来编写程序界面。主界面下需要防止多个聊天的窗口。主要的监控就要交给后台功能。Service不能自己运行,只能后台运行,并且可以和其他组件进行交互。但是主界面一定存在相当的耗时操作,像需要发送网络请求的时候,服务器未必会立刻的给出回复,如果不交给子线程,会导致主线程被阻塞,从而程序和用户体验。

聊天模块:负责对于聊天的支持,对聊天的内容进行处理。能群聊、单聊,能添加表情等。聊天记录一样能够在本地端进行存储,并且全部都以聊天窗口的形式显示出来。主要的个人聊天界面,如图2。

图1 聊天管理界面

图2 个人聊天界面

功能设置模块:主要对应用进行功能性设置,包括个人设置和系统设置。此类的系统配置属于用户对于Android的个性化配置,可以使用Android的Shared⁃Preferences功能,它是一个轻量级的存储类,所以很适合用于保存软件配置参数。通过XML文件存放数据,文件存放在本地安装目录下的/data/data//shared_prefs目录下。

4.3 系统的用例分析

依据上面一个模块对于功能模块的分析结果,下面给出相关的用例图,图3。

从图中可以看出,用户需要先行注册成为用户,将其注册的相关信息包括密码账号等,保存在数据库,其次登录客户端,在这样的情况下,用户就可以查询聊天记录。查看发送的图片或者文件等的操作,但是想进行单人聊天,群聊天需要先连接到服务器。

图3 功能模块的用例分析图

4.4 系统的数据库设计

在设计本课题系统时,需要考虑到数据的保存和可重复多次读取的相关措施。Android本身有提供5中数据的存储方式。第一种是SharedPreferences主要是用于存储一些简单的系统配置的信息,优点在于简单快捷的读取和写入方式。第二种是通过文件存储数据,利用和Java一致的文件输入输出流实现。第三种是网络存储方式,主要是解决Android网络数据包的问题。第四种就是组件之一的ContentProvider。第四种是利用开发的数据库SQLite。

本课题系统的设计架构是C/S架构,为了降低数据的大量冗余,和堆积在服务器影响性能的问题,需要在服务器和客户端上面同事的存储数据。服务器主要利用轻型的mysql数据库进行处理。客户端将少量的系统配置信息,例如用户名和密码,用户的私人配置等信息保存在SharedPreferences中,主要还是通过SQLite进行保存。

本项目主要的数据库表有User用户信息表、Con⁃tacts:联系人列表、Single_session单人会话列表、Sin⁃gle_message单人聊天信息表、Group_session多人会话列表、Group_message多人聊天信息表。

以下是聊天系统的ER图:

图4 聊天系统ER图

5 结语

本系统主要使用Java语言开发,通过原型设计,数据库设计,已完成基本的阅读回执功能,即时反馈已读动态以及对重要的信息做出提醒,有一定的实用性。根据我们对于国内外研究现状、发展水平的分析了解,本系统开发成本低廉,效率高,扩展性好。

[1]吕留记.基于Android的即时通讯系统的研究与实现[D].电子科技大学,2016.

[2]王少蕾.安全通信软件“密迅”的Android手机客户端的设计与实现[D].北京交通大学,2014.

[3]高明鹏.基于XMPP协议的Android手机即时通信应用研究与实现[D].南昌大学,2012.

[4]郝秋影.基于Android的消息应用的设计与实现[D].北京邮电大学,2013.

猜你喜欢
群组客户端聊天
你的手机安装了多少个客户端
“人民网+客户端”推出数据新闻
——稳就业、惠民生,“数”读十年成绩单
Boids算法在Unity3D开发平台中模拟生物群组行为中的应用研究
我就是不想跟你聊天了
敞开门聊天
新华社推出新版客户端 打造移动互联新闻旗舰
聊天不倒王
你我聊天桌等