IM简介
即时通信(Instant Messaging,IM)基于 QQ 底层 IM 能力开发,仅需植入 SDK 即可 轻松集成聊天、会话、群组、资料管理能力,帮助您实现文字、图片、短语音、短视频等富 媒体消息收发,全面满足通信需要。
- 支持文字、图片、语音、小视频等丰富的富媒体消息 完善的私聊、群聊、直播间聊天模式
- 强大的用户资料与群组扩展及管理能力
- 集成 UI 开源(TUIKit)组件,节省成本,提高效率
支持平台
以下平台都支持互通,且能跨终端全平台服务。
平台 | SDK 及兼容性 | Demo | 源码 | UI 组件 |
---|---|---|---|---|
Android | 兼容支持 JDK 1.6 和 Android SDK version 14 以上系统 | 支持 | 支持 | 支持 |
iOS | 兼容 iOS 8.0 以上版本 | 支持 | 支持 | 支持 |
Mac | 兼容 OS X 10.10 以上版本 | 支持 | 支持 | - |
Windows | 包含C 、C ,兼容 Windows 7、Windows 8/8.1、Windows 10;全面支持32位和64位程序接入 | - | - | - |
Web | 支持 IE 9 ,Chrome 7 ,FireFox 3.6 ,Opera 12 和 Safari 6 | 支持 | - | - |
小程序 | 支持 | 支持 | - | - |
IM基本概念
用户和账号体系
用户账号用于标识唯一的一个用户,一般称为identifier或userid,每个用户账号都有一个对应的鉴权密钥,称为usersig(一般为开发者获取)。
再线状态
用户在服务端的服务状态,用来标记确定消息投递方式。IMSDK登录后与服务器直接连接时,标识为online;当IMSDK切换到后台或与服务端心跳断开连接时,标识为pushoffline;当用户在IMSDK中登出,或被服务端主动下线,标识为offline。
消息方式
在线消息,指用户处于online状态时接收到的消息;离线消息,指IMSDK在非offline状态时收到的消息。离线推送使用户在pushoffline状态时通过推送的方式触达的通知。
聊天场景
聊天场景只要分为单聊、群聊与聊天室三种。单聊即收发消息的都是用户,群聊收发消息的是群组,单聊与群组都有在线消息和离线消息也支持通过推送方式通知,聊天室是一种广播形式投送消息的大群,只有在线消息,不进入的时候不能收消息,也没有离线推送通知。
消息类型
消息类型是指不同编码/解码方式的消息,通常分为文本、通知、多媒体、文件、自定义等类型,IM系统中也可以增加更多的消息类型,例如定位、图片、语音、视频、提醒各种类型的消息。
好友关系
用户与用户之间的关系就是好友关系,通常有好友关系和黑名单两种,好友关系并不是IM系统必要的组程部分,可以通过业务层自己控制,例如生成单向好友、双向好友、星标好友等。
用户资料
用户资料是用来标记用户、群组、聊天室等对象法人资料,例如:头像、昵称、介绍信息、日期、位置等等。
离线推送
离线推终是一种通知方式,主要适用于移动端,通常有系统厂商或第三方提供。在iOS端上只能使用APNS,在Android可以使用厂商或第三方提供方的推送。
常见消息场景
论坛 | 单聊 | 群聊 | 聊天室 | |
---|---|---|---|---|
参与人数 | 众多 | 少 | 有限 | 众多 |
即时性 | 弱 | 高 | 高 | 高 |
离线消息关注度 | 弱 | 高 | 高 | 弱 |
历史消息关注度 | 弱 | 高 | 高 | 弱 |
主体 | 板块/话题 | 好友 | 群组 | 房间/频道 |
SDK集成方式
IM基本流程
1、初始化:IM需要建立网络连接,客户端与服务端需要建立长连接,本地存储数据等异步操作。
2、添加监听:网络、资料、好友、群组、消息变化,需要上层知道。
3、登录:用户名账号信息登录,提交服务端验证,通过后客户端开始同步信息,本地没有的消息服务端有的拉到本地。客户端增加一条信息,服务端也要同步增加一条,此过程为发消息。服务端增加一条消息,客户端也需要增加一条,此过程为收消息。
4、从服务器同步数据:
增量同步:本地已经有一部分数据,需要将服务端有本地没有的数据拉去下来。
全量同步:第一次登录本地没有数据,需要从服务器全部同步下来。
5、业务主循环:IM聊天过程,消息管理、好友关系、群组管理、资料管理。
6、异常处理:程序运行时的cash处理。
7、登出、注销登录:告诉服务端不需要服务,释放资源。
IM SDK登录基本过程
1、 先到SSO接入节点,进行单点登录。
2、返回下一个连接节点的服务器节点数据。
3、收到服务器节点后IM SDK会将identifier usersig提交到TLS节点进行鉴权。
4、TLS节点鉴权成功后会返回tinyin及token的东西。
5、拿到tinyin及token之后即可提交到对应的服务获取对应资源。
IM 消息基本过程(单聊、群聊)
带回执的消息发送,接入节点会根据服务器自动切换。
消息对象
消息是IM中最重要的部分,发送方构造的消息通过服务端投递到接收方的过程中,根据IM对象及其属性进行相应的解析。
常见的消息基本属性如下(不同IM系统字段名不同,基本都有)。
基本属性 | 说明 | 基本属性 | 说明 |
---|---|---|---|
sender | 发送方标识(标记会话) | reciever | 接收方标识(标记会话) |
messageType | 消息类型 | UUID | 消息标识(去重) |
timestamp | 消息时间戳(排序) | isRead | 已读标记 |
isSelf | 是否自己发出(展示) | priority | 消息优先级 |
isPush | 是否允许推送 | pushDescription | 推送描述 |
messageContent | 消息内容 | extention | 消息扩展 |
自定义消息
对于IM SDK 自带的几种消息类型,可以通过IM SDK 直接构造,对于不能满足开发者需求的消息类型,卡发着可通过自定义消息进行处理,例如:红包、直播间礼物、点赞、阅后即焚等。
消息会话与未读数
- 消息会话用来区分不同的单聊、群聊或聊天室,一般在客户端上构造会话列表,通过用户ID,群组ID或聊天室ID来标记。
- 除聊天室这种只有在线消息的聊天场景外,单聊和群聊都支持离线消息,当用户不在线时,未接收的消息会标识为未读。
- 消息客户端存在回执机制(已读上报),客户端在接受到消息时,需要向服务端发送一条回执,确认已经收到消息,若客户端未发送回执或服务端未收到回执,则服务端会认为该消息未被接收,状态一直为未读。
- 若某个会话中客户端同时收到多条未读消息,则上报是只对该回话中最新的消息进行已读上报。
IM 推送
UI处理与TUIKit
SDK通过API供开发者使用,被开发者集成到其App业务之中,SDK功能专一,不会侵入开发者App的业务逻辑,更不会直接操作App的UI绘制。
由于IM的UI实现先对复杂,云通讯提供了一套开源的UI组件TUIKit,开发者可选择使用,减少UI开发量。