Skip to content

IM模块: 流程&Data约定文档

1、基础约定

1.云信NIMSDK文档地址

NIM SDK版本V9

文档地址:文档

请在页面左上角选择对应平台的文档进入查看

2.SDK集成配置

AppKey请和对接人沟通获取

3.使用的SDK API列表

Function Desc
初始化 初始化NIM SDK
登录 登录NIM服务
获取用户资料 用于获取在NIM本地或云端存储的用户头像昵称等信息,给UI层展示用
获取消息未读数 用于显示未读消息数量
清除消息未读数 用于清除未读消息数量
获取指定数量的最近会话列表 用于消息页面获取最近联系的人,最多获取100个,注意只获取本地联系人不获取云端联系人,且只获取P2P会话
监听最近会话相关事件 用于监听最近联系人变动后更新UI,只监听P2P会话的变动
删除会话 用于删除最近联系人
获取历史消息 获取和指定联系人的历史消息,注意只获取本地消息不获取云端消息
P2P消息收发 App内所有类型IM消息,都使用NIM SDK内的文本消息实现
消息的发送与接收,也只会有文本消息类型
以文本消息的数据结构来进行不同消息类型的区分和显示
数据约定见下文
聊天室消息收发 App内所有类型IM消息,都使用NIM SDK内的文本消息实现
消息的发送与接收,也只会有文本消息类型
以文本消息的数据结构来进行不同消息类型的区分和显示
数据约定见下文

2、P2P消息流程概述

Phase Steps
初始化 初始化SDK->登录SDK->注册最近会话监听->新P2P消息监听、新聊天室消息监听
获取最近会话 获取最近会话列表并在UI上展示(同时显示未读数等)->根据会话监听的回调实时更改UI
打开某个最近会话 获取这个会话的本地历史消息->监听新消息回调->(optional)发送新消息
消息全部已读 -
清空最近联系人 -

3、P2P消息内容数据格式约定

这里约定格式的消息内容使用的位置:

  1. 调用NIM SDK createTextMessage时,传入的text字符串内容符合以下约定的格式
  2. 获取IMMessage的content字段的值,这个字符串的内容符合以下约定的格式
  3. 如果出现了不属于以下枚举的消息类型的,UI上不显示这条消息即可

1.文本消息

{
  "messageType": 0,// 发出文本消息时,固定传0,如果是收到了messageType=18的消息,也认为是文本消息
  "content": "文本消息内容"
}

注意: 因为文本消息需要自动翻译,文本消息发送出去之前,要在NIMMessage里增加拓展字段,传递发送消息方的设备语言代码,API参考如下

iOS:

extension NIMMessage {
    func addRemoteExt(withKey key: String, value: Any) {
        if remoteExt == nil {
          remoteExt = [key: value]
        } else {
          remoteExt![key] = value
        }
  }
}
imMsg.addRemoteExt(withKey: "language", value: "zh")

Android:

val map = nimMessage.remoteExtension ?: hashMapOf()
map["language"] = "zh"
imMessage.remoteExtension = map

Flutter:

var remoteExtension = nimMsg.remoteExtension ?? {};
remoteExtension.addAll({
    "language": "zh"
});
nimMsg.remoteExtension = remoteExtension;

2.图片消息

{
  "messageType": 2,
  "content": "图片公网地址:https://xxxxxxx.jpg",
  "size": "图片尺寸,格式如'100,100',宽在前高在后,用英文,隔开"
}

3.礼物消息

注意: 礼物消息客户端不主动发送,当产生了1V1的送礼请求后,Server会自动以[送礼者]的名义发送礼物类型的IM消息给双方

{
  "messageType": 6,
  "content": "{\"giftId\": 123,\"name\": \"Lolipop\",\"num\": 1}"
}

4.提示消息

{
  "messageType": 10,
  "content": "提示消息内容"
}

5.Post分享消息

{
  "messageType": 1001,
  "content": "{ // See PostList # Post }"
}

6.直播间分享消息

{
  "messageType": 1002,
  "content": "{ // See StreamPollingData # RoomInfo }"
}