免打扰设置

更新时间: 2024/08/08 16:54:39

NetEase IM SDK(以下简称 NIM SDK)支持消息免打扰功能,即关闭离线推送消息和在线提醒。

本文介绍如何通过 NIM SDK 实现单聊、群聊消息、以及全局免打扰功能。

单聊消息免打扰

云信支持对用户设置免打扰,即设置与指定用户的单聊会话消息的免打扰。

如果将用户设置为免打扰,当收到该用户发来的消息时,不会触发在线消息提醒和离线推送的通知栏。

例如:A 用户将 B 用户设置为免打扰,B 给 A 发消息,A 不会触发在线消息提醒和离线推送的通知栏。

注册单聊消息免打扰监听

Android/iOS/Windows/macOS

在进行单聊消息免打扰模式设置前,您可以调用 addSettingListener 注册监听单聊消息免打扰模式变更事件。监听后,在单聊消息免打扰模式变更时,会收到对应的通知。

Android
javaNIMClient.getService(V2NIMSettingService.class).addSettingListener(new V2NIMSettingListener() {

    @Override
    public void onP2PMessageMuteModeChanged(String accountId, V2NIMP2PMessageMuteMode muteMode) {

    }
});
iOS
objective-c[[[NIMSDK sharedSDK] v2SettingService] addSettingListener:self];
macOS/Windows
cppV2NIMTeamListener listener;
listener.onP2PMessageMuteModeChanged = [](std::string accountId, V2NIMP2PMessageMuteMode muteMode) {
    // handle p2p message mute mode changed
};
settingService.addSettingListener(listener);

Web/uni-app/小程序/Harmony

在进行单聊消息免打扰模式设置前,您可以调用 on("EventName") 注册监听单聊消息免打扰模式变更事件。监听后,在单聊消息免打扰模式变更时,会收到对应的通知。

Web/uni-app/小程序
typescriptnim.V2NIMSettingService.on("onP2PMessageMuteModeChanged", function (accountId: string, muteMode: V2NIMP2PMessageMuteMode)
Harmony
typescriptnim.settingService.on('onP2PMessageMuteModeChanged', (accountId: string, muteMode: V2NIMP2PMessageMuteMode) => {})

设置单聊消息免打扰模式

通过调用 setP2PMessageMuteMode 方法来设置单聊消息免打扰模式。

  • 参数说明
Android
参数名称 类型 是否必填 默认值 描述
accountId String - 聊天对象用户账号,不可为空,否则返回 191004 参数错误。
muteMode V2NIMP2PMessageMuteMode - 消息免打扰模式:免打扰开启或免打扰关闭
success V2NIMSuccessCallback - 设置成功回调
failure V2NIMFailureCallback - 设置失败回调,返回错误码
iOS
参数名称 类型 是否必填 默认值 描述
accountId NSString * - 聊天对象用户账号,不可为空,否则返回 191004 参数错误。
muteMode V2NIMP2PMessageMuteMode - 消息免打扰模式:免打扰开启或免打扰关闭
success V2NIMSuccessCallback - 设置成功回调
failure V2NIMFailureCallback - 设置失败回调,返回错误码
macOS/Windows
参数名称 类型 是否必填 默认值 描述
accountId std::string - 聊天对象用户账号,不可为空,否则返回 191004 参数错误。
muteMode V2NIMP2PMessageMuteMode - 消息免打扰模式:免打扰开启或免打扰关闭
success V2NIMSuccessCallback - 设置成功回调
failure V2NIMFailureCallback - 设置失败回调,返回错误码
Web/uni-app/小程序
参数名称 类型 是否必填 默认值 描述
accountId string - 聊天对象用户账号,不可为空,否则返回 191004 参数错误。
muteMode V2NIMP2PMessageMuteMode - 消息免打扰模式:免打扰开启或免打扰关闭
Harmony
参数名称 类型 是否必填 默认值 描述
accountId string - 聊天对象用户账号,不可为空,否则返回 191004 参数错误。
muteMode V2NIMP2PMessageMuteMode - 消息免打扰模式:免打扰开启或免打扰关闭
  • 示例代码
Android
javaNIMClient.getService(V2NIMSettingService.class).setP2PMessageMuteMode(accountId, muteMode,
new V2NIMSuccessCallback<Void>() {
    @Override
    public void onSuccess(Void unused) {

    }
},
new V2NIMFailureCallback() {
    @Override
    public void onFailure(V2NIMError error) {
        
    }
});
iOS
objective-c[[[NIMSDK sharedSDK] v2SettingService] setP2PMessageMuteMode:@"accountId" muteMode:V2NIM_P2P_MESSAGE_MUTE_MODE_OFF success:^{
        // 成功回调
    } failure:^(V2NIMError * _Nonnull error) {
        // 失败回调
    }];
macOS/Windows
cppsettingService.setP2PMessageMuteMode(
    "accountId",
    V2NIM_P2P_MESSAGE_MUTE_MODE_ON,
    []() {
        // set p2p mute mode succeeded
    },
    [](V2NIMError error) {
        // set p2p mute mode failed, handle error
    });
Web/uni-app/小程序
typescriptnim.V2NIMSettingService.setP2PMessageMuteMode('accountId', 1)
Harmony
typescriptawait nim.settingService.setP2PMessageMuteMode('accountId', V2NIMP2PMessageMuteMode.V2NIM_P2P_MESSAGE_MUTE_MODE_ON)

获取单聊消息免打扰状态

通过调用 getP2PMessageMuteMode 方法获取指定聊天对象的单聊会话免打扰状态。

  • 参数说明
Android
参数名称 类型 是否必填 默认值 描述
accountId String - 聊天对象用户账号,如果为空、不合法、不存在,则返回 191004 参数错误。
iOS
参数名称 类型 是否必填 默认值 描述
accountId NSString * - 聊天对象用户账号,不如果为空、不合法、不存在,则返回 191004 参数错误。
macOS/Windows
参数名称 类型 是否必填 默认值 描述
accountId nstd::string - 聊天对象用户账号,如果为空、不合法、不存在,则返回 191004 参数错误。
Web/uni-app/小程序
参数名称 类型 是否必填 默认值 描述
accountId string - 聊天对象用户账号,如果为空、不合法、不存在,则返回 191004 参数错误。
Harmony
参数名称 类型 是否必填 默认值 描述
accountId string - 聊天对象用户账号,如果为空、不合法、不存在,则返回 191004 参数错误。
  • 示例代码
Android
javaV2NIMP2PMessageMuteMode muteMode = NIMClient.getService(V2NIMSettingService.class).getP2PMessageMuteMode(accountId);
iOS
objective-c[[[NIMSDK sharedSDK] v2SettingService] getP2PMessageMuteMode:@"accountId"];
macOS/Windows
cppauto muteMode = settingService.getP2PMessageMuteMode("accountId");
Web/uni-app/小程序
typescriptconst mode = nim.V2NIMSettingService.getP2PMessageMuteMode('accountId')
Harmony
typescriptconst mode = await nim.settingService.getP2PMessageMuteMode('accountId')

群聊消息免打扰

SDK 支持对群消息设置免打扰。设置群消息免打扰后,该群组的消息不会触发在线消息提醒和离线推送的通知栏。

群消息免打扰模式分为以下三种:

  • V2NIM_TEAM_MESSAGE_MUTE_MODE_OFF:(默认)群消息免打扰关闭,即所有群消息均推送或提醒。
  • V2NIM_TEAM_MESSAGE_MUTE_MODE_ON:群消息免打扰开启,即所有群消息均不推送或不提醒。
  • V2NIM_TEAM_MESSAGE_MUTE_MODE_NORMAL_ON:普通成员群消息免打扰开启,即仅 群主和管理员 的消息推送或提醒。

以上群消息的推送和提醒指网易云信支持的 离线推送在线提醒

群消息的通知模式不影响群消息的接收和未读数的变化。若将通知模式设置为免打扰,仍然能接收到群消息,未读数仍会变化,只是不会触发在线消息提醒和离线推送的通知栏。

注册群消息免打扰监听

在进行群消息免打扰模式设置前,您可以调用 addSettingListener 方法注册监听相关事件。监听后,在群消息免打扰模式变更时,会收到对应的通知。

示例代码如下:

Android
javaNIMClient.getService(V2NIMSettingService.class).addSettingListener(new V2NIMSettingListener() {
    @Override
    public void onTeamMessageMuteModeChanged(String teamId, V2NIMTeamType teamType, V2NIMTeamMessageMuteMode muteMode) {
    // handle team message mute mode changed
    }
});
iOS
objective-c[[[NIMSDK sharedSDK] v2SettingService] addSettingListener:self];
macOS/Windows
cppV2NIMTeamListener listener;
listener.onTeamMessageMuteModeChanged = [](std::string teamId, V2NIMTeamType teamType, V2NIMTeamMessageMuteMode muteMode) {
    // handle team message mute mode changed
};
settingService.addSettingListener(listener);

Web/uni-app/小程序/Harmony

在进行群消息免打扰模式设置前,您可以调用 on("EventName") 注册监听群消息免打扰模式变更事件。监听后,在群消息免打扰模式变更时,会收到对应的通知。

Web/uni-app/小程序
typescriptnim.V2NIMSettingService.on("onTeamMessageMuteModeChanged", function (teamId: string, teamType: V2NIMTeamType, muteMode: V2NIMTeamMessageMuteMode)
Harmony
typescriptnim.settingService.on('onTeamMessageMuteModeChanged', (teamId: string, teamType: V2NIMTeamType, muteMode: V2NIMTeamMessageMuteMode) => {})

设置群消息免打扰

通过调用 setTeamMessageMuteMode 方法来设置群消息免打扰模式。

  • 参数说明
Android
参数名称 类型 是否必填 默认值 描述
teamId String - 群组 ID。如果为空、不合法、不存在则返回 191004 参数错误。
teamType V2NIMTeamType - 群组类型,包括高级群和超大群。
muteMode V2NIMTeamMessageMuteMode - 群消息免打扰模式:免打扰开启或免打扰关闭
success V2NIMSuccessCallback - 设置成功回调
failure V2NIMFailuerCallback - 设置失败回调,返回错误码
iOS
参数名称 类型 是否必填 默认值 描述
teamId NSString * - 群组 ID。如果为空、不合法、不存在则返回 191004 参数错误。
teamType V2NIMTeamType - 群组类型,包括高级群和超大群。
muteMode V2NIMTeamMessageMuteMode - 群消息免打扰模式:免打扰开启或免打扰关闭
success V2NIMSuccessCallback - 设置成功回调
failure V2NIMFailuerCallback - 设置失败回调,返回错误码
macOS/Windows
参数名称 类型 是否必填 默认值 描述
teamId std::string - 群组 ID。如果为空、不合法、不存在则返回 191004 参数错误。
teamType V2NIMTeamType - 群组类型,包括高级群和超大群。
muteMode V2NIMTeamMessageMuteMode - 群消息免打扰模式:免打扰开启或免打扰关闭
success V2NIMSuccessCallback - 设置成功回调
failure V2NIMFailuerCallback - 设置失败回调,返回错误码
Web/uni-app/小程序
参数名称 类型 是否必填 默认值 描述
teamId string - 群组 ID。如果为空、不合法、不存在则返回 191004 参数错误。
teamType V2NIMTeamType - 群组类型,包括高级群和超大群。
muteMode V2NIMTeamMessageMuteMode - 群消息免打扰模式:免打扰开启或免打扰关闭
Harmony
参数名称 类型 是否必填 默认值 描述
teamId string - 群组 ID。如果为空、不合法、不存在则返回 191004 参数错误。
teamType V2NIMTeamType - 群组类型,包括高级群和超大群。
muteMode V2NIMTeamMessageMuteMode - 群消息免打扰模式:免打扰开启或免打扰关闭
  • 示例代码
Android
javaNIMClient.getService(V2NIMSettingService.class).setTeamMessageMuteMode(teamId, teamType, muteMode,
new V2NIMSuccessCallback<Void>() {
    @Override
    public void onSuccess(Void unused) {
    // success
    }
},
new V2NIMFailureCallback() {
    @Override
    public void onFailure(V2NIMError error) {
    // failed, handle error
    }
});
iOS
objective-c[[[NIMSDK sharedSDK] v2SettingService] setTeamMessageMuteMode:@"teamId" teamType:V2NIM_TEAM_TYPE_INVALID muteMode:V2NIM_TEAM_MESSAGE_MUTE_MODE_OFF success:^{
    // 成功回调
} failure:^(V2NIMError * _Nonnull error) {
    // 失败回调
}];
macOS/Windows
cppsettingService.setTeamMessageMuteMode(
    "teamId",
    V2NIM_TEAM_TYPE_NORMAL,
    V2NIM_TEAM_MESSAGE_MUTE_MODE_ON,
    []() {
        // set team mute mode succeeded
    },
    [](V2NIMError error) {
        // set team mute mode failed, handle error
    }
);
Web/uni-app/小程序
typescriptnim.V2NIMSettingService.setTeamMessageMuteMode('teamId', 1, 1)
Harmony
typescriptawait nim.settingService.setTeamMessageMuteMode('teamId', V2NIMTeamType.V2NIM_TEAM_TYPE_NORMAL, V2NIMTeamMessageMuteMode.V2NIM_TEAM_MESSAGE_MUTE_MODE_ON)

获取群消息免打扰状态

通过调用 getTeamMessageMuteMode 方法获取指定群的免打扰状态。

  • 参数说明
Android
参数名称 类型 是否必填 默认值 描述
teamId String - 群组 ID。如果为空、不合法、不存在则返回 191004 参数错误。
teamType V2NIMTeamType - 群组类型,包括高级群和超大群。
iOS
参数名称 类型 是否必填 默认值 描述
teamId NSString * - 群组 ID。如果为空、不合法、不存在则返回 191004 参数错误。
teamType V2NIMTeamType - 群组类型,包括高级群和超大群。
macOS/Windows
参数名称 类型 是否必填 默认值 描述
teamId nstd::string - 群组 ID。如果为空、不合法、不存在则返回 191004 参数错误。
teamType V2NIMTeamType - 群组类型,包括高级群和超大群。
Web/uni-app/小程序
参数名称 类型 是否必填 默认值 描述
teamId string - 群组 ID。如果为空、不合法、不存在则返回 191004 参数错误。
teamType V2NIMTeamType - 群组类型,包括高级群和超大群。
Harmony
参数名称 类型 是否必填 默认值 描述
teamId string - 群组 ID。如果为空、不合法、不存在则返回 191004 参数错误。
teamType V2NIMTeamType - 群组类型,包括高级群和超大群。
  • 示例代码
Android
javaV2NIMTeamMessageMuteMode muteMode = NIMClient.getService(V2NIMSettingService.class).getTeamMessageMuteMode(teamId, teamType);
iOS
objective-c[[[NIMSDK sharedSDK] v2SettingService] getTeamMessageMuteMode:@"teamId" teamType:V2NIM_TEAM_TYPE_NORMAL];
macOS/Windows
cppauto muteMode = settingService.getTeamMessageMuteMode("teamId", V2NIM_TEAM_TYPE_NORMAL);
Web/uni-app/小程序
typescriptconst muteMode = nim.V2NIMSettingService.getTeamMessageMuteMode('teamId', 1)
Harmony
typescriptconst muteMode = await nim.settingService.getTeamMessageMuteMode('teamId', V2NIMTeamType.V2NIM_TEAM_TYPE_NORMAL)

获取会话消息免打扰状态

通过调用同步方法 getConversationMuteStatus 获取指定会话的免打扰状态。

如果该方法返回值不满足界面显示需求,可以调用 getP2PMessageMuteModegetTeamMessageMuteMode 方法获取单聊或群聊消息的具体免打扰模式。

Android
javaboolean isMute = NIMClient.getService(V2NIMSettingService.class).getConversationMuteStatus(conversationId);
iOS
objective-c[[NIMSDK sharedSDK] v2SettingService] getConversationMuteStatus:@"conversationId"];
macOS/Windows
cppauto mute = settingService.getConversationMuteStatus(conversationId);
Web/uni-app/小程序
typescriptnim.V2NIMSettingService.getConversationMuteStatus('sender|1|receiver')
Harmony
typescriptawait nim.settingService.getConversationMuteStatus('sender|1|receiver')

推送/提醒全局免打扰

云信 NIM SDK 支持全局的推送属性设置,用于设置推送/提醒的全局免打扰。

对于 Android 端而言,设置推送包括离线推送和在线提醒的免打扰。


当用户不需要在接收第三方推送服务的离线推送或在线提醒,或者只需要接收某段时间的离线推送或在线提醒时,用户可以通过配置推送属性来实现。

前提条件

已实现第三方离线推送或在线提醒。

实现方法

开启第三方离线推送服务或在线提醒 的情况下,通过 setDndConfig 方法设置全局的免打扰时间段。

具体参数如下:

Android
Javavoid setDndConfig(V2NIMDndConfig config, V2NIMSuccessCallback<Void> success, V2NIMFailureCallback failure);
参数名称 类型 是否必填 默认值 说明
config V2NIMDndConfig - 全局免打扰配置信息
success V2NIMSuccessCallback - 设置成功回调
failure V2NIMFailureCallback - 设置失败回调,返回 错误码
iOS
Objective-C- (void)setDndConfig:(V2NIMDndConfig *)config;
参数名称 类型 是否必填 默认值 说明
config V2NIMDndConfig - 全局免打扰配置信息
success V2NIMSuccessCallback - 设置成功回调
failure V2NIMFailureCallback - 设置失败回调,返回 错误码
Windows/macOS
cppvirtual void v2::V2NIMSettingService::setDndConfig	(	V2NIMDndConfig 	config,
                                                        V2NIMSuccessCallback< void > 	success,
                                                        V2NIMFailureCallback 	failure 
)		
参数名称 类型 是否必填 默认值 说明
config V2NIMDndConfig - 全局免打扰配置信息
success V2NIMSuccessCallback - 设置成功回调
failure V2NIMFailureCallback - 设置失败回调,返回 错误码
HarmonyOS
TypeScriptsetDndConfig(config: V2NIMDndConfig): Promise<void>
参数名称 类型 是否必填 默认值 说明
config V2NIMDndConfig - 全局免打扰配置信息。

示例代码如下:

Android
JavaV2NIMDndConfig dndConfig = V2NIMDndConfig.V2NIMDndConfigBuilder.builder(fromH, fromM, toH, toM).build();
NIMClient.getService(V2NIMSettingService.class).setDndConfig(dndConfig,
        new V2NIMSuccessCallback<Void>() {
            @Override
            public void onSuccess(Void unused) {

            }
        },
        new V2NIMFailureCallback() {
            @Override
            public void onFailure(V2NIMError error) {

            }
        });
iOS
Objective-C[[[NIMSDK sharedSDK] v2SettingService] setDndConfig:config];
Windows/macOS
cppV2NIMDndConfig config;
settingService.setDndConfig(
    config,
    []() {
        // set dnd config succeeded
    },
    [](V2NIMError error) {
        // set dnd config failed, handle error
    });
);
HarmonyOS
TypeScriptconst res = await nim.settingService.setDndConfig({
showDetail: true,
dndOn: true,
fromH: 22,
fromM: 30,
toH: 6,
toM: 30
} as V2NIMDndConfig)
  • 设置完成后,可以调用 getDndConfig 方法获取推送服务免打扰的时间。
  • 对于 Android 端,您也可以调用 enable 方法关闭第三方推送服务,关闭后,将不再接收离线推送消息。
  • 对于 Android 端,您也可以通过初始化参数 SDKOptions.statusBarNotificationConfig 来控制通知栏消息提醒功能,将其设置为 null,即 SDK 不提供通知栏提醒功能。
此文档是否对你有帮助?
有帮助
去反馈
  • 单聊消息免打扰
  • 注册单聊消息免打扰监听
  • 设置单聊消息免打扰模式
  • 获取单聊消息免打扰状态
  • 群聊消息免打扰
  • 注册群消息免打扰监听
  • 设置群消息免打扰
  • 获取群消息免打扰状态
  • 获取会话消息免打扰状态
  • 推送/提醒全局免打扰
  • 前提条件
  • 实现方法