云通信集成

最近更新时间:2019-04-08 16:52:36

整体架构

初步实施

在真正开始集成 IMSDK 之前,您必须完成一些接入准备工作,包括:应用接入和用户体系集成。在完成这两步之后,您需要将 SDK 集成到您的 App 中,然后才能开始调用直播聊天室相关的 SDK 接口。

  1. 应用接入 参见:应用接入指引
  2. 用户体系集成
    云通信 IM 提供独立模式和托管模式两种用户体系集成。
    • 如果您的 App 自主维护用户的注册、用户身份的验证,则应当使用 独立模式
    • 如果您只是想快速开发一个 App 原型,云通信 IM 可以为您提供一套符合业界通用安全标准的用户体系,用户的注册、用户身份的验证将全部由云通信 IM 提供,此时应当选用 托管模式
  3. 客户端集成
    客户端集成是将 IMSDK 集成到您的 App 中,参见: Android 客户端集成iOS 客户端集成Windows C++ 客户端集成

完整实施

创建直播聊天室

通过 IMSDK 创建直播聊天室(AVChatRoom),参见: Android 创建群组iOS 创建群组Windows C++ 创建群组
通过 REST API 创建直播聊天室,参见: 创建群组

申请加入聊天室

通过 IMSDK 申请加入聊天室,参见: Android 申请加群iOS 申请加群Windows C++ 申请加群

注意:
用户加入 AVChatRoom 后,如果发生异常登出(logout)或者 App 进程崩溃(crash)的情况,在重新上线(login)或者重启 App 进程后,需要再次调用申请加群才能继续在原来的 AVChatRoom 中收发消息。

收发消息

通过 IMSDK 收发消息,参见: Android 消息收发iOS 消息收发Windows C++ 消息收发
通过 REST API 发送消息,参见:在群组中发送普通消息

特殊需求实施

聊天室成员进出通知

当聊天室中有用户进入或者离开时,云通信 IM 后台会下发成员进出通知。
新用户入群通知参见: Android 用户入群通知iOS 用户入群通知Windows C++ 用户入群通知
用户退群通知参见: Android 用户退群通知iOS 用户退群通知Windows C++ 用户退群通知
云通信 IM 后台会对用户进出聊天室的消息进行频率控制,具体参见 消息优先级与频率控制

获取观看直播的用户列表

直播 App 有时需要展示当前用户列表。单个 AVChatRoom 本身支持的用户数量无上限,但是只能够获取到部分群成员列表,最多为 300 个成员。
通过 IMSDK 获取群成员列表,参见: Android 获取群成员列表iOS 获取群成员列表Windows C++ 获取群成员列表

获取观看直播的人数

AVChatRoom 的人数统计并不是实时的,有 1 分钟左右的时延。
IMSDK 获取当前群人数参见:Android 获取群组资料iOS 获取群组资料Windows C++ 获取群组资料
通过 REST API 获取当前群人数参见:获取群组资料(回包中的 MemberNum 字段)。

注意:

  • AVChatRoom 针对大规模直播场景,在人数统计上是以 “ 有收发消息的动作 ” 来衡量,统计结果存在时延且不完全准确。在人数较少的场景(比如只有几十人)下,统计的偏差会比较明显。
  • 通过 H5 匿名接收 IM 消息的用户也会被计入聊天室人数中。但由于这些用户没有登录,不可能在用户列表中得到展示。

在聊天室中下发自定义消息

云通信 IM 的消息原生支持文本、图片、语音、表情等。如果 App 存在一些特殊的消息需求(例如点赞消息、红包消息等),可以通过云通信 IM 的自定义消息实现。
通过 IMSDK 发送自定义消息,参见: Android 发送自定义消息iOS 发送自定义消息Windows C++ 发送自定义消息
通过 REST API 发送自定义消息,参见:在群组中发送普通消息

注意:

  • 如果需要使用云通信 IM 的脏字过滤功能,请注意自定义消息的结构设计,具体参考 敏感词(脏字)过滤
  • 为方便调试,建议 App 使用 JSON 来组织自定义字段。不建议使用二进制数据。

消息优先级与频率控制

当 AVChatRoom 中的人数较多时,发消息的用户可能会非常多,导致一秒之内产生的消息量非常大。消息频率过高,会对云通信 IM 服务后台和 App 的渲染造成压力,也会加大客户端流量。此外,如果 App 界面的消息滚动速率过快,可能导致用户无法看清消息。
基于上述考虑,云通信 IM 会对单个 AVChatRoom 中的消息进行频率控制。具体可以参见:消息优先级与频率控制

聊天室禁言与全局禁言

某些用户可能会在聊天室中发送广告或者其它不良信息,此时可以考虑将该用户禁言。禁言分为两个维度:

  • 群组维度的禁言:用户在指定群内无法发言,即使退群再加群也不例外。群主和管理员具备此权限;
  • 全局维度的禁言:用户在所有群组中都不能发言,同时也不能发送单聊消息。仅 App 管理员具备该权限。

通过 IMSDK 实现群内禁言,参见: Android 对群成员进行禁言iOS 对群成员进行禁言Windows C++ 对群成员进行禁言
通过 REST API 实现群内禁言,参见: 批量禁言和取消禁言
通过 REST API 获取群内被禁言用户的列表,参见:获取群组被禁言用户列表
通过 REST API 设置全局禁言,参见:设置全局禁言
通过 REST API 查询全局禁言,参见:查询全局禁言

敏感词(脏字)过滤

所谓脏字过滤,是指 App 可以在云通信 IM 后台配置一批敏感词,如果云通信 IM 后台在用户发送的消息中检测到这些敏感词,则拒绝下发该消息,并向发送者返回错误码 80001。
脏字的增删查改参见: REST API:查询APP自定义脏字添加APP自定义脏字删除APP自定义脏字

注意:

  • 云通信 IM 已经默认配置了政治类、色情类的脏字,能够满足这两方面的大多数过滤需求,App 只需要配置业务场景相关的脏字即可。例如,电商类 App 只需要配置“假货”、“刷单”等业务类脏字即可。
  • 默认情况下,云通信 IM 后台只会对消息格式中的文本消息进行脏字过滤(TIMTextElem,参见 消息格式描述),如果 App 使用自定义消息格式(TIMCustomElem,参见 消息格式描述),云通信 IM 后台无法进行过滤。因此,App 最好在设计之初就确保将需要进行脏字过滤的文本放到 TIMTextElem 中。对于 App 已经使用了自定义消息格式,且已经上线,可以联系云通信 IM 客服,将消息格式提供给云通信 IM 的技术人员。云通信 IM 后台可以据此解析 App 的自定义消息中的文本信息,并进行脏字过滤。

其他消息控制策略

除了禁言与脏字过滤之外,云通信 IM 还提供了其他消息控制策略,例如群内发言之前回调。另外,如果您的控制策略较为特殊,可以联系云通信 IM 客服提出需求,云通信 IM 可以为您定制开发消息控制策略。具体参见: 第三方回调简介第三方回调接入指引群内发言之前回调

在消息中携带用户身份信息

群消息在下发给客户端时,除了会携带消息内容本身,还会携带消息发送者的信息,默认会携带如下字段:发送者的昵称、发送者的头像、发送者在群内的群名片。如果您的 App 在云通信 IM 中配置了 用户维度的自定义字段群维度的自定义字段(AVChatRoom 不支持群成员维度的自定义字段),亦可在消息中携带这些信息。默认下不会携带自定义字段,如有需要请根据 工单模板提交工单进行处理。

注意:

如果要在消息中携带发送者昵称、头像,必须将这两个信息导入云通信 IM 的用户资料。

通过 App 设置设置用户资料,参见: Android 用户资料iOS 用户资料Windows C++ 用户资料Web 用户资料
通过 REST API 查询/设置用户资料,参见: 拉取用户资料设置用户资料
除此之外,使用独立模式的 App 还可以在通过 REST API 导入账号的同时设置用户资料,参见: 独立模式账号同步

客户端压力测试

如果要对客户端在 AVChatRoom 下的消息收发性能进行测试,可参考 压测工具

其他

全员消息广播

直播场景下,高价值礼物送出时,App 后台有可能会需要向 全体在线用户 下发消息,俗称“大喇叭消息”。云通信 IM 为此场景专门提供了 在线成员广播大群,该方案也支持非登录在线用户接收广播消息。

面向单个/一批用户的系统通知

如果 App 后台需要向单个/一批用户发送系统通知,可以参考如下两个接口:发送消息批量发单聊消息

App 接收消息

IMSDK 接收消息都是通过统一回调接口 onNewMessage 返回,通过 onNewMessage 回调获得消息后,能根据消息获取相应的会话。具体参见:Android 新消息通知iOS 新消息通知Windows 新消息通知WebSDK 初始化新消息回调