接收消息
您可监听 IMKit SDK 接收的消息,并进行相应的业务操作。
消息接收监听器说明
SDK 提供了消息接收监听器 OnReceiveMessageWrapperListener,可接收实时消息或离线消息。
当客户端连接成功后,服务端会将所有离线消息?以消息包(Package)的形式下发给客户端,每个 Package 中最多含 200 条消息。SDK 会解析 Package 中的消息,逐条上抛并通知应用。
SDK 接收到消息时会触发以下方法。
public boolean onReceived(Message message, int left, boolean hasPackage, boolean offline)
left为当前正在解析的消息包(Package)中还剩余的消息条数。hasPackage表示当前是否在服务端还存在未下发的消息包(Package)。offline表示当前消息是否为离线消息。
同时满足以下条件,表示离线消息已收取完毕:
hasPackage为false:表示当前正在解析最后一包消息。left为 0:表示最后一个消息包中最后一条消息已接收完毕。
从 5.2.3 版本开始,每次连接成功后,离线消息收取完毕时会触发以下回调方法。如果没有离线消息,连接成功后会立即触发。
在 5.6.9 版本以前,使用 IMCenter 类调用 onOfflineMessageSyncCompleted 方法有同步异常情况,建议使用新版 SDK。
public void onOfflineMessageSyncCompleted() {
//
}
设置消息接收监听器
IMKit SDK 在 IMCenter 类中提供了 addOnReceiveMessageListener/ removeOnReceiveMessageListener 方法,支持设置多个消息接收监听器。
添加消息监听器
所有接收到的消息都会在消息接收监听器方法中回调。建议在应用生命周期内注册消息监听。请注意不要重复添加,重复添加后会回调多次,并可能出现内存泄露。为确保接收所有离线消息,请在连接 IM 融云服务器之前设置监听器。
调用 IMCenter 类 addOnReceiveMessageListener 设置消息接收监听器,回调线程的情况如下:
- 如果 SDK 版本 = 5.3.3,
onReceivedMessage回调在非主线程中。 - 如果 SDK 版本 ≦ 5.3.2 或 ≧ 5.3.4,
onReceivedMessage回调在主线程中。
IMCenter.getInstance().addOnReceiveMessageListener(
new RongIMClient.OnReceiveMessageWrapperListener() {
@Override
public boolean onReceived(Message message, int left, boolean hasPackage, boolean offline) {
return false;
}
});
移除消息监听器
SDK 支持移除监听器。为了避免内存泄露,请在不需要监听时将监听器移除。
IMCenter.getInstance().removeOnReceiveMessageListener(listener);
设置异步消息接收监听器
IMKit 从 5.3.4 开始提供以下接口,并且 IMKit SDK 默认使用 addAsyncOnReceiveMessageListener。
IMKit SDK 在 IMCenter 类中提供了 addAsyncOnReceiveMessageListener/ removeAsyncOnReceiveMessageListener 方法,支持设置多个消息接收监听器。