ZIM SDK 提供了群成员管理功能,支持查询群组成员列表、查询群组成员基本信息以及转让群主等功能。
在实现“群成员管理”功能之前,请确保:
用户使用“群成员管理”功能之前,请先加入某个群组,否则无法使用相关功能,详情请参考 加入群组。
)
用户登录、并加入某个群组后,如果想要了解自己所在群组都有哪些成员,可以通过调用 queryGroupMemberList 接口,分页查询该群组的成员列表。单次调用接口最多可获取 100 名成员,传入 count 超过 100 按照 100 处理。
查询成功后,用户可以通过 ZIMGroupMemberListQueriedCallback 收到查询结果。
截至当前版本,首次调用此接口拉取群成员列表时,可以获取群成员头像。再次调用此接口后,可以获取新增用户的头像信息,但存量用户的头像信息不会更新。
如需获取群成员最新头像,请调用接口 queryGroupMemberInfo 查询群成员信息。
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 收到查询结果。
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 收到通知。
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) |
|---|---|---|---|
| 修改群头像、群名称、群公告 | 支持 |
支持 |
支持 |
| 修改群属性 | |||
| 修改群成员昵称 | 支持,可对所有群角色用户使用此功能 |
支持,可对所有普通成员使用此功能 |
支持,仅可对自己使用此功能 |
| 撤回群成员消息 | |||
| 踢人 | 不支持。 |
||
| 对单独群成员禁言 | |||
| 对特定群角色禁言 | |||
| 设置群成员角色 | 不支持 |
||
| 转让群主 | |||
| 解散群组 | |||
| 全员禁言 |
virtual void setGroupMemberRole(int role, const std::string &groupID, const std::string &forUserID,
ZIMGroupMemberRoleUpdatedCallback callback) = 0;
| 参数 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
| role | int | 是 | 设置群成员角色。
|
| 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),将自己的群主角色,转让给其他群内成员。
转让成功后,群内成员可以通过 onGroupMemberInfoUpdated 收到群主变更的通知。
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 收到查询结果。
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 回调接口返回。
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 时,表示取消禁言。
设置成功后,操作用户可以通过 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 值说明如下:
如果当前用户既因群角色被禁言(详见 群组管理 - 禁言或解禁群组,又被单独禁言(详见本文 设置群成员禁言状态),则 mutedExpiredTime 值以“群禁言时间”与“单独被禁言时间”中的最大值为准。

联系我们
文档反馈