接收消息
App 可监听 SDK 接收的消息,并进行相应的业务操作。
- 建议在应用生命周期内注册消息监听。
- 建议在应用生命周期结束时移除消息监听。
设置消息监听
调用 addEventListener 设置消息接收监听器。所有接收到的消息都会在此接口方法中回调。可在任意位置多次监听。
const Events = RongIMLib.Events
const listener = (evt) => {
console.log(evt.messages)
};
RongIMLib.addEventListener(Events.MESSAGES, listener)
上方示例的 listener 中返回 IMessageEvent 对象,其 messages
属性中包含接收到的消息(IAReceivedMessage)的列表。
IAReceivedMessage
参数说明
参数 | 类型 | 说明 |
---|---|---|
messageType | string | 消息类型标识(Object Name),例如 RC:TxtMsg 。融云内置消息类型的 Object Name 值参见 消息类型概述。 |
content | Object | 消息内容。例如,如果收到文本消息,content 字段值为 { content: 'text message inner content' } ,详见发送消息文档。 |
senderUserId | string | 消息发送者的用户 ID |
targetId | string | 会话 ID(或称目标 ID),用于标识会话对端。
|
channelId | string | 会话的业务标识。 |
conversationType | ConversationType | 会话类型。 |
sentTime | number | 消息在服务器端的发送时间。 |
receivedTime | number | 消息接收时间。 |
messageUId | string | 服务端存储的消息 ID。 |
messageDirection | MessageDirection | 消息方向: 1: 发送,2: 接收。 |
isPersited | boolean | 是否存储。 |
isCounted | boolean | 是否计数。 |
isOffLineMessage | boolean | 是否为离线消息。 |
isMentioned | boolean | 是否为 @ 消息。 |
disableNotification | boolean | 消息是否静默。 |
isStatusMessage | boolean | 是否是状态消息。 |
canIncludeExpansion | boolean | 是否支持消息扩展。 |
expansion | { [key: string]: any }|null | 消息扩展。 |
receivedStatus | ReceivedStatus | 消息接收状态(Electron 独有字段,5.9.3 版本开始废弃,推荐使用 receivedStatusInfo)。 |
receivedStatusInfo | IReceivedStatusInfo | 消息接收 状态详情(Electron 独有字段,支持多种状态并存)。 |
pushConfig | IPushConfig | 推送扩展(与 Android、iOS 端的 MessagePushConfig 作用相似)。 |
messageId | number | 消息本地 ID(Electron 独有字段)。 |
directedUserIds | string[] | 定向消息目标用户列表, 如果该列表为空, 表示此消息不是定向消息。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);