消息修改
本文主要介绍如何使用 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 接口修改已发送的消息。
参数说明
| 参数 | 类型 | 说明 |
|---|---|---|
params | IModifyMessageParams | 消息修改参数对象 |
IModifyMessageParams 属性说明
| 属性 | 类型 | 说明 |
|---|---|---|
messageUId | string | 消息唯一 ID |
messageContent | MessageContent | 修改后的消息体 |
示例代码
TypeScript
let content = new TextMessage();
content.content = "content";
let params: IModifyMessageParams = {
messageUId: "messageUid",
messageContent: content,
}
IMEngine.getInstance().modifyMessageWithParams(params).then(result => {
// 修改消息完成
});
刷新引用消息
由于引用消息 ReferenceMessage 缓存了原文本消息的内容,修改原文本消息不会主动更新引用消息中缓存的消息内容。在显示引用消息时,您可以通过调用 refreshReferenceMessageWithParams 接口刷新引用消息,将引用消息中缓存的文本内容更新为最新的消息内容。
参数说明
| 参数 | 类型 | 说明 |
|---|---|---|
params | IRefreshReferenceMessageParams | 刷新引用消息的参数 |
localMessageCallback | callback | 本地结果回调,当被引用的消息在本地存在时触发 |
remoteMessageCallback | callback | 远端结果回调,当被引用的消息需要从服务器获取时触发 |
返回值:返回一个 Promise<IAsyncResult>,用于处理接口调用失败的情况。
IRefreshReferenceMessageParams 属性说明
| 属性 | 类型 | 说明 |
|---|---|---|
conversationIdentifier | ConversationIdentifier | 会话标识 |
messageUIds | Array<string> | 引用消息唯一 ID 数组,最多 20 个 |
MessageResult 属性说明
| 属性 | 类型 | 说明 |
|---|---|---|
messageUId | string | 查询的消息 UID |
message | Message | 查询到的消息 |
code | number | 错误码 |
示例代码
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 => {
// 接口调用失败,错误处理
});