跳到主要内容
版本:5.X

接收消息

App 可监听 SDK 接收的消息,并进行相应的业务操作。

  • 建议在应用生命周期内注册消息监听。
  • 建议在应用生命周期结束时移除消息监听。

设置消息监听

调用 addEventListener 设置消息接收监听器。所有接收到的消息都会在此接口方法中回调。可在任意位置多次监听。

const Events = RongIMLib.Events
const listener = (evt) => {
console.log(evt.messages)
};
RongIMLib.addEventListener(Events.MESSAGES, listener)

上方示例的 listener 中返回 IMessageEvent 对象,其 messages 属性中包含接收到的消息(IAReceivedMessage)的列表。

IAReceivedMessage 参数说明

参数类型说明
messageTypestring消息类型标识(Object Name),例如 RC:TxtMsg。融云内置消息类型的 Object Name 值参见 消息类型概述
contentObject消息内容。例如,如果收到文本消息,content 字段值为 { content: 'text message inner content' },详见发送消息文档。
senderUserIdstring消息发送者的用户 ID
targetIdstring会话 ID(或称目标 ID),用于标识会话对端。
  1. 针对单聊会话,用对端用户的 ID 作为 Target ID,因此发送与接收的所有消息的 Target ID 一定为对端的用户 ID。请注意,本端用户所接收的消息在本地消息数据中存储的 Target ID 也不是当前用户 ID,而是对端用户(消息发送者)的用户 ID。
  2. 在群组、聊天室、超级群会话中,Target ID 为对应的群组、聊天室、超级群 ID。
  3. 针对系统会话,因客户端用户无法回复系统会话消息,因此不需要 Target ID。
channelIdstring会话的业务标识。
conversationTypeConversationType会话类型。
sentTimenumber消息在服务器端的发送时间。
receivedTimenumber消息接收时间。
messageUIdstring服务端存储的消息 ID。
messageDirectionMessageDirection消息方向: 1: 发送,2: 接收。
isPersitedboolean是否存储。
isCountedboolean是否计数。
isOffLineMessageboolean是否为离线消息。
isMentionedboolean是否为 @ 消息。
disableNotificationboolean消息是否静默。
isStatusMessageboolean是否是状态消息。
canIncludeExpansionboolean是否支持消息扩展。
expansion{ [key: string]: any }|null消息扩展。
receivedStatusReceivedStatus消息接收状态(Electron 独有字段,5.9.3 版本开始废弃,推荐使用 receivedStatusInfo)。
receivedStatusInfoIReceivedStatusInfo消息接收状态详情(Electron 独有字段,支持多种状态并存)。
pushConfigIPushConfig推送扩展(与 Android、iOS 端的 MessagePushConfig 作用相似)。
messageIdnumber消息本地 ID(Electron 独有字段)。
directedUserIdsstring[]定向消息目标用户列表, 如果该列表为空, 表示此消息不是定向消息。SDK 从 5.9.6 版本开始支持获取定向消息的目标用户列表。

移除消息监听

调用 removeEventListener 移除消息接收监听器。

RongIMLib.removeEventListener(Events.MESSAGES, listener)

禁用消息排重机制(仅限 Electron)

消息排重机制会在 SDK 接收单聊、群聊、系统消息时自动去除内容重复消息。当 App 本地存在大量消息,SDK 默认的排重机制可能会因性能问题导致收消息卡顿。因此在接收消息发生卡顿问题时,可尝试关闭 SDK 的排重机制。

为什么接收消息可能出现消息重复

发送端处于弱网情况下可能出现该问题。A 向 B 发送消息后,消息成功到达服务端,并成功下发到接收者 B。但 A 由于网络等原因可能未收到服务端返回的 ack,导致 A 认为没有发送成功。此时如果 A 重发消息,此时 B 就会收到与之前重复的消息(消息内容相同,但 Message UID 不同)。

关闭消息排重

提示

SDK 从 5.7.1 版本开始支持关闭消息排重。不支持为聊天室、超级群会话类型关闭消息排重。

请在 SDK 初始化之后,建立 IM 连接之前调用。多次调用以最后一次为准。

const enableCheck = false;
RongIMLib.electronExtension.setCheckDuplicateMessage(enableCheck);