群成员管理
本文档指导您如何使用融云即时通讯(IM)Harmony IMLib SDK 实现设置或查询群组成员资料,添加或删除群管理员等功能。
提示
此功能从 1.8.0 版本开始支持。
开通服务
信息托管服务已默认开通,您可以直接使用此功能。
群成员
可以查询指定群组的群成员,也可以设置群成员信息。
分页获取群成员信息
使用 getGroupMembersByRole 按群成员角色分页获取群成员信息。
此接口支持返回本次查询条件的总数,见 PagingQueryResult 的 totalCount。
群成员角色 GroupMemberRole 枚举介绍:
| 枚举值 | 群成员角色 |
|---|---|
Undef | 未定义角色(使用此枚举查询代表查询全部类型群成员) |
Normal | 普通群成员 |
Manager | 群管理员 |
Owner | 群主 |
提示
分页拉取说明:
- 首次拉取时,PagingQueryOption 的
pageToken无需设置(设置 null、设置 "",效果等同)。 - 拉取第二页需要传入首次拉取返回结果 PagingQueryResult 类型中的
pageToken。- 如 果不为 "",则可以传入该值再次拉取,直至
pageToken返回为 "",表示全部拉取完成。 - 如果为 "",表示没有下一页或已拉取完成,无需再次拉取。如传递 "",将视为拉取首页数据。
- 如 果不为 "",则可以传入该值再次拉取,直至
代码示例
TypeScript
// 群组 ID
let groupId = "groupId";
// 通过 role 参数指定拉取全部群成员角色类型的群成员信息
let role : GroupMemberRole = GroupMemberRole.Undef; // 未定义角色(使用此枚举代表查询全部类型群成员)
// 分页拉取参数
let pageToken = "";
// 设置分页大小,取值范围为 [1~100]
let count = 10;
// 按加入群组时间正序、倒序获取。true:正序;false:倒序
let order = false;
// 分页请求参数
let paging_option = new PagingQueryOption(pageToken, count, order);
IMEngine.getInstance().getGroupMembersByRole(groupId, role, paging_option).then(result => {
if (EngineError.Success !== result.code) {
// 拉取失败
return;
}
if (result.data) {
let ret: PagingQueryResult<GroupMemberInfo> = result.data;
let pageToken: string = ret?.pageToken;
let totalCount: number = ret?.totalCount;
let data = Array.from(ret.data as Array<GroupMemberInfo>);
// 使用返回的 pageToken 拉取下一页
}
});
获取群成员信息
使用 getGroupMembers 获取指定群组指定用户的群成员信息。
该接口支持批量获取,您可以一次传入多个 userId 获取多个群 成员信息,最多不超过 100 个。
提示
若当前用户未加入指定群组,则无法获取群成员信息。
代码示例
TypeScript
// 群组 ID
let groupId = "groupId";
// 设置查询用户 ID 列表
let userIds = ["user1Id", "user2Id"];
IMEngine.getInstance().getGroupMembers(groupId, userIds).then(result => {
if (EngineError.Success !== result.code) {
// 拉取失败
return;
}
// 拉取成功
let ret: object = result;
if (result.data) {
ret = Array.from(result.data as Array<GroupMemberInfo>);
}
});
根据昵称搜索群成员信息
使用 searchGroupMembers 分页搜索本地群组中指定群组的群成员信息。
搜索时优先匹配群成员昵称 nickname,再匹配群成员用户名 name。只要其中一个字段匹配成功,即返回搜索结果。
此接口不支持返回所有群成员总数。
提示
分页拉取说明:
- 首次拉取时,PagingQueryOption 的
pageToken无需设置(设置 null、设置 "",效果等同) - 拉取第二页需要传入首次拉取返回结果 PagingQueryResult 类型中的
pageToken。- 如果不为 "",则可以传入该值再次拉取,直至
pageToken返回为 "",表示全部拉取完成。 - 如果为 "",表示没有下一页或已拉取完成,无需再次拉取。如传递 "",将视为拉取首页数据。
- 如果不为 "",则可以传入该值再次拉取,直至
代码示例
TypeScript
// 群组 ID
let groupId = "groupId";
// 群成员昵称,不能为空最长不超过 64 个字符
let nickname = "name";
// 分页请求参数
let pageToken = null; // 首次查询可 以传 null
// 设置分页大小,取值范围为 [1~200]
let count = 10;
// 按加入群组时间正序、倒序获取。true:正序;false:倒序
let order = false;
// 分页请求参数
let paging_option = new PagingQueryOption(pageToken, count, order);
IMEngine.getInstance().searchGroupMembers(groupId, nickname, paging_option).then(result => {
if (EngineError.Success !== result.code) {
// 拉取失败
return;
}
// 拉取成功
if (result.data) {
let ret: PagingQueryResult<GroupMemberInfo> = result.data;
let pageToken: string = ret.pageToken;
let totalCount: number = ret.totalCount;
let data = Array.from(ret.data as Array<GroupMemberInfo>);
// 使用返回的 pageToken 拉取下一页
}
});
设置群成员信息
使用 setGroupMemberInfo 设置指定群组的群成员信息。
接口调用成功后,群内所有人会收到群成员信息变更事件 onGroupMemberInfoChanged 回调。
群成员资料更新权限 memberInfoEditPermission(GroupMemberInfoEditPermission),决定是否可以修改群成员信息,如果没有权限设置,调用将会返回错误码。
GroupMemberInfoEditPermission 枚举介绍:
| 枚举值 | 群成员角色 |
|---|---|
OwnerOrManagerOrSelf | 群主、管理员和当前用户,可以修改在群组中的成员信息 |
OwnerOrSelf | 群主和当前用户,可以修改在群组中的成员信息 |
Self | 只有当前用户可以修改自己的群成员资料信息 |