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

消息概览

了解消息的创建、发送、接收、查询和状态同步边界。

复制

UniApp SDK 使用 OpenIMMessageItem 表示一条消息。发送消息分为两个阶段:先根据内容创建待发送对象,再将该对象发送到单聊用户或群组。创建方法不会发送消息;发送方法的 Promise 成功也不等于其他客户端已经收到消息。

消息列表应使用所属会话和 clientMsgID 定位一条消息。conversationID 来自当前会话、查询条件、搜索结果或事件上下文,不是 OpenIMMessageItem 自身字段。

消息处理流程

阶段主要操作说明
创建调用对应的 create*Message() 方法返回 OpenIMMessageItemnull,不会发送或触发新消息事件。
发送调用 sendMessage()sendMessageNotOss()单聊填写 recvID,群聊填写 groupID;另一个目标字段传空字符串。
接收监听新消息事件确定目标会话后按 clientMsgID 合并,重复事件不应插入第二条消息。
查询加载历史、搜索或按 ID 定位返回调用时可读取到的消息,不触发新消息事件。
更新删除、撤回、修改、置顶或上报已读分别处理 Promise 结果、相关事件和必要的重新查询。

本地图片、音频、视频和文件消息由 sendMessage() 进入 SDK 上传与发送流程。资源已由业务上传并具有远端 URL 时,先创建 URL 型消息,再使用 sendMessageNotOss(),避免重复上传。

常用消息字段

字段类型说明
clientMsgIDstringnull客户端消息 ID,用于列表去重和状态更新;创建结果中应检查其是否存在。
serverMsgIDstringnull服务端消息 ID;待发送或发送失败时可能为空。
sessionTypeOpenIMSessionType会话类型,例如单聊或群聊。
sendIDstringnull发送者用户 ID。
recvIDstringnull单聊接收方用户 ID;群聊消息通常为空。
groupIDstringnull群聊对应的群组 ID;单聊消息通常为空。
msgFromnumber消息来源类型。
contentTypeOpenIMMessageType消息内容类型,决定应读取哪个内容字段。
createTimenumber消息对象创建时间,Unix 毫秒时间戳。
sendTimenumber消息发送时间,Unix 毫秒时间戳。
seqnumber服务端消息序号;未发送成功时可能没有可用序号。
senderPlatformIDOpenIMPlatform发送消息的客户端平台。
senderNicknamestringnull消息中记录的发送者昵称。
senderFaceUrlstringnull消息中记录的发送者头像地址。
statusOpenIMMessageStatus消息当前发送状态。
isReadboolean查询或接收该消息时记录的已读状态。
offlinePushOpenIMOfflinePushnull发送时使用的离线推送配置。
contentstringnullSDK 保留的序列化内容;渲染时优先读取具体内容字段。
attachedInfostringnullSDK 附加信息,只按已确认的业务约定解析。
exstringnull随消息同步到其他客户端的扩展字符串。
localExstringnull只保存在当前设备的扩展字符串。

消息正文位于与 contentType 对应的内容字段中:

消息内容对应字段
文本textElem
图片、音频、视频、文件pictureElemsoundElemvideoElemfileElem
@ 消息、回复消息atTextElemquoteElem
合并转发、自定义消息mergeElemcustomElem
名片、位置、表情cardElemlocationElemfaceElem
高级文本、输入状态advancedTextElemtypingElem
通知及附加状态notificationElemattachedInfoElem

OpenIMMessageTypeUserCommandAddedOpenIMMessageTypeUserCommandDeletedOpenIMMessageTypeUserCommandUpdated 也是 OpenIMMessageType 常量,用于识别 UserCommand 业务通知。它们仍通过消息的 contentType 判断,不是独立的事件名称。

不要根据展示文本、数组位置或当前分页长度判断消息身份。消息状态通常按 conversationID:clientMsgID 合并;只影响当前设备展示的状态应写入 localEx,需要同步给会话成员的业务数据才写入消息内容或 ex

当前消息入口

创建消息对象和纯查询操作只返回本次调用结果,不会触发共享消息事件。对于会改变状态的操作,Promise 成功、事件到达和重新查询最新数据是三个独立阶段。