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消息内容数据格式约定
这里约定格式的消息内容使用的位置:
- 调用NIM SDK createTextMessage时,传入的text字符串内容符合以下约定的格式
- 获取IMMessage的content字段的值,这个字符串的内容符合以下约定的格式
- 如果出现了不属于以下枚举的消息类型的,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 }"
}