接收消息
开发者拦截 SDK 接收的消息,并进行相应的业务操作。
监听消息接收
应用程序可以通过 addOnReceiveMessageListener 方法设置多个消息接收监听器。所有接收到的消息都会在 OnReceiveMessageWrapperListener 监听器的方法中回调。建议在应用生命周期内注册消息监听。
RongCoreClient.addOnReceiveMessageListener(
new io.rong.imlib.listener.OnReceiveMessageWrapperListener() {
@Override
public boolean onReceivedMessage(Message message, ReceivedProfile profile) {
int left = profile.getLeft();
boolean isOffline = profile.isOffline();
boolean hasPackage = profile.hasPackage();
}
});
消息接收监听器 OnReceiveMessageWrapperListener,可接收实时消息或离线消息。
当客户端连接成功后,服务端会将所有离线消息?以消息包(Package)的形式下发给客户端,每个 Package 中最多含 200 条消息。客户端会解析 Package 中的消息,逐条上抛并通知应用。
SDK 接收到消息时会触发以下方法。
public abstract void onReceivedMessage(Message message, ReceivedProfile profile);
ReceivedProfile
中封装了当前与接收消息相关的数据:
ReceivedProfile
中的left
为当前正在解析的消息包(Package)中还剩余的消息条数。ReceivedProfile
中的hasPackage
表示当前是否在服务端还存在未下发的消息包(Package)。ReceivedProfile
中的offline
表示当前消息是否为离线消息。
同时满足以下条件,表示离线消息已收取完毕:
hasPackage
为false
:表示当前正在解析最后一包消息。left
为 0:表示最后一个消息包中最后一条消息已接收完毕。
从 5.2.3 版本开始,每次连接成功后,离线消息收取完毕时会触发以下回调方法。如果没有离线消息,连接成功后会立即触发。
public void onOfflineMessageSyncCompleted() {
//
}
为了避免内存泄露,请在不需要监听时调用 removeOnReceiveMessageListener 移除监听器。
RongCoreClient.removeOnReceiveMessageListener(listener);
消息接收状态
Message 类中封装了 ReceivedStatus,使用了以下状态表示接收到的消息的状态。