跳到主要内容

消息修改

本文主要介绍如何使用 IMLib SDK 的消息修改功能。

提示

此功能从 1.10.0 版本开始支持。

修改消息简介

当您通过 IMLib SDK 成功发送消息后,如果发现消息内容有误,可以使用消息修改功能进行修正,修改后的内容会同步到接收者的消息记录中。

消息修改接口支持所有存储类型消息(文本、图片(包含 GIF)、语音(高清、普通)、视频、引用、文件、自定义消息)。

消息修改使用场景

  • 私聊场景中:用户消息发送成功后,对已发送的消息内容进行编辑。
  • 群聊场景中:用户发送消息成功后,对已发送的消息内容进行编辑,或群组管理员编辑指定消息内容。

添加修改消息监听

消息发送方修改消息后,消息接收方可以通过添加消息修改回调接口来监听消息修改事件,并进行相应处理。

消息接收方需要使用 addMessageModifiedListener 添加一个监听器,用于监听已接收的消息被修改的事件。当接收到的某条消息被修改时,会通过此监听器回调。

TypeScript
let listener: MessageModifiedListener = {
onMessageModified: (messages: List<Message>): void => {
// 接收到的某条消息被修改时,会触发此回调
},
onModifiedMessageSyncCompleted: (): void => {
// 离线的消息修改记录同步完成时,会触发此回调
}
}
IMEngine.getInstance().addMessageModifiedListener(listener);

移除消息修改监听

为了避免内存泄漏,请在不需要监听时调用 removeMessageModifiedListener 移除监听器。

TypeScript
IMEngine.getInstance().removeMessageModifiedListener(listener);

修改消息

您可以通过调用 modifyMessageWithParams 接口修改已发送的消息。

参数说明

参数类型说明
paramsIModifyMessageParams消息修改参数对象

IModifyMessageParams 属性说明

属性类型说明
messageUIdstring消息唯一 ID
messageContentMessageContent修改后的消息体

示例代码

TypeScript
let content = new TextMessage();
content.content = "content";

let params: IModifyMessageParams = {
messageUId: "messageUid",
messageContent: content,
}
IMEngine.getInstance().modifyMessageWithParams(params).then(result => {
// 修改消息完成
});

刷新引用消息

由于引用消息 ReferenceMessage 缓存了原文本消息的内容,修改原文本消息不会主动更新引用消息中缓存的消息内容。在显示引用消息时,您可以通过调用 refreshReferenceMessageWithParams 接口刷新引用消息,将引用消息中缓存的文本内容更新为最新的消息内容。

参数说明

参数类型说明
paramsIRefreshReferenceMessageParams刷新引用消息的参数
localMessageCallbackcallback本地结果回调,当被引用的消息在本地存在时触发
remoteMessageCallbackcallback远端结果回调,当被引用的消息需要从服务器获取时触发

返回值:返回一个 Promise<IAsyncResult>,用于处理接口调用失败的情况。

IRefreshReferenceMessageParams 属性说明

属性类型说明
conversationIdentifierConversationIdentifier会话标识
messageUIdsArray<string>引用消息唯一 ID 数组,最多 20 个

MessageResult 属性说明

属性类型说明
messageUIdstring查询的消息 UID
messageMessage查询到的消息
codenumber错误码

示例代码

TypeScript
let conversationIdentifier = new ConversationIdentifier();
conversationIdentifier.conversationType = ConversationType.Private;
conversationIdentifier.targetId = "targetId";

let referenceMessageUidList = new Array<string>();
referenceMessageUidList.push("messageUid1");
referenceMessageUidList.push("messageUid2");

let params: IRefreshReferenceMessageParams = {
conversationIdentifier: conversationIdentifier,
messageUIds: referenceMessageUidList
}

IMEngine.getInstance().refreshReferenceMessageWithParams(params, (msg: Array<MessageResult>) => {
// 被引用消息在本地,刷新 UI
}, (msg: Array<MessageResult>) => {
// 被引用消息在服务端,刷新 UI
}).then(result => {
// 接口调用失败,错误处理
});