群消息管理

更新时间: 2024/05/31 16:04:52

网易云信 IM 支持群组中消息的收发,群组相关操作的通知类消息的接收,以及群消息通知模式的设置。

群消息收发及历史消息

在创建或加入群组后,用户发送和接收消息的接口与单聊消息收发相同,区别在于会话类型(V2NIMConversationType)的参数配置,V2NIM_CONVERSATION_TYPE_TEAM(2) 为高级群,V2NIM_CONVERSATION_TYPE_SUPER_TEAM(3) 为超大群。

  • 具体消息收发的流程,请参见消息收发
  • 历史消息查询、删除、搜索等相关功能,请参见历史消息

群通知消息

NIM SDK 支持的通知类消息(V2NIMMessageType.V2NIM_MESSAGE_TYPE_NOTIFICATION(5))主要用于群组、聊天室和超大群的事件通知,由服务端下发,客户端无法发送事件通知消息。

群通知消息类型

目前支持通知消息的事件类型如下:

V2NIMMessageNotificationType 枚举值 事件
V2NIM_MESSAGE_NOTIFICATION_TYPE_TEAM_INVITE 0 邀请成员入高级群
V2NIM_MESSAGE_NOTIFICATION_TYPE_TEAM_KICK 1 高级群成员被踢出
V2NIM_MESSAGE_NOTIFICATION_TYPE_TEAM_LAVE 2 高级群成员退群
V2NIM_MESSAGE_NOTIFICATION_TYPE_TEAM_UPDATE_TINFO 3 高级群信息更新
V2NIM_MESSAGE_NOTIFICATION_TYPE_TEAM_DISMISS 4 高级群被解散
V2NIM_MESSAGE_NOTIFICATION_TYPE_TEAM_APPLY_PASS 5 进高级群申请通过
V2NIM_MESSAGE_NOTIFICATION_TYPE_TEAM_OWNER_TRANSFER 6 高级群主身份转移
V2NIM_MESSAGE_NOTIFICATION_TYPE_TEAM_ADD_MANAGER 7 添加高级群管理员
V2NIM_MESSAGE_NOTIFICATION_TYPE_TEAM_REMOVE_MANAGER 8 移除高级群管理员
V2NIM_MESSAGE_NOTIFICATION_TYPE_TEAM_INVITE_ACCEPT 9 接受邀请进高级群
V2NIM_MESSAGE_NOTIFICATION_TYPE_TEAM_BANNED_TEAM_MEMBER 10 禁言高级群成员
V2NIM_MESSAGE_NOTIFICATION_TYPE_SUPER_TEAM_INVITE 401 超大群拉人
V2NIM_MESSAGE_NOTIFICATION_TYPE_SUPER_TEAM_KICK 402 超大群踢人
V2NIM_MESSAGE_NOTIFICATION_TYPE_SUPER_TEAM_LAVE 403 退出超大群
V2NIM_MESSAGE_NOTIFICATION_TYPE_SUPER_TEAM_UPDATE_TINFO 404 更新超大群信息
V2NIM_MESSAGE_NOTIFICATION_TYPE_SUPER_TEAM_DISMISS 405 超大群解散
V2NIM_MESSAGE_NOTIFICATION_TYPE_SUPER_TEAM_APPLY_PASS 410 超大群申请加入通过
V2NIM_MESSAGE_NOTIFICATION_TYPE_SUPER_TEAM_OWNER_TRANSFER 406 移交超大群主
V2NIM_MESSAGE_NOTIFICATION_TYPE_SUPER_TEAM_ADD_MANAGER 407 添加超大群管理员
V2NIM_MESSAGE_NOTIFICATION_TYPE_SUPER_TEAM_REMOVE_MANAGER 408 移除超大群管理员
V2NIM_MESSAGE_NOTIFICATION_TYPE_SUPER_TEAM_INVITE_ACCEPT 411 接受邀请进超大群
V2NIM_MESSAGE_NOTIFICATION_TYPE_SUPER_TEAM_BANNED_TEAM_MEMBER 409 禁言超大群成员

群通知消息解析步骤

  1. 通过 V2NIMMessage.messageType 判断是否为通知消息(V2NIM_MESSAGE_TYPE_NOTIFICATION)。
  2. V2NIMMessage.attachment 附件对象强类型转换为 V2NIMMessageNotificationAttachment
  3. 通过 V2NIMMessageNotificationAttachment.type 获取具体的通知类型 V2NIMMessageNotificationType
  4. 根据对应的 V2NIMMessageNotificationType 的类型构造相应的展示信息:
    • V2NIMMessage.senderId:事件的操作者 ID,表示是谁主动执行了该操作。
    • V2NIMMessageNotificationAttachment.targetIds:事件的被操作者 ID 列表,表示该操作的承受者。(事件类型 0、1、5、6、7、8、9、10 有该字段)
    • V2NIMMessageNotificationAttachment.chatBanned:群成员禁言状态
    • V2NIMMessageNotificationAttachment.updatedTeamInfo:群信息更新参数

群消息免打扰

NIM 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/小程序

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)

群消息已读回执

常见问题

在主动退群、被踢、解散群之后,会收到一条相应类型的群组通知消息,相关会话信息仍会保留,只是此后不再接收关于此群的消息。如果在收到相应的群通知消息之前将会话删除,则收到群通知消息后,SDK 会重建对应会话。因此,若需彻底删除群组会话,正确时机是收到相应类型的群通知消息之后。

  • 如何删除最近会话,请参见删除会话
  • 删除会话并不会自动删除会话对应的历史消息,如需删除历史消息,请参见删除历史消息

相关信息

此文档是否对你有帮助?
有帮助
去反馈
  • 群消息收发及历史消息
  • 群通知消息
  • 群通知消息类型
  • 群通知消息解析步骤
  • 群消息免打扰
  • 注册群消息免打扰监听
  • 设置群消息免打扰
  • 获取群免打扰状态
  • 群消息已读回执
  • 常见问题
  • 相关信息