设置免打扰
本文描述如何为指定会话(targetId
)配置免打扰。将会话或部分消息设置为免打扰后,如果移动平台客户端为离线状态,将不会收到远程通知提醒。如果使用 IMKit 客户端,App 在后台运行时将不会为免打扰的会话或消息触发通知提醒,可以收到消息内容。
会话的免打扰配置将会被同步到服务端。融云会为用户自动在设备间同步会话免打扰配置数据。客户端可以通过监听器获取同步通知,也可以主动获取最新数据。
使用免打扰级别(SDK ≧ 5.3.0)
- SDK 从 5.3.0 开始提供免打扰级别配置(
notificationLevel
),App 可以实现精细化的通知控制策略。Android/iOS 移动端从 SDK 5.2.2 开始支持免打扰级别。 - 如果您的应用基于 Electron 解决方案,暂不支持使用免打扰级别(
notificationLevel
),请使用免打扰状态配置(notificationStatus
)。详见使用免打扰状态。
由于即时通讯本身的业务特性,App 可能需要实现精细化的通知控制策略。当前 Web 端 IMLib SDK 已支持多维度、多级别的免打扰设置。
- 支持 App Key、指定细分业务(仅超级群)、用户级别的免打扰功能配置。在融云服务端决定是否触发推送通知时,不同维度的优先级如下:用户级别设置 > 指定超级群频道的默认配置(仅超级群支持) > 指定超级群会话的默认配置(仅超级群支持) > App Key 级设置。
- 用户级别设置 是指可由 App 用户控制的免打扰配置,包含多个细分维度。在融云服务端决定是否触发推送通知时,如存在用户级别配置,不同细分维度的优先级如下:全局免打扰 > 按频道设置的免打扰 > 按会话设置的免打扰。详见免打扰功能概述。
- 使用超级群业务的客户请参见超级群管理下的「设置群/频道默认免打扰」与「设置指定群/频道免打扰」文档。
免打扰级别(notificationLevel
)提供了针对不同 @ 消息的免打扰控制。从 SDK 5.3.0 开始,免打扰配置支持以下级别:
notificationLevel 的枚举值 | 数值 | 说明 |
---|---|---|
NotificationLevel.ALL_MESSAGE | -1 | 全部消息均接收通知,即关闭免打扰功能 |
NotificationLevel.NOT_SET | 0 | 未设置(用户未设置时为此状态,为全部消息都通知,在此状态下,如设置了超级群默认状态以超级群的默认设置为准) |
NotificationLevel.AT_MESSAGE_NOTIFICATION | 1 | 仅针对 @ 消息进行通知,包括 @指定用户 和 @所有人 |
NotificationLevel.AT_USER_NOTIFICATION | 2 | 仅针对 @ 指定用户消息进行通知,且仅通知被 @ 的指定的用户进行通知 如:@张三 则张三可以收到推送,@所有人 时不会收到推送 |
NotificationLevel.AT_GROUP_ALL_USER_NOTIFICATION | 4 | 仅针对 @群全员进行通知,只接收 @所有人 的推送信息 |
NotificationLevel.NOT_MESSAGE_NOTIFICATION | 5 | 不接收通知,即使为 @ 消息也不推送通知 |
设置免打扰级别
Web 平台从 5.3.0 开始支持 setConversationNotificationLevel
接口,同时废弃 setConversationNotificationStatus
。
Electron 平台从 5.8.4 版本开始支持 setConversationNotificationLevel
接口。
调用 setConversationNotificationLevel 设置免打扰级别
const conversationType = RongIMLib.ConversationType.GROUP;
const targetId = '目标会话 ID';
const notificationLevel = RongIMLib.NotificationLevel.NOT_MESSAGE_NOTIFICATION
RongIMLib.setConversationNotificationLevel({
conversationType,
targetId,
}, notificationLevel).then(( {code} ) => {
// 设置免打扰状态成功
})
参数 | 类型 | 必填 | 说明 |
---|---|---|---|
targetId | String | 是 | 目标会话 ID |
conversationType | Number | 是 | 会话类型。参考 ConversationType。 |
notificationLevel | Number | 是 | 免打扰级别。详见上文支持的免打扰级别 对 notificationLevel 的说明。 |
获取免打扰级别
从 5.3.0 开始支持 getConversationNotificationLevel
,同时废弃 setConversationNotificationStatus
。
调用 getConversationNotificationLevel 获取免打扰级别
参数 | 类型 | 必填 | 说明 |
---|---|---|---|
targetId | String | 是 | 目标会话 ID |
conversationType | Number | 是 | 会话类型。参考 ConversationType。 |
const conversationType = RongIMLib.ConversationType.GROUP;
const targetId = '目标会话 ID';
RongIMLib.getConversationNotificationLevel({
conversationType,
targetId,
}).then(({ code, data }) => {
})
使用免打扰状态(适用于 Electron)
- 如果您实现 Web 应用,且 SDK 版本 < 5.3.0,可使用
notificationStatus
相关接口。如果 SDK 版本 ≧ 5.3.0,推荐使用免打扰级别功能。 - 如果您的应用基于 Electron 解决方案,当前仅支持使用以下设置免打扰状态(
notificationStatus
)的接口,暂不支持配置免打扰级别。
SDK 支持为会话设置免打扰状态(notificationStatus
),支持设置两种状态。
值 | 说明 |
---|---|
NotificationStatus.OPEN | 免打扰已开启(不接收推送通知)。 |
NotificationStatus.CLOSE | 免打扰已关闭(接收推送通知)。 |
App 可以调用 setConversationNotificationStatus 设置免打扰状态。调用 getConversationNotificationStatus 查询免打扰状态。
const conversationType = RongIMLib.ConversationType.PRIVATE;
const targetId = '接收方的 userId';
const notificationStatus = NotificationStatus.OPEN
// 设置会话为免打扰状态
RongIMLib.setConversationNotificationStatus({
conversationType,
targetId,
}, notificationStatus).then(( {code} ) => {
// 设置免打扰状态成功
if( !code ){
}
})
// 获取会话的免打扰状态
RongIMLib.getConversationNotificationStatus({
conversationType,
targetId,
}).then(({ code, data }) => {
})
参数 | 类型 | 必填 | 说明 |
---|---|---|---|
targetId | String | 是 | 接收方的 userId |
conversationType | Number | 是 | 会话类型。参考 ConversationType。 |
notificationStatus | Number | 否 | 免打扰状态。 |
获取免打扰会话列表
从 5.1.1 开始支持此接口。
调用 getBlockedConversationList 获取已设置免打扰状态的所有会话。
RongIMLib.getBlockedConversationList().then(( {code, data} ) => {
// 获取免打扰会话成功
if( code === RongIMLib.ErrorCode.SUCCESS ){
console.log("blocked conversation list",data)
}
})