即时通讯作为社交软件必不可少的功能,较好的通讯体验不仅提升用户的好感度,也增加用户对APP的粘度。
即时聊通讯功能应用广泛,例如:微信、QQ、微博等社交为主的应用。但是对于大部分并不是以社交为主体的小应用来说,更关心的是如何快速搭建并实现即时通讯功能,那么使用第三方SDK能满足基本需求,也能快速达到预期效果。常见的即时通讯SDK有:环信、融云、云通信、腾讯云、阿里云等等。无论集成还是使用都很方便,甚至还提供了配套的UI来帮助开发者,所以开发者只需要根据业务以及设计稿做一些调整就能完成即时通讯功能,大大地减少开发周期以及因为能力不足无法完成等问题。
本文介绍的不是如何使用SDK,也不是如何构建通讯架构,更不是如何实现具体的通讯功能。本文介绍的是应用中基于阿里云
完成的即时通讯功能的实现流程图,围绕自己制作的一个流程图+解释,所以想要看完整的实现即时通讯功能的话,下面的内容就不适合看了,当然流程图只是个参考方向,功能不完全完善,看管自己把握
,不喜勿喷。
整体流程架构图
功能模块区分
- 处理好友差异模块
- 阿里云管理模块
- 处理离线消息模块
- 处理消息模块
- 处理发送消息模块
- 获取历史消息模块
- 删除消息模块
- 转发消息模块
- ….
模块功能介绍
处理好友差异模块
模块功能是获取好友、群、讨论组差异集合的,注意是差异集合,并不是全部。也就是好友有新增、删除的差异进行更新。获取服务器返回的差异集合进行处理,请求成功时删除本地的缓存,如果是新增好友并更新好友数据库,如果需要创建新的会话,就创建会话。如果是删除好友,删除好友、删除会话、删除消息。对于附带用户相关的设置信息,比如是否需要震动提醒,是否需要声音提醒等先关配置信息。其他就是根据实际的业务需要的数据了。
1 | // 伪代码 |
阿里云管理模块
即时通讯是基于阿里云的,那么相比要对阿里云进行封装处理,阿里云管理类ALiPushManager被AppDelegate拥有,也就是全局性的。ALiPushManage类r主要分为三打功能,一是初始化,二是添加定时器用于定时获取离线消息,三是接收即时的通讯消息。
为什么有了接收即时消息功能了还需要添加定时获取离线消息呢?原因是为了保证消息的同步,谁也说不定即时消息能即时到达,不管是网络原因还是阿里云SDK原因还是各种原因,那么有了定时获取离线消息,能保证阿里云推送不到的时候可以通过获取离线消息来获取即时消息,接下来就是要处理重复消息即可。
1 | // 伪代码 |
- 定时获取离线消息
1 | // 伪代码 |
- 注册监听即时消息
1 | // 伪代码 |
处理离线消息模块
离线消息模块是请求服务器获取离线消息,进行一些列操作的模块。
1 | // 伪代码 |
处理消息模块
处理消息模块是一个消息的汇总模块,包括聊天消息、好友相关消息、群聊相关消息等。通过传入一个消息,对消息进行一些组装、存储、更新到UI等功能。
由于模块功能比较多,这里以聊天聊天消息功能进行说明:
1 | // 伪代码 |
处理发送消息模块
发送消息模块负责处理发送聊天信息,需要注意的是图片、语音类型的消息如何处理。
1 | // 伪代码 |
获取历史消息模块
获取历史消息应用场景在于用户下拉查看以往消息的时候,过程其实跟获取离线消息过程相似。
1 | // 伪代码 |
删除消息模块
删除消息功能应用场景是在在消息列表中,一般用户长按消息出现UIMenuItem,选择删除item之后的操作。
1 | // 伪代码 |
转发消息模块
转发消息功能应用场景是在在消息列表中,一般用户长按消息出现UIMenuItem,选择转发item之后的操作。
1 | // 伪代码 |
流程图流程说明
- APP启动
app启动时创建阿里云管理类,上面已说明阿里云管理类的主要功能。当APP执行到applicationDidBecomeActive:方法时,全局参数isLockForRefreshUI进行锁住,为什么要锁住呢?这个参数是作为获取离线消息是否成功的标志,防止定时器获取离线消息时刷新UI,暂时不需要刷新UI的话就要对isLockForRefreshUI进行锁住。所以已启动就要将isLockForRefreshUI赋值为YES,除了获取好友差异集合->获取取离线消息成功之后isLockForRefreshUI才会设置为NO。
- 好友差异集合
到了获取好友差异集合,那么如果失败会进行递归获取,直到获取成功。当成功之后获取离线消息。
- 离线消息
这里有一个全局参数isGetOffLineMsg进行控制,isGetOffLineMsg表示如果正在获取的情况下return掉,不会进行请求。从好友接口到获取离线消息这过程不会设置为心跳包,而定时器获取则为是心跳包请求。
- 处理离线消息
获取离线消息成功之后对一切数据进行处理,具体的功能查看处理消息模块即可。这个功能也适用于阿里云推送下来的消息以及发送消息成功之后对消息的一系列操作。
声明
转载请注明出处。