跳到主要内容

多端同步免打扰/置顶

SDK 提供了会话状态(置顶或免打扰)同步机制,通过设置会话状态同步监听器,当在其它端修改会话状态时,可在本端实时监听到会话状态的改变。

监听器说明

RongIM 中提供了 ConversationListEventListener 监听器。设置监听后,在会话的状态(置顶和免打扰)改变时,会触发以下方法:

  • 其它端修改会话的置顶和免打扰状态,数据同步后,SDK 会触发 ConversationListEventListeneronSyncConversationStatus 方法。
  • 本端操作的修改置顶和免打扰状态,SDK会触发 ConversationListEventListeneronConversationTopStatusChange 方法。
interface ConversationListEventListener {
/**
* 当其他端修改会话的免打扰和置顶状态时
*/
onSyncConversationStatus?: (items: List<ConversationStatusInfo>) => void;

/**
* 当本端修改会话的置顶状态时
*/
onConversationTopStatusChange?: (identifierList: List<ConversationIdentifier>, option: ISetConversationTopOption) => void;
}

方法返回 ConversationStatusInfo 的列表,参数如下:

参数类型描述
conversationTypeConversationType会话类型。
targetIdString会话 ID。
updateTimenumber更新时间,毫秒时间戳。
isTopboolean会话是否被设置为置顶。
topTimenumber会话指定时间。
levelPushNotificationLevel会话的免打扰级别。具体级别说明详见免打扰功能概述

ISetConversationTopOption 参数

参数类型说明
isTopboolean是否置顶,true 设置置顶;false 取消置顶
isNeedCreateboolean是否创建会话:对应的会话本地不存在时,true 将创建该会话; false 不创建该会话
isNeedUpdateTimeboolean是否更新会话时间,非必选,默认为 true

设置/移除监听器

设置/移除会话状态(置顶和免打扰)多端同步监听器。

建议添加监听后,在合适的时机移除,避免内存泄露。如果在页面中监听,建议在 aboutToAppear 调用,在 aboutToDisappear 移除监听。

let conversationListEventListener: ConversationListEventListener = {
onSyncConversationStatus: (items: List<ConversationStatusInfo>) => {
//其他端同步会话置顶和免打扰状态
for (let itemElement of items) {
// 会话类型
let conversationType: ConversationType = itemElement.conversationType
// 会话 ID
let targetId: string = itemElement.targetId
// 更新时间,毫秒
let updateTime: number = itemElement.updateTime
// 置顶时间,毫秒
let topTime: number = itemElement.topTime
// 是否置顶
let isTop: boolean = itemElement.isTop
// 免打扰级别
let level: PushNotificationLevel = itemElement.level
}
},
//本端会话置顶和免打扰状态
onConversationTopStatusChange: (conversationIds: List<ConversationIdentifier>, option: ISetConversationTopOption) => {
for (let itemElement of conversationIds) {
// conversationIds 会话 id 标识列表
}
// 是否置顶
let isTop: boolean = option.isTop
// 是否创建会话
let isNeedCreate: boolean = option.isNeedCreate
// 是否更新会话时间
if (option.isNeedUpdateTime) {
let isNeedUpdateTime: boolean = option.isNeedUpdateTime
}
}
}
// 设置监听
RongIM.getInstance().conversationListService().addConversationListEventListener(conversationListEventListener);
// 移除监听
RongIM.getInstance().conversationListService().removeConversationListEventListener(conversationListEventListener);