跳到主要内容

设置会话免打扰

即时通讯服务支持会话免打扰设置。IMKit SDK 可根据会话标识设置消息提醒状态为「免打扰」。设置后如果客户端在后台运行时,会话中有新的消息,将不会进行通知提醒,可以收到消息内容。如果客户端为离线状态,将不会收到远程通知提醒。

会话的免打扰状态将会被同步到服务端。融云会为用户自动在设备间同步会话免打扰状态数据。客户端可以通过监听器获取同步通知,也可以主动获取最新数据。

PushNotificationLevel 的定义:

状态名称状态值说明
All-1全部消息通知。注意:超级群设置全部消息通知时:1. @ 消息一定收到推送通知;2. 普通消息的推送频率受到服务端默认推送频率设置的影响,无法做到所有普通消息都通知。
Default0未设置(向上查询群或者APP级别设置),存量数据中0表示未设置
Mention1群聊和超级群 @所有人 + @自己 时通知;单聊代表消息不通知
MentionUsers2群聊和超级群 @自己 时通知,其它情况不通知;单聊代表消息不通知
MentionAll4群聊和超级群 @所有人 时通知,其他情况都不通知;单聊代表消息不通知
Blocked5消息通知被屏蔽,不接收任何消息通知

设置会话的免打扰状态

RongIM 类提供 setConversationsNotificationLevel 方法,可根据会话标识列表批量设置消息提醒状态为「免打扰」。设置成功后,客户端在后台运行时或处于用户离线状态时,均不会收到该会话的新消息通知。在会话列表页该会话的右下角将展示一个灰色小铃铛图标。

let conIdList = new List<ConversationIdentifier>();
let conId = new ConversationIdentifier()
conId.conversationType = ConversationType.Private
conId.targetId = "targetId"
conIdList.add(conId)
RongIM.getInstance().conversationService().setConversationsNotificationLevel(conIdList, PushNotificationLevel.Blocked);

监听会话的免打扰状态同步

即时通讯业务支持会话状态(置顶状态数据和免打扰状态数据)同步机制。设置会话状态同步监听器后,如果会话状态改变,可在本端收到通知。

当会话的置顶和免打扰状态数据同步后,SDK 会触发 ConversationListEventListeneronSyncConversationStatus 方法; 如果是本端操作,则会触发 onConversationNotificationLevelChange 方法。

export interface ConversationListEventListener {

/**
* 当其他端修改会话的免打扰和置顶状态时
*/
onSyncConversationStatus?: (items: List<ConversationStatusInfo>) => void;

/**
* 当本端修改会话的免打扰状态时
*/
onConversationNotificationLevelChange?: (identifierList: List<ConversationIdentifier>, level: PushNotificationLevel) => void;
}

使用 RongIMaddConversationListEventListenerremoveConversationListEventListener 方法添加或移除监听器。

let conversationListEventListener : ConversationListEventListener = {
onSyncConversationStatus: (items: List<ConversationStatusInfo>) => {
//其他端同步会话置顶和免打扰状态
for (let itemElement of items) {
// 根据 itemElement.level 判断 PushNotificationLevel 具体类型
}
},
onConversationNotificationLevelChange:(items: List<ConversationIdentifier>, level: PushNotificationLevel) => {
//本端同步会话置顶和免打扰状态
for (let itemElement of items) {
// 根据 level 判断 PushNotificationLevel 具体类型
}
}
}
// 设置监听
RongIM.getInstance().conversationListService().addConversationListEventListener(conversationListEventListener)

获取会话的免打扰状态

RongIM 类提供 getConversationNotificationLevel 方法,可根据会话标识列表获取消息提醒状态。

let conId = new ConversationIdentifier()
conId.conversationType = ConversationType.Private
conId.targetId = "targetId"
let service = RongIM.getInstance().conversationService()
service.getConversationNotificationLevel(this.conId)
.then((value: IAsyncResult<PushNotificationLevel>) => {
if (value.code === EngineError.Success) {
let level = value.data as PushNotificationLevel
// 根据 level 判断 PushNotificationLevel 具体类型
}
})