浏览 SDKs · uni-app / uni-app x
SDKsuni-app商业版

修改消息

商业版修改消息,并处理 modified/edited raw 事件。

复制

modifyMessage() 商业版 用于修改一条已存在消息的内容。它和批量删除消息撤回消息不同:删除影响当前账号可见性,撤回让会话成员看到撤回态,修改则替换消息内容并同步给其他客户端。

修改消息内容

参数说明

参数类型是否必填说明
conversationIDstring消息所属的会话 ID。
messageOpenIMMessageItem修改后的完整消息对象;必须保留原 clientMsgID
import {
  modifyMessage,
  off,
  onMessageEdited,
  onMessageModified,
} from '@/uni_modules/unix-openim-sdk'

const modifiedSubscription = onMessageModified((payload) => refreshModifiedMessage(payload))
const editedSubscription = onMessageEdited((payload) => refreshModifiedMessage(payload))

const result = await modifyMessage({
  conversationID,
  message: buildEditedMessage(message, editedText),
})
if (result?.message != null) replaceMessage(result.message)

function removeMessageModifiedListeners() {
  off(modifiedSubscription)
  off(editedSubscription)
}

该方法不是局部更新。应从当前消息复制并只修改目标内容,保留 clientMsgID 和其他消息字段。允许修改的发送者、时间窗口和消息类型由 OpenIMServer 校验;失败时不要只在本地保留编辑结果。

返回结果

Promise 成功后,result?.message 是服务端确认的修改后 OpenIMMessageItem | null。调用端可先用返回值替换当前列表中的同 clientMsgID 消息;这不代表所有端界面已经更新。

监听消息修改

onMessageModifiedonMessageEdited 都属于商业版,参数是 raw JSON 字符串。部署可能按版本使用其中一种,若同时监听必须按稳定消息 ID 和版本去重。先验证 JSON,再查询或替换消息;不要记录完整正文。组件卸载、退出登录或切换账号时调用 removeMessageModifiedListeners(),多端编辑按服务端最终版本解决冲突。

相关页面