按频道设置免打扰
本文描述如何为超级群业务设置免打扰级别。
提示
即时通讯客户端 SDK 支持多维度、多级别的免打扰设置。
- App 开发者可实现从 App Key、指定细分业务(仅超级群)、用户级别多个维度的免打扰功能配置。在融云服务端决定是否触发推送通知时,不同维度的优先级如下:用户级别设置 > 指定超级群频道的默认配置(仅超级群支持) > 指定超级群会话的默认配置(仅超级群支持) > App Key 级设置。
- 用户级别设置下包含多个细分维度。在融云服务端决定是否触发推送通知时,如存在用户级别配置,不同细分维度的优先级如下:全局免打扰 > 按频道设置的免打扰 > 按会话设置的免打扰 > 按会话类型设置的免打扰。详见免打扰功能概述。
在免打扰设置生效时,客户端收到新消息时行为如下:
- 客户端在后台运行:会话中有新消息时,将不会进行通知提醒,但可以收到消息内容。
- 客户端为离线状态:会话中有新消息时,不会收到远程通知提 醒,再次上线时可收取消息内容。
支持的免打扰级别
免打扰级别提供了针对不同 @ 消息的免打扰控制。指定频道的免打扰配置支持以下级别:
枚举值 | 说明 |
---|---|
allMessage | 所有消息均可进行通知。 |
none | 未设置。未设置时均为此初始状态。 注意:在此状态下,如果超级群与群频道均为未设置,则认为超级群与频道的默认免打扰级别为全部消息都通知。 |
mention | 仅针对 @ 消息进行通知,包括 @指定用户 和 @所有人 |
mentionUsers | 仅针对 @ 指定用户消息进行通知,且仅针对被 @ 的指定的用户进行通知。 如:@张三,则张三可以收到推送; @所有人不会触发推送通知。 |
mentionAll | 仅针对 @群全员进行通知,即只接收 @所有人的推送信息。 |
blocked | 不接收通知,即使为 @ 消息也不推送通知。 |
管理超级群的免打扰设置
SDK 不提供一次性设置所有超级群频道免打扰的方法,需要开发者根据所有频道来遍历调用 [设置指定频道免打扰级别] 的方法,达到整个超级群免打扰的效果。
管理频道的免打扰设置
超级群(UltraGroup)支持在超级群的会话下创建独立的频道(channel),对消息数据(会话、消息、未读数)和群组成员分频道进行聚合。SDK 支持在超级群业务中的用户(userId
)设置指定群频道(channelId
)的免打扰级别。
设置指定频道免打扰级别
为当前用户设置超级群频道中的消息的免打扰级别。
方法
Future<int> changeConversationNotificationLevel(RCIMIWConversationType type, String targetId, String? channelId, RCIMIWPushNotificationLevel level, {IRCIMIWChangeConversationNotificationLevelCallback? callback});
参数说明
参数名 | 参数类型 | 描述 |
---|---|---|
type | RCIMIWConversationType | 会话类型 |
targetId | String | 会话 ID |
channelId | String | 频道 ID,仅支持超级群使用,其他会话类型传 null 即可。 |
level | RCIMIWPushNotificationLevel | 消息通知级别 |
callback | IRCIMIWChangeConversationNotificationLevelCallback | 事件回调。SDK 从 5.3.1 版本开始支持 callback 方式回调。如果传入了 callback 参数,仅触发 callback 回调。 |
返回值
返回值 | 描述 |
---|---|
Future<int> | 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 |
代码示例
IRCIMIWChangeConversationNotificationLevelCallback? callback = IRCIMIWChangeConversationNotificationLevelCallback(onConversationNotificationLevelChanged: (int? code) {
//...
});
int? ret = await engine?.changeConversationNotificationLevel(type, targetId, channelId, level, callback:callback);
回调方法
- onUltraGroupUnreadMentionedCountLoaded
Function(int? code, String? targetId, int? count)? onUltraGroupUnreadMentionedCountLoaded;
参数说明
参数名 | 参数类型 | 描述 |
---|---|---|
code | int | 接口回调的状态码,0 代表成功,非 0 代表出现异常 |
targetId | String | 会话 ID |
count | int | 未读数量 |
代码示例
engine?.onUltraGroupUnreadMentionedCountLoaded = (int? code, String? targetId, int? count) {
//...
};
获取指定频道免打扰级别
获取为当前用户设置的超级群频道免打扰级别。
方法
Future<int> getConversationNotificationLevel(RCIMIWConversationType type, String targetId, String? channelId, {IRCIMIWGetConversationNotificationLevelCallback? callback});
参数说明
参数名 | 参数类型 | 描述 |
---|---|---|
type | RCIMIWConversationType | 会话类型 |
targetId | String | 会话 ID |
channelId | String | 频道 ID,仅支持超级群使用,其他会话类型传 null 即可。 |
callback | IRCIMIWGetConversationNotificationLevelCallback | 事件回调。SDK 从 5.3.1 版本开始支持 callback 方式回调。如果传入了 callback 参数,仅触发 callback 回调。 |
返回值
返回值 | 描述 |
---|---|
Future<int> | 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 |
代码示例
IRCIMIWGetConversationNotificationLevelCallback? callback = IRCIMIWGetConversationNotificationLevelCallback(onSuccess: (RCIMIWPushNotificationLevel? t) {
//...
}, onError: (int? code) {
//...
});
int? ret = await engine?.getConversationNotificationLevel(type, targetId, channelId, callback:callback);
回调方法
- onConversationNotificationLevelChanged
Function(int? code, RCIMIWConversationType? type, String? targetId, String? channelId, RCIMIWPushNotificationLevel? level)? onConversationNotificationLevelChanged;
参数说明
参数名 | 参数类型 | 描述 |
---|---|---|
code | int | 接口回调的状态码,0 代表成功,非 0 代表出现异常 |
type | RCIMIWConversationType | 会话类型 |
targetId | String | 会话 ID |
channelId | String | 频道 ID,仅支持超级群使用,其他会话类型传 null 即可。 |
level | RCIMIWPushNotificationLevel | 消息通知级别 |
代码示例
engine?.onConversationNotificationLevelChanged = (int? code, RCIMIWConversationType? type, String? targetId, String? channelId, RCIMIWPushNotificationLevel? level) {
//...
};