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

修改消息

使用 UniApp SDK 修改已发送消息的内容并同步结果。

复制

修改消息属于商业版能力。它会替换已存在消息的内容并同步给其他客户端,与只影响当前账号可见性的删除、以及将消息变为撤回提示的撤回不同。

import {
  OpenIMMessageItem,
  modifyMessage,
} from '@/uni_modules/unix-openim-sdk'

const updatedMessage = JSON.parse<OpenIMMessageItem>(
  JSON.stringify(message),
)
const textElem = updatedMessage.textElem
if (textElem == null) return

textElem.content = editedText
updatedMessage.textElem = textElem

const result = await modifyMessage({
  conversationID,
  message: updatedMessage,
})

const modifiedMessage = result?.message
if (modifiedMessage != null) {
  replaceMessage(conversationID, modifiedMessage)
}
参数类型是否必填说明
conversationIDstring消息所属的会话 ID。
messageOpenIMMessageItem修改后的完整消息对象;必须保留原 clientMsgID 和其他必要字段。

该方法不是局部更新。应从当前消息创建独立副本,只替换与 contentType 对应的目标内容。示例使用 JSON.parse<OpenIMMessageItem>() 恢复声明类型,避免把 TypeScript 对象展开语法直接用于 UTS。允许修改的发送者、时间窗口和消息类型由 OpenIMServer 校验;调用失败时不要只在本地保留编辑结果。

Promise 成功后返回 OpenIMModifyMessageResult | null,修改后的消息位于 message,该字段仍可能为空。非空时可按 conversationID:clientMsgID 替换当前列表记录。Promise 成功不表示所有客户端已经更新。

接收消息修改通知

onMessageModified() 的载荷类型为 string,SDK 没有公开字符串的内部结构。将事件作为消息内容可能变化的刷新信号,并重新查询正在显示的消息,不依赖未公开的对象字段。

import { off, onMessageModified } from '@/uni_modules/unix-openim-sdk'

const handleMessageModified = (_payload: string) => {
  reloadVisibleMessages()
}

const messageModifiedSubscription =
  onMessageModified(handleMessageModified)

// 页面卸载或账号切换时:
off(messageModifiedSubscription)

完整查询可以使用按 ID 查找消息或重新加载当前会话历史。