视频教程  > 进阶班教程  > 安卓

Android热门技术-即时聊天

由于很多毕业的学员在开发时遇到不少关于即时聊天、RxJava、热修复等功能的APP开发,近期小码哥Android学院将以视频分享的方式不断推出大家关注的这些技术的学习视频,希望能够给予需要这方面技术的同学提供一个很好的引导帮助,同时对这些技术感兴趣的朋友也可以一起进行技术上的交流和探讨。

    今天就先跟随Android学院的王维波老师来学习基于XMPP实现的即时聊天功能。先看下总体内容:

1.jpg   

l  什么是即时聊天?

即时聊天可以简单理解为一种通讯协议,像我们常见的微信,QQ,YY、陌陌等都是属于即时聊天软件。

l  为什么使用XMPP?

有了解即时聊天的朋友可能都知道,像融云、环信这些第三方的IM即时通讯,底层也是基于XMPP来实现的,而且XMPP具有开放、标准、证实可用、分散式、安全、可扩展以及多样性等多种特点,在开发即时聊天时一般都会优先考虑选择它。

l  XMPP是什么?

简单来说,就是一种以XML为基础的开放式实时通信协议。

使用XMPP通讯协议,一般包含下面几个内容:XMPP+Openfire+ASmack。

XMPP:一种实时通信协议。

Openfire:主要是作为服务器,负责管理客户端的通信连接,以及提供客户端一些通信信息和连接信息。

ASmack:主要是XMPP协议的实现,提供了一套很好的API,操作XMPP都是通过使用Smack的API来实现,因为是在Android里,所以使用的是ASmack这个jar包。

  

初步了解了一些基本的知识点,我们就来看下一些具体功能的实现。


l  Openfire 服务器安装及配置

参照安装文档安装完 Openfire 服务器之后,可以创建几个用户用于测试。可以安装 spark、如意通这些客户端进行登录测试。这里主要是安装了spark。

2.png


l  项目创建及asmack源码关联

因为XMPP 即时聊天的核心主要是使用Smack的API,asmack.jar里面的一些常见类,以及常见监听器来实现的,所以需要添加jar包进行依赖和关联源码。

3.png


l  参考Smack API文档,实现登录功能

4.png


5.png


部分关键代码:

6.png

7.png



l  联系人的创建以及CRUD

    主要通过contentProvider缓存联系人信息到数据库,并进行增删查改操作,不用每次从消息通道中获取,还可以使用ContentObserver监听数据信息的改变,实时更新UI。(具体代码请下载源码查看)

8.png

9.png


效果图:

10.png

联系人功能实现之后,我们就可以开始进行聊天功能的开发。

 

l  通过点击联系人列表中某个item传递数据到聊天界面,并在聊天界面设置显示当前聊天的用户。

11.png

12.png


效果图:

13.png


l  实现聊天消息发送以及聊天信息保存

 

继续参考Smack API文档,查看聊天功能的实现方法。

14.png


点击发送后开始和发送对象聊天,这里需要先保存当前登录的对象,也就是发消息方的账

号,发送方的账号在登录完成后获得。

15.png

16.png


效果图:

17.png


聊天消息需要保存起来,用到ContentProvider和数据库。通过创建相关的用到ContentProvider和数据库,进行CRUD操作,实现聊天信息缓存。

18.png

19.png

20.png

21.png


在发送和接收消息时,保存消息,最后在聊天界面中获取。

22.png

23.png


效果图如下:

24.png


到这里为止,基本上一个简单的聊天功能就实现了,我们还可以对消息显示的布局、界面不可见时也能收到消息等问题做一定的完善,具体代码就不展示了,直接看效果图吧。

25.png



l  会话消息的实现

    

最后再说一下会话信息界面的实现过程,关键就是展示聊天会话的实时信息。

首先需要在SmsProvider中创建相应的URI,以及相应的匹配规则;显示会话联系人,这里只需要查询操作。

26.png

1491389362212579.png


设置数据展示:

27.png

28.png

29.png


为了实现实时显示最新的数据,还需要暴露注册和反注册的方法。

30.png


最终效果图:

31.png



广场舞大妈说,如果跳的足够快,她的孤独就追不上她。

拾荒的大叔说,如果翻垃圾翻得足够仔细,便能找回丢失的自己。

碰瓷的大爷说,只要演的够逼真,就能骗过匆匆流逝的时光。

只要坚持学习Android热门技术,就一定能够改变人生和命运!


要即时聊天视频.jpg





0.0307s