文档中心
IM 即时通讯
文档中心
体验 App
SDK 中心
API 中心
常见问题
代码市场
进入控制台
立即注册
登录
中文站 English
  • 文档中心
  • 即时通讯
  • 群组相关
  • 群成员管理

群成员管理

更新时间:2024-10-28 11:58

功能简介

ZIM SDK 提供了群成员管理功能,支持查询群组成员列表、查询群组成员基本信息以及转让群主等功能。

前提条件

在实现“群成员管理”功能之前,请确保:

  • 已在 ZEGO 控制台 创建项目,获取到了接入 ZIM SDK 服务所需的 AppID、AppSign。ZIM 服务权限不是默认开启的,使用前,请先在 ZEGO 控制台 自助开通 ZIM 服务(详情请参考控制台的 服务配置 - 即时通讯 - 开通服务),若无法开通 ZIM 服务,请联系 ZEGO 技术支持开通。
  • 已集成 ZIM SDK,详情请参考 快速开始 - 实现基本收发消息 的 “2 集成 SDK”。

实现流程

用户使用“群成员管理”功能之前,请先加入某个群组,否则无法使用相关功能,详情请参考 加入群组。

查询群成员列表

用户登录、并加入某个群组后,如果想要了解自己所在群组都有哪些成员,可以通过调用 queryGroupMemberList 接口,分页查询该群组的成员列表。单次调用接口最多可获取 100 名成员,传入 count 超过 100 按照 100 处理。

查询成功后,用户可以通过 ZIMGroupMemberListQueriedCallback 收到查询结果。

截至当前版本,首次调用此接口拉取群成员列表时,可以获取群成员头像。再次调用此接口后,可以获取新增用户的头像信息,但存量用户的头像信息不会更新。

如需获取群成员最新头像,请调用接口 queryGroupMemberInfo 查询群成员信息。

queryGroupMemberList 说明

virtual void queryGroupMemberList(const std::string &groupID, 
                                  ZIMGroupMemberQueryConfig &config,
                                  ZIMGroupMemberListQueriedCallback callback) = 0;
参数 类型 是否必填 说明
groupID const std::string & 是 查询群成员列表的群组 ID。
config ZIMGroupMemberQueryConfig & 是 查询群成员列表的高级属性配置。
callback ZIMGroupMemberListQueriedCallback 是 查询群成员列表操作的结果回调通知。

示例代码

// 群内成员查询群组的成员列表
zim::ZIMGroupMemberQueryConfig config;
config.count = 100;
config.nextFlag = 0;

zim_->queryGroupMemberList(group_id, config, 
    [=](const std::string &groupID, const std::vector<zim::ZIMGroupMemberInfo> userList,
        unsigned int nextFlag, zim::ZIMError errorInfo){
        int error_code = errorInfo.code;
    });

查询群成员信息

用户登录、并加入某个群组后,如果想要了解自己所在群组的某个成员的信息,可以通过调用 queryGroupMemberInfo 接口,查询该成员的个人信息。

查询成功后,用户可以通过 ZIMGroupMemberInfoQueriedCallback 收到查询结果。

queryGroupMemberInfo 说明

 virtual void queryGroupMemberInfo(const std::string &groupID,
                                   const std::string &userID,
                                   ZIMGroupMemberInfoQueriedCallback callback) = 0;
参数 类型 是否必填 说明
groupID const std::string & 是 获取群成员信息的群组 ID。
userID const std::string & 是 需要获取信息的群成员 userID。
callback ZIMGroupMemberInfoQueriedCallback 是 获取群成员信息操作的结果回调通知。

示例代码

// 群内成员查询群组内某个成员的信息
zim_->queryGroupMemberInfo(user_id, group_id, 
    [=](const std::string &groupID, const zim::ZIMGroupMemberInfo &userList, zim::ZIMError errorInfo){
        int error_code = errorInfo.code;
    });

设置群成员昵称

用户登录、并加入某个群组后,如果想要设置自己在群组中的昵称,可以通过调用 setGroupMemberNickname 接口,设置昵称。

在群组中,群主可以设置自己和其他群内成员该群中的昵称;其他群内成员仅可以设置自己该群中的昵称。

设置成功后,用户可以通过 ZIMGroupMemberNicknameUpdatedCallback 收到通知。

setGroupMemberNickname 说明

virtual void setGroupMemberNickname(const std::string &groupID, const std::string &forUserID,
                                        const std::string &nickname,
                                        ZIMGroupMemberNicknameUpdatedCallback callback) = 0;
参数 类型 是否必填 说明
groupID const std::string & 是 设置昵称的群组 ID。
forUserID const std::string & 是 设置昵称的群成员 ID。
nickname const std::string & 是 设置的昵称。
callback ZIMGroupMemberNicknameUpdatedCallback 是 设置群成员昵称操作的结果回调通知。

示例代码

// 群内成员设置昵称。
// 注意:群主可以设置自己和其他群内成员在该群中的昵称;其他群内成员仅可以设置自己在该群中的昵称。
zim_->setGroupMemberNickname(member_new_nick_name, user_id, group_id, 
    [=](const std::string &groupID, const std::string &userID,
        const std::string &userNickame, zim::ZIMError errorInfo){
        int error_code = errorInfo.code;
    });

设置群成员角色

群主登录 ZIM SDK 后,可以通过调用 setGroupMemberRole 接口,设置其他群内成员的角色,比如设置某个群成员为普通成员或者为管理员。

设置成功后,群主可以通过 ZIMGroupMemberRoleUpdatedCallback 类型收到设置结果。

群内成员可以通过 onGroupMemberInfoUpdated 收到用户角色变更的通知。

群成员角色与权限说明

ZIM SDK 默认支持将用户设置为群主、管理员、普通成员。在群组中,群主拥有所有客户端权限,可以实现所有群组功能。管理员拥有大部分客户端权限。普通成员拥有的客户端权限最少,具体如下表所示:

客户端权限 群主(对应枚举值为 1) 管理员(对应枚举值为 2) 普通成员(对应枚举值为 3)
修改群头像、群名称、群公告
支持
支持
支持
修改群属性
修改群成员昵称
支持,可对所有群角色用户使用此功能
支持,可对所有普通成员使用此功能
支持,仅可对自己使用此功能
撤回群成员消息
踢人
不支持。
对单独群成员禁言
对特定群角色禁言
设置群成员角色
不支持
转让群主
解散群组
全员禁言

setGroupMemberRole 说明

virtual void setGroupMemberRole(int role, const std::string &groupID, const std::string &forUserID, 
                                    ZIMGroupMemberRoleUpdatedCallback callback) = 0;
参数 类型 是否必填 说明
role int 是 设置群成员角色。
  • 1:群主。
  • 2:管理员。
  • 3:普通成员。
  • 其他值:如需自定义群角色,取值范围建议为 [100, 255],其权限与普通成员相同。
groupID const std::string & 是 设置群成员角色的群组 ID。
forUserID const std::string & 是 角色发生变化的群成员 ID。
callback ZIMGroupMemberRoleUpdatedCallback 是 设置群成员角色操作的结果回调通知。

示例代码

// 群主将普通成员用户设置为管理员
int role = 2;
zim_->setGroupMemberRole(role, for_user_id, group_id, 
    [=](int role, const std::string &forUserID, const std::string &groupID, zim::ZIMError errorInfo) {
        int error_code = errorInfo.code;
    });

转让群主

用户登录、并加入某个群组后,如果自己是某个群组中的群主,可以通过调用 transferGroupOwner 接口,传入 userID(被转让群主的群成员 ID),将自己的群主角色,转让给其他群内成员。

  • 群组中,只有群主向其他群内成员转让群主的角色。
  • 群主转让时,userID(被转让群主的用户 ID) 必须是本群组内的成员,否则会操作失败。

转让成功后,群内成员可以通过 onGroupMemberInfoUpdated 收到群主变更的通知。

transferGroupOwner 说明

virtual void transferGroupOwner(const std::string &toUserID, const std::string &groupID,
                                    ZIMGroupOwnerTransferredCallback callback) = 0;
参数 类型 是否必填 说明
toUserID const std::string & 是 被转让群主的群成员 ID。
groupID const std::string & 是 转让群主的群组 ID。
callback ZIMGroupOwnerTransferredCallback 是 群主转让操作的结果回调通知。

示例代码

// 转让群主身份给其他群内成员
zim_->transferGroupOwner(new_group_owner_id, group_id, 
    [=](const std::string &groupID, const std::string &toUserID, zim::ZIMError errorInfo){
        int error_code = errorInfo.code;
    });

查询群内成员数量

用户登录、并加入某个群组后,如果想要了解自己所在群组的成员数量,可以通过调用 queryGroupMemberCount 接口,查询该群成员的数量。

查询成功后,用户可以通过 ZIMGroupMemberCountQueriedCallback 收到查询结果。

queryGroupMemberCount 说明

virtual void queryGroupMemberCount(const std::string &groupID,
                                   ZIMGroupMemberCountQueriedCallback callback) = 0;
参数 类型 是否必填 说明
groupID const std::string & 是 需要查询的群组 ID。
callback ZIMGroupMemberCountQueriedCallback 是 获取群成员数量操作的结果回调通知。

示例代码

// 群内成员 查询群组内成员的数量
zim_->queryGroupMemberCount(
        group_id, [=](const std::string &groupID, unsigned int count,
                          const zim::ZIMError &errorInfo) { 
                int code = errorInfo.code; 
    });

搜索群成员

用户登录 ZIM SDK、并加入群组后,如果想要根据条件在群成员中搜索用户,可以通过调用 searchLocalGroupMembers 接口,传入 groupID、config、callback 搜索符合条件的群成员。

搜索结果将通过 ZIMGroupMembersSearchedCallback 回调接口返回。

searchLocalGroupMembers 说明

virtual void searchLocalGroupMembers(const std::string &groupID,
                                     const ZIMGroupMemberSearchConfig &config,
                                     ZIMGroupMembersSearchedCallback callback) = 0;
参数 类型 是否必填 说明
groupID const std::string & 是 需要搜索的群组 ID(必须为已加入的群)。
config const ZIMGroupMemberSearchConfig & 是 群成员搜索配置。
callback ZIMGroupMembersSearchedCallback 是 可通过该回调获取搜索到的群成员信息。

ZIMGroupMemberSearchConfig 参数说明

参数 类型 是否必填 说明
nextFlag unsigned int 否 查询的 flag ,第一次调用接口时填 0。后续再次调用接口时填从 callback 里返回的 nextFlag,以便获取剩余数据。
count unsigned int 是 搜索一次,可获取的群成员数量,上限为 30。建议小于 20,以降低性能开销。
keywords std::vector<std::string> 是 搜索关键字,最多支持 5 个,否则会报错。例如:传入 "1" 和 "2",则搜索结果只会展示名称同时包含 "1" 和 "2" 这两个关键字的群成员。
isAlsoMatchGroupMemberNickname bool 否 搜索范围是否包括群成员昵称,默认为 false。

示例代码

// 在某个群组中搜索名称中包含 “zego” 的群成员
auto searchConfig = zim::ZIMGroupMemberSearchConfig();
searchConfig.count = 10;
searchConfig.nextFlag = 0;
// 如果群成员昵称包含 zego ,搜索结果将包含该成员
searchConfig.isAlsoMatchGroupMemberNickname = true;
searchConfig.keywords.emplace_back("zego");

zim_->searchLocalGroupMembers(groupID, searchConfig,
                              [=](const std::string &groupID,
                                  const std::vector<zim::ZIMGroupMemberInfo> &userList,
                                  unsigned int nextFlag, const zim::ZIMError &errorInfo) {
                                    // 开发者可从 userList 中获取到群成员信息
                                });

设置群成员禁言状态

登录 ZIM SDK 后,用户可以禁言或解禁自己管理的群组内的特定成员。调用 muteGroupMembers 接口,批量修改 100 名群成员的禁言状态。禁言期限可为永久(ZIMGroupMemberMuteConfig > duration 为 -1)或最长为 7 天(ZIMGroupMemberMuteConfig > duration 为 604800)。当 ZIMGroupMemberMuteConfig > duration 为 0 时,表示取消禁言。

  • 群主可以禁止所有群成员发言,包括自己。
  • 如需上调单次操作数量或最长禁言期限,请联系 ZEGO 技术支持。

设置成功后,操作用户可以通过 ZIMGroupMembersMutedCallback 收到通知。

禁言或解禁成功后,全体群成员会收到 onGroupMemberInfoUpdated,得知哪些群成员无法在该群组发言或解除禁言状态。

如果您希望禁止特定群成员角色发言,请参考 群组管理 - 禁言或解禁群组。

bool is_mute = true;

std::vector<std::string> user_id_list;
user_id_list.push_back("user_1");
user_id_list.push_back("user_3");
user_id_list.push_back("user_2");

std::string group_id = "group_id";

zim::ZIMGroupMemberMuteConfig config;
config.duration = 30;

zim_->muteGroupMembers(is_mute, user_id_list, group_id, config,
    [=](const std::string &groupID, bool is_muted, unsigned int duration,
        const std::vector<std::string> &mutedMemberIDs,
        const std::vector<zim::ZIMErrorUserInfo> &errorUserList,
        const zim::ZIMError &errorInfo) {
        // 开发者可从回调各参数中获取到禁言结果相关信息
    });

查询群内禁言成员列表

登录 ZIM SDK 后,群成员如需了解所在群组的被禁言成员列表,可调用 queryGroupMemberMutedList 接口进行查询。

查询成功后,操作用户可通过 ZIMGroupMemberMutedListQueriedCallback 获取具体信息。

// 群内成员查询群组的成员列表
zim::ZIMGroupMemberMutedListQueryConfig config;
// 单次获取成员数量为 100
config.count = 100;
config.nextFlag = 0;

zim_->queryGroupMemberMutedList(
    group_id, config,
    [=](const std::string &groupID, unsigned long long nextFlag,
        const std::vector<zim::ZIMGroupMemberInfo> &info, const zim::ZIMError &errorInfo) {
    // 开发者可以从 info 中拿到被禁言群成员信息
    });

获取当前群成员禁言状态

如需主动获取当前用户在群组的禁言状态,请通过以下任意方法:

  • 参考 会话管理 - 拉取会话列表 主动拉取会话列表。
  • 参考 会话管理 - 更新会话列表,监听会话变更回调,更新会话列表。

当会话类型是群类型时,从返回结果中的 ZIMGroupConversation 获取 mutedExpiredTime,即群禁言时间,单位为秒。

mutedExpiredTime 值说明如下:

  • 为 -1 时,表示当前用户永久无法在该群组发言。
  • 为 0 时,表示当前用户可以在该群组发言。
  • 为其他值时,表示当前用户于该数值时间内无法在该群组发言。

如果当前用户既因群角色被禁言(详见 群组管理 - 禁言或解禁群组,又被单独禁言(详见本文 设置群成员禁言状态),则 mutedExpiredTime 值以“群禁言时间”与“单独被禁言时间”中的最大值为准。

本篇目录
  • 免费试用
  • 提交工单
    咨询集成、功能及报价等问题
    电话咨询
    400 1006 604
    咨询客服
    微信扫码,24h在线

    联系我们

  • 文档反馈