跳到主要内容

接收消息

IMKit SDK 提供了消息接收监听器 MessageReceivedListener,可接收实时消息或离线消息。您可以拦截 IMKit SDK 接收的消息,并进行相应的业务操作。

设置/移除消息接收监听器

IMKit SDK 提供了 addMessageReceiveListener / removeMessageReceiveListener 方法,支持设置多个消息接收监听器。

建议您在初始化之后,连接 IM 之前注册消息监听,且在应用程序声明周期内保持设置。请注意不要重复添加,避免内存泄露。如果在页面中监听,建议在 aboutToAppear 调用,在 aboutToDisappear 移除监听。

添加消息监听器

SDK 支持添加监听器。所有接收到的消息都会在此接口方法中回调:

TypeScript
RongIM.getInstance().messageService().addMessageReceiveListener()

移除消息监听器

SDK 支持移除监听器。为了避免内存泄露,请在不需要监听时将监听器移除:

TypeScript
RongIM.getInstance().messageService().removeMessageReceiveListener()

消息接收监听器

当客户端连接成功后,服务端会将所有离线消息?以消息包(Package)的形式下发给客户端,每个 Package 中最多含 200 条消息。客户端会解析 Package 中的消息,逐条上抛并通知应用。

SDK 接收到消息时会触发以下方法。

接口原型

TypeScript
interface MessageReceivedListener {
/**
* 消息接收监听
* @param message 消息体
* @param info 消息接收信息
*/
onMessageReceived(message: Message, info: ReceivedInfo): void;
}

参数说明

参数类型说明
messageMessage接收的消息
infoReceivedInfo消息接收信息

ReceivedInfo 说明

参数类型说明
leftnumber还剩余的未接收的消息数
hasPackagebooleanSDK 拉取服务器的消息以包(package)的形式批量拉取,有 package 存在就意味着远端服务器还有消息尚未被 SDK 拉取
isOfflineboolean是否是离线消息

同时满足以下条件,表示离线消息已收取完毕:

  • hasPackagefalse:表示当前正在解析最后一包消息。
  • left 为 0:表示最后一个消息包中最后一条消息已接收完毕。

消息收取完毕

每次连接成功后,离线消息收取完毕时会触发以下回调方法。如果没有离线消息,连接成功后会立即触发。

TypeScript
interface MessageReceivedListener {
/**
* 离线消息接收完成 远端消息同步完成回调,每次连接成功触发一次 远端没有消息的时候,连接成功后会立即触发
* 远端有大量历史消息的时候,连接成功会等待消息接收完成之后触发
*/
onOfflineMessageSyncCompleted(): void;
}```