美文网首页
Android 即时通信(三)仿微信的私聊和群聊APP

Android 即时通信(三)仿微信的私聊和群聊APP

作者: 古早味蛋糕 | 来源:发表于2023-05-05 22:48 被阅读0次

    一、简介
    智能手机时代,微信异军突起,只需耗费少数流量即可发送丰富的图文消息,由此打败了短信、彩信、飞信,成为人们最常用的社交App。所以设计并实现手机上的即时通信App,还是很有成就感的。
    二、需求分析
    聊天属于微信的基础功能,包括单人聊天和多人聊天,其中单人聊天简称私聊,多人聊天简称群聊。打开微信App,它的底部标签栏如图【微信底部导航栏】所示,点击第一个微信标签,上面的主界面切换到聊天列表页;点击第二个通讯录标签,主界面切换到通讯录列表页。


    微信底部导航栏.jpg

    点击某个通讯录好友,准备给他发消息,此时打开私聊界面,可见聊天界面既能发送文本消息,也能发送图片消息,并且对方消息靠左对齐,我方消息靠右对齐。再切到聊天列表,进入某个群聊,如图【微信的群聊界面】所示,发现顶部群聊名称的右侧显示总人数,并且大伙都能在群聊界面畅所欲言。


    微信群聊界面.jpg
    私聊的时候,聊天消息只发给对方;群聊的时候,该群的所有成员都会收到群消息。
    三、功能分析
    即时通信(Instant Message,IM)有两个意思:第一个是通信,也就是传输消息,至少支持包含文字与图片在内的图文消息;第二个是即时,也叫实时,发出来的消息要马上送到对方那里,一刻都不能耽搁。即时通信的特性决定了它没法采用基于短连接的HTTP协议,而必须采用基于长连接的网络协议,比如Socket、MQTT、IMPP、XMPP等,其中又以Socket最为基础。
    即时通信工具首先是一个工具,由于它面向最终用户,因此要求方便易用,符合人们的使用习惯才行。从用户界面到后台服务,即时通信工具主要集成了如下App技术:
    (1)底部导航栏:主界面底部的一排标签按钮,用于控制切换到哪个页面,该标签栏可结合RadioGroup与ViewPager自定义实现。

    (2)列表控件:无论是好友列表还是群聊列表,都从上到下依次排列,可采用列表视图ListView或者基于线性布局管理器的循环视图RecyclerView。
    (3)输入对话框:个人信息页面修改用户昵称,需要在弹窗中填入新昵称,而在对话框中输入文字信息,用到了第4章介绍的InputDialog。
    (4)圆角矩形:好友列表与聊天界面中的用户头像,经过了圆角矩形裁剪,看起来更亲切更柔和。
    (5)Socket通信:聊天消息实时传给对方,需要采取Socket通信与后端服务器交互,为降低编码复杂程度,客户端与服务端均需集成第三方的SocketIO库。
    (6)移动数据格式JSON:传输聊天内容时,需要把图文消息封装为JSON格式,以便数据解析与结构扩展。
    (7)仿微信聊天还需要与之配合的Socket服务器,所以需要实现Socket服务器。
    四、仿微信聊天的Socket通信,因为涉及客户端与服务端的交互,所以通信流程有些复杂,主要划分为下列4个功能:
    1、服务端的Socket连接管理
    Socket服务器对各个客户端的管理操作主要包括如下3类:
    (1)人员上线、人员下线。人员上线时,需要把该人员保存至人员映射表(即对应表);人员下线时,需要从人员映射表删除该人员。
    (2)人员入群、人员退群。人员入群时,需要把该人员添加至群成员映射表;人员退群时,需要从群成员映射表删除该人员。
    (3)发送文本消息、发送图片消息。对于私聊消息,只要把文本或图片转发给目标人员即可;对于群聊消息,则需把文本或图片转发给当前群的所有成员(消息发送者除外)。
    按照上面管理操作的描述,首先声明几个映射对象,用于保存相关的实体数据,声明代码如下所示:

     // 客户端映射表
     private static Map<String, SocketIOClient> clientMap = new HashMap<>();
     // 人员名字映射表
     private static Map<String, String> nameMap = new HashMap<>();
     // 群名称与群成员映射表
     private static Map<String, Map<String, String>> groupMap = new HashMap<>();
    

    接着给服务端的main方法补充以上管理操作对应的事件监听器,这些监听器的注册示例代码:

    相关文章

      网友评论

          本文标题:Android 即时通信(三)仿微信的私聊和群聊APP

          本文链接:https://www.haomeiwen.com/subject/byvijdtx.html