Skip to main content

Multi-Device Synchronization for Do Not Disturb/Pinned Conversations

The IMLib SDK provides a conversation status (pinned or Do Not Disturb) synchronization mechanism. By setting up a conversation status synchronization listener, you can monitor real-time changes to conversation status when modified on other devices.

tip

Prior to version 5.10.0, there were occasional inaccuracies in unread message counts. We recommend using version 5.10.0 or higher.

Listener Description

The RongIMClient provides a ConversationStatusListener. After setting up the listener, the following method will be triggered when conversation status (pinned or Do Not Disturb) changes:

public interface ConversationStatusListener {
void onStatusChanged(ConversationStatus[] conversationStatus);
}

The onStatusChanged method returns a list of conversationStatus with the following parameters:

Parameter Description

ParameterTypeDescription
conversationTypeConversationTypeConversation type.
targetIdStringConversation ID.
isTopbooleanWhether the conversation is pinned.
levelPushNotificationLevelDo Not Disturb level for the conversation. SDK version 5.2.5+ supports multi-device synchronization of Do Not Disturb levels. For detailed level descriptions, see Do Not Disturb Feature Overview.
notificationStatusConversationNotificationStatusConversation notification status. Only supports two states: Notify (1) or Do Not Disturb (0).

Setting Up the Listener

Set up the multi-device synchronization listener for conversation status (pinned and Do Not Disturb).

Sample Code

// Synchronization listener
RongIMClient.ConversationStatusListener listener = new RongIMClient.ConversationStatusListener() {
@Override
public void onStatusChanged(ConversationStatus[] conversationStatus) {
if (conversationStatus == null) {
return;
}
for (ConversationStatus status : conversationStatus) {
Conversation.ConversationType conversationType = status.getConversationType(); // Get conversation type
String targetId = status.getTargetId(); // Get conversation ID
boolean isTop = status.isTop(); // Get whether the conversation is currently pinned
IRongCoreEnum.PushNotificationLevel level = status.getNotificationLevel(); // Get PushNotificationLevel (added in 5.2.5)
Conversation.ConversationNotificationStatus notificationStatus = status.getNotifyStatus(); // Get current Do Not Disturb status
}
}
};
RongIMClient.getInstance().setConversationStatusListener(listener); // Set up listener