date: 2016-06-27 14:51:04
tags: im系统,环信,集成,聊天,即时聊天系统
一、前言
本次app改版,需要在原有的基础之上增加即时通讯(im)功能,通过一段时间的技术选型,最终确定集成环信。环信是一家专注即时通讯的第三方平台。使用过程中,只需在环形服务器中维护用户体系,以及调用环信提供的系列sdk即可实现即时通讯功能。
从上图可以看出,首先在本地服务端维护了一套用户体系,我们需要在环信系统中维护一套对应的用户体系,在环信系统中,用户id即代表着他在这套用户环境中的唯一身份表示。服务端通过环信提供的系列rest api来维护用户体系,具体管理操作有(用户的注册,修改,删除等)。服务端还可以将环信的历史聊天记录同步到本地,这些历史记录可以提供app端的历史消息查询(因为环信不会对消息做长时间的保存)
客户端首次登陆需要登陆环信系统,这一步相当于告诉环信我已经上线了。如果选择了自动登陆模式,那么下次登陆的时候环信sdk就会自动登陆(但是在以下情况下需要重新登录:1、主动退出 2、更换密码 3、用户被删除)。app在聊天过程中只需调用sdk的接口直接与环信服务器对接,消息的发送方和接收方都会将消息保存到本地db中(注意:webim端sdk不提供消息存储功能,如果有必要的话,需要调用app服务器来获取聊天记录),用户可以调用sdk提供的接口获取本地聊天记录,但是要注意,这些本地记录是绑定手机端的,如果更换了手机或者清空了历史记录,那么就需要调用app服务端提供的历史消息查询接口来获取历史消息。
二、im集成功能设计图
下面我将详细介绍im系统的集成方案。首先整套系统分为前端和后端,前端包括android,ios和web网页端。android和ios的所有功能设计几乎一致,因此这里合为一起来讲解。而web网页端有所不同,他所能实现的功能相对于app会弱化很多,因此就单独介绍。服务端的功能比较重要,主要是维护im用户体系,以及维护平台用户的聊天记录。
下图是我对整个系统的功能设计图,分为前端和后端,这里每一个功能模块对应sdk中一系列的api。在实际开发中需要开发者对应环信的api文档进行,具体问题具体对待! 请看 API文档 请注意!本文是对系统功能的描述,具体实现以API文档为准!
三、服务端集成
四、APP端集成
1.登陆
用户在第一次登陆app的时候,登陆成功以后,系统会返回用户信息,其中包括 uid和hash后的密码,app通过这两个参数调用sdk的登陆接口。
2.自动登陆
即首次登录成功后,不需要再次调用登录方法,在下次 APP 启动时,SDK 会自动为您登录。并且如果您自动登录失败,也可以读取到之前的会话信息(以上情况是在未调用登出的情况下实现的)。
自动登录在以下几种情况下会被取消:
- 用户调用了 SDK 的登出动作;
- 用户在别的设备上更改了密码,导致此设备上自动登录失败;
- 用户的账号被从服务器端删除;
- 用户从另一个设备登录,把当前设备上登录的用户踢出。
3.自动重连
通过注册链接状态监听,在掉线时,sdk会自动重连
4.退出登陆
当用户在退出app的以后,紧接着调用sdk的退出操作。
5.注册监听
APP需要通过注册消息监听来接收消息。
6.发送消息
目前系统只需要发送文字,图片两种类型的消息即可。
7.接收消息
目前系统只需要接收两种类型的消息,即文章与图片,但后续有可能加上语音,文件等类型,希望做好相应的扩展。
8.消息管理
第一、获取未读消息数量
第二、未读消息清零
第三、对消息设置已读
第四、获取聊天记录,这里需要注意,sdk或默认把聊天记录保存到本地,app可以直接在本地读取,但是当用户更换手机,或者第一次登陆app的时候,app需要根据具体情况去服务端获取聊天记录。
第五、删除聊天记录
9.自定义扩展消息
当SDK 提供的消息类型不满足需求时,开发者可以通过扩展自 SDK 提供的文本、语音、图片、位置等消息类型,从而生成自己需要的消息类型。
五、WebIm端集成
1.登陆
在web端登陆以后,返回uid和hash后的密码,登陆环信。
2.退出登陆
在web端退出登陆以后,需要退出环信。
3.发送消息
和app端一样,支持发送文字类型和图片类型的消息。
4.消息接收
需要在初始化的时候注册接收消息,对应的有文字类型和图片类型。
5.新消息提示
接收到新消息以后,需要有相应的提示,环信提供的demo中有相关实现,可参考。