SDKsuni-app商业版
修改消息
商业版修改消息,并处理 modified/edited raw 事件。
modifyMessage() 商业版 用于修改一条已存在消息的内容。它和批量删除消息、撤回消息不同:删除影响当前账号可见性,撤回让会话成员看到撤回态,修改则替换消息内容并同步给其他客户端。
修改消息内容
参数说明
| 参数 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
conversationID | string | 是 | 消息所属的会话 ID。 |
message | OpenIMMessageItem | 是 | 修改后的完整消息对象;必须保留原 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 消息;这不代表所有端界面已经更新。
监听消息修改
onMessageModified 和 onMessageEdited 都属于商业版,参数是 raw JSON 字符串。部署可能按版本使用其中一种,若同时监听必须按稳定消息 ID 和版本去重。先验证 JSON,再查询或替换消息;不要记录完整正文。组件卸载、退出登录或切换账号时调用 removeMessageModifiedListeners(),多端编辑按服务端最终版本解决冲突。
相关页面
这个页面有帮助吗?