接收消息
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;
}
参数说明
参数 | 类型 | 说明 |
---|---|---|
message | Message | 接收的消息 |
info | ReceivedInfo | 消息接收信息 |
ReceivedInfo
说明
参数 | 类型 | 说明 |
---|---|---|
left | number | 还剩余的未接收的消息数 |
hasPackage | boolean | SDK 拉取服务器的消息以包(package)的形式批量拉取,有 package 存在就意味着远端服务器还有消息尚未被 SDK 拉取 |
isOffline | boolean | 是否是离线消息 |
同时满足以下条件,表示离线消息已收取完毕:
hasPackage
为false
:表示当前正在解析最后一包消息。left
为 0:表示最后一个消息包中最后一条消息已接收完毕。
消息收取完毕
每次连接成功后,离线消息收取完毕时会触发以下回调方法。如果没有离线消息,连接成功后会立即触发。
TypeScript
interface MessageReceivedListener {
/**
* 离线消息接收完成 远端消息同步完成回调,每次连接成功触发一次 远端没有消息的时候,连接成功后会立即触发
* 远端有大量历史消息的时候,连接成功会等待消息接收完成之后触发
*/
onOfflineMessageSyncCompleted(): void;
}```