子区消息管理 Flutter
更新时间:2022-09-07
子区消息消息类型属于群聊消息类型,与普通群组消息的区别是需要添加 isChatThread
标记。本文介绍即时通讯 IM Flutter SDK 如何发送、接收以及撤回子区消息。
技术原理
即时通讯 IM Flutter SDK 提供 EMChatThreadManager
、EMMessage
和 EMChatThread
类,用于管理子区消息,支持你通过调用 API 在项目中实现如下功能:
- 发送子区消息
- 接收子区消息
- 撤回子区消息
- 获取子区消息
如下图所示,在客户端发送和接收消息的工作流程:
- 用户 A 发送一条消息到消息服务器;
- 对于子区消息,服务器投递给子区内其他每一个成员;
- 用户收到消息。
子区创建和查看如下图:
前提条件
实现方法
本节介绍如何使用即时通讯 IM Flutter SDK 提供的 API 实现上述功能。
发送子区消息
发送子区消息和发送群组消息的方法基本一致,详情请参考 发送消息。唯一不同的是,发送子区消息需要指定标记 isChatThreadMessage
为 true
。
示例代码如下:
// targetGroup 为群组 ID
EMMessage msg = EMMessage.createTxtSendMessage(
targetId: targetGroup,
content: content,
);
// 设置为群组消息
msg.chatType = ChatType.GroupChat;
// isChatThreadMessage: 是否是子区消息,这里设置为 `true`,即是子区消息
msg.isChatThreadMessage = true;
EMClient.getInstance.chatManager.sendMessage(msg);
接收子区消息
接收消息的具体逻辑,请参考接收消息,此处只介绍子区消息和其他消息的区别。
子区有新增消息时,子区所属群组的所有成员收到 EMChatThreadEventHandler#onChatThreadUpdated
事件,子区成员收到 EMChatEventHandler#onMessagesReceived
事件。
示例代码如下:
// 注册子区监听
EMClient.getInstance.chatThreadManager.addEventHandler(
"UNIQUE_HANDLER_ID",
EMChatThreadEventHandler(
onChatThreadUpdate: (event) {},
),
);
// 添加消息监听
EMClient.getInstance.chatManager.addEventHandler(
"UNIQUE_HANDLER_ID",
EMChatEventHandler(
onMessagesReceived: (messages) {},
),
);
// 移除子区监听
EMClient.getInstance.chatThreadManager.removeEventHandler("UNIQUE_HANDLER_ID");
// 移除消息监听
EMClient.getInstance.chatManager.removeEventHandler("UNIQUE_HANDLER_ID");
撤回子区消息
接收消息的具体逻辑,请参考撤回消息,此处只介绍子区消息和其他消息的区别。
子区有消息撤回时,子区所属群组的所有成员收到 EMChatThreadEventHandler#onChatThreadUpdated
事件,子区成员收到 EMChatEventHandler#onMessagesRecalled
事件。
示例代码如下:
// 注册子区监听
EMClient.getInstance.chatThreadManager.addEventHandler(
"UNIQUE_HANDLER_ID",
EMChatThreadEventHandler(
onChatThreadUpdate: (event) {},
),
);
// 添加消息监听
EMClient.getInstance.chatManager.addEventHandler(
"UNIQUE_HANDLER_ID",
EMChatEventHandler(
onMessagesRecalled: (messages) {},
),
);
// 移除子区监听
EMClient.getInstance.chatThreadManager.removeEventHandler("UNIQUE_HANDLER_ID");
// 移除消息监听
EMClient.getInstance.chatManager.removeEventHandler("UNIQUE_HANDLER_ID");
从服务器获取子区消息 (消息漫游)
从服务器获取子区消息,请参考 从服务器获取消息 (消息漫游)。