浏览 SDKs · React Native
平台
SDKsReact Native

发送消息

OpenIM React Native SDK 发送消息。

复制

将由消息创建接口生成的 MessageItem 发送至目标单聊会话或群聊会话中。单聊需传入接收方用户 ID recvID,群聊需传入目标群组 ID groupID。

如果发送的是通过本地文件路径创建的图片、音频、视频或文件等媒体消息,SDK 会在发送过程中自动执行资源上传;若媒体资源已提前上传至自己的服务器或对象存储,并已通过 URL 创建消息,请使用发送已上传的媒体消息。

const sentMessage = await OpenIMSDK.sendMessage({
  recvID: receiverUserID,
  groupID: '',
  message,
});

参数说明

参数类型必填含义
recvIDstring条件必填单聊接收方的用户 ID;群聊时传入空字符串 ""。
groupIDstring条件必填目标群组 ID;单聊时传入空字符串 ""。
messageMessageItem是待发送的消息对象,由消息创建接口生成。
offlinePushInfoOfflinePush否自定义离线推送标题、内容与透传参数配置。
isOnlineOnlyboolean否是否仅向当前在线的客户端投递;为 true 时不计入服务端离线历史存储。

返回结果

调用成功后返回发送成功的 MessageItem。返回对象中会包含由服务端确定的 serverMsgID、sendTime 以及更新后的消息状态 status。

状态变更与三阶段划分

  1. Promise 成功:仅代表消息已经过 SDK 本地数据库入库,并成功投递至 OpenIM 服务端接收队列,不代表对端用户已经阅读或已接收。
  2. 事件到达:在发送富媒体资源过程中,SDK 会持续触发 SendMessageProgress 上报上传进度;消息送达或被对端阅读时,会分别触发新消息与已读回执事件。
  3. 重新查询校准:如果遇到弱网断连或超时未知状态,可在网络恢复后通过加载历史消息重新校准该会话的消息发送状态。

客户端在本地列表维护消息状态时,必须使用 clientMsgID 作为唯一合并标识,将本地处于“发送中”的消息节点状态无缝更新为“发送成功”。

监听媒体消息发送进度

发送大文件、高清视频或图片等需要上传的文件时,可监听 SendMessageProgress 事件获取实时上传进度:

interface SendMessageProgressPayload {
  clientMsgID: string;
  progress: number;
}

const handleSendMessageProgress = ({ clientMsgID, progress }: SendMessageProgressPayload) => {
  // 根据 clientMsgID 匹配本地待发送消息,并更新界面上的上传百分比 progress
};

// 设置监听
OpenIMSDK.on(OpenIMEvent.SendMessageProgress, handleSendMessageProgress);

// 取消监听
OpenIMSDK.off(OpenIMEvent.SendMessageProgress, handleSendMessageProgress);

组件销毁、退出登录或切换账号时,取消该监听。