iOS音视频接入- IM及时通讯基本原理

2020-10-20 17:58:15 浏览数 (1)

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集成方式

SDK集成方式SDK集成方式

IM基本流程

IM基本流程IM基本流程

1、初始化:IM需要建立网络连接,客户端与服务端需要建立长连接,本地存储数据等异步操作。

2、添加监听:网络、资料、好友、群组、消息变化,需要上层知道。

3、登录:用户名账号信息登录,提交服务端验证,通过后客户端开始同步信息,本地没有的消息服务端有的拉到本地。客户端增加一条信息,服务端也要同步增加一条,此过程为发消息。服务端增加一条消息,客户端也需要增加一条,此过程为收消息。

4、从服务器同步数据:

增量同步:本地已经有一部分数据,需要将服务端有本地没有的数据拉去下来。

全量同步:第一次登录本地没有数据,需要从服务器全部同步下来。

5、业务主循环:IM聊天过程,消息管理、好友关系、群组管理、资料管理。

6、异常处理:程序运行时的cash处理。

7、登出、注销登录:告诉服务端不需要服务,释放资源。

IM SDK登录基本过程

IM SDK登录过程IM SDK登录过程

1、 先到SSO接入节点,进行单点登录。

2、返回下一个连接节点的服务器节点数据。

3、收到服务器节点后IM SDK会将identifier usersig提交到TLS节点进行鉴权。

4、TLS节点鉴权成功后会返回tinyin及token的东西。

5、拿到tinyin及token之后即可提交到对应的服务获取对应资源。

IM 消息基本过程(单聊、群聊)

带回执的消息发送,接入节点会根据服务器自动切换。

IM 消息过程IM 消息过程

消息对象

消息是IM中最重要的部分,发送方构造的消息通过服务端投递到接收方的过程中,根据IM对象及其属性进行相应的解析。

常见的消息基本属性如下(不同IM系统字段名不同,基本都有)。

基本属性

说明

基本属性

说明

sender

发送方标识(标记会话)

reciever

接收方标识(标记会话)

messageType

消息类型

UUID

消息标识(去重)

timestamp

消息时间戳(排序)

isRead

已读标记

isSelf

是否自己发出(展示)

priority

消息优先级

isPush

是否允许推送

pushDescription

推送描述

messageContent

消息内容

extention

消息扩展

自定义消息

对于IM SDK 自带的几种消息类型,可以通过IM SDK 直接构造,对于不能满足开发者需求的消息类型,卡发着可通过自定义消息进行处理,例如:红包、直播间礼物、点赞、阅后即焚等。

自定义消息使用场景自定义消息使用场景

消息会话与未读数

消息会话与未读数消息会话与未读数
  1. 消息会话用来区分不同的单聊、群聊或聊天室,一般在客户端上构造会话列表,通过用户ID,群组ID或聊天室ID来标记。
  2. 除聊天室这种只有在线消息的聊天场景外,单聊和群聊都支持离线消息,当用户不在线时,未接收的消息会标识为未读。
  3. 消息客户端存在回执机制(已读上报),客户端在接受到消息时,需要向服务端发送一条回执,确认已经收到消息,若客户端未发送回执或服务端未收到回执,则服务端会认为该消息未被接收,状态一直为未读。
  4. 若某个会话中客户端同时收到多条未读消息,则上报是只对该回话中最新的消息进行已读上报。

IM 推送

UI处理与TUIKit

SDK通过API供开发者使用,被开发者集成到其App业务之中,SDK功能专一,不会侵入开发者App的业务逻辑,更不会直接操作App的UI绘制。

由于IM的UI实现先对复杂,云通讯提供了一套开源的UI组件TUIKit,开发者可选择使用,减少UI开发量。

0 人点赞