消息回复实现方案
更新时间: 2025/05/21 11:29:20
IM UIKit 目前通过 Thread 消息 以实现简单的类微信的消息回复功能。
前提条件
-
在 网易云信控制台 首页 应用管理 中选择应用,然后单击 IM 即时通讯 下的 功能配置 按钮进入功能配置页。
-
在顶部选择 全局功能 页签,开启 会话消息回复 功能。
实现原理
消息回复指,引用收到的某条消息并进行针对性的回复,形成以该消息为根消息的 Thread 树状结构。通过该功能,用户可针对某一条消息进行提问、反馈或补充相关背景信息,且不会对会话造成干扰。
Thread 消息树状结构示例见下图:
graph TD
C("消息 C1")--回复-->B("消息 B1")
D("消息 C2")--回复-->B("消息 B1")
B("消息 B1")--回复-->A("消息 A")
E("消息 B2")--回复-->A
F("消息 B3")--回复-->A
A
上图中:
- 消息 A 是消息 B 的 父消息,消息 B1 是消息 C 的 父消息
- 消息 C 是消息 B1 的 子消息
- 消息 A 是消息 B 和消息 C 的 根消息
- 消息 A、B、C 统称为 Threaded Message(串联起来的消息)
一条 Threaded Message 必须有一条父消息或至少一条子消息。如果一条消息既没有父消息,也没有子消息,则为普通消息。
实现流程
发送方
- 调用
replyMessage
方法回复消息。
dart/// [message]: 需要发送的消息体
/// [replyMsg]: 被回复的消息,可以是任何类型消息
/// [params]: 参数,同 sendMessage 参数一样
NimCore.instance.messageService.replyMessage(
msg: message, replyMsg: replyMsg, params: params)
.then((result) {
//todo 回复消息成功
}
});
- 调用上述回复接口后,会触发
onSendMessage
回调,可以在此回调中将消息上屏。
dartNimCore.instance.messageService.onSendMessage.listen((msg) {
//上屏操作
});
接收方
接收回复消息与接收普通消息相同,都通过 onReceiveMessages
回调接收消息。
dartNimCore.instance.messageService.onReceiveMessages.listen((event) {
//处理接收到的消息
});
消息渲染
无论是发送方还是接收方,在渲染消息时,一般都需要渲染被回复的消息。您可以在上屏时根据消息中的 threadReply
字段获取被回复消息的内容,然后进行渲染。
dart//获取被回复的消息,其中 Message 是待上屏的消息
if(message.threadReply != null){
replyMsg = (await NimCore.instance.messageService
.getMessageListByRefers(messageRefers: [message.threadReply!]))
.data
?.first;
if(replyMsg != null){
//渲染被回复的消息
}
}
此文档是否对你有帮助?