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

发送消息

将待发送消息发送给单聊用户或群组。

复制

发送消息接口用于发送由各消息创建方法返回的待发送对象 OpenIMMessageItem。单聊只填写 recvID,群聊只填写 groupID,另一目标字段传空字符串。

参数说明

参数类型是否必填说明
messageOpenIMMessageItem是非空的待发送消息对象。
recvIDstring条件必填单聊时填写接收方用户 ID;群聊时传空字符串。
groupIDstring条件必填群聊时填写目标群组 ID;单聊时传空字符串。
offlinePushInfoOpenIMOfflinePush否离线推送标题、描述和平台配置。
isOnlineOnlyboolean否是否仅向在线客户端投递;仅在线消息不进入本地历史。
import { sendMessage } from '@/uni_modules/unix-openim-sdk'

const sentMessage = await sendMessage({
  message: message,
  recvID: receiverUserID,
  groupID: '',
  offlinePushInfo: null,
  isOnlineOnly: false,
})

if (sentMessage.clientMsgID != null) {
  replacePendingMessage(sentMessage.clientMsgID, sentMessage)
}

Promise 成功后返回发送结果中的 OpenIMMessageItem。发送端应按 clientMsgID 替换本地待发送项;其他客户端收到新消息事件是另一个阶段,不能由本次 Promise 成功直接推断。

监听上传进度

发送本地图片、音频、视频或文件时,可以监听消息发送进度事件来实时更新对应消息的上传进度百分比。事件回调载荷包含 clientMsgID 和 progress,应按 clientMsgID 更新对应消息,不要按列表下标关联进度。

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

const handleSendProgress = (
  progress: OpenIMSendMessageProgressEvent | null,
) => {
  if (progress == null) return
  updateMessageProgress(progress.clientMsgID, progress.progress)
}

const progressSubscription = onSendMessageProgress(handleSendProgress)

function removeSendProgressListener() {
  off(progressSubscription)
}

组件卸载、退出登录或切换账号时应调用清理函数取消事件监听。进度到达 100% 仅表示媒体上传完毕,最终消息是否发送成功仍以发送接口的 Promise 结果与消息状态为准。