跳到主要内容

群查询

本文档旨在指导开发者如何使用融云即时通讯 Flutter IMLib SDK 实现获取本人已加入的群组、获取指定群组资料等功能。

提示

此功能从 5.18.0 版本开始支持。

开通服务

使用此功能前,您须在控制台开通信息托管服务。

群查询

可以查询或搜索我加入的群组。

查询群组信息

您可以调用 getGroupsInfo 方法查询群组信息。

  • 该方法优先本地查找,当用户不在群组中时,当本地不存在该群组信息或本地缓存超过10分钟时,才会从服务端获取最新群组信息
  • 单次调用最多支持获取 20 个群组资料。

代码示例

Dart
// 群Id列表
List<String> groupIds = ["groupId1", "groupId2", "groupId3"];

// 创建回调
IRCIMIWGetGroupsInfoCallback callback = IRCIMIWGetGroupsInfoCallback(
onSuccess: (List<RCIMIWGroupInfo>? groupInfos) {
// 获取群信息成功
if (groupInfos != null && groupInfos.isNotEmpty) {
for (RCIMIWGroupInfo info in groupInfos) {
print("群组 ${info.groupId} - 名称: ${info.groupName}");
}
}
},
onError: (RCIMIWCoreErrorCode? code) {
// 获取群信息失败
print("获取群信息失败,code: $code");
},
);

// 调用查询群组信息方法
int? code = await engine?.getGroupsInfo(
groupIds,
callback: callback,
);

获取指定已加入群组的资料

您可以使用 getJoinedGroups 根据当前用户已加入的群组 ID 查询群组信息。
该接口支持批量获取,您可以一次传入多个 groupId 获取多个群组资料,最多不超过 20 个。

代码示例

Dart
// 群Id列表
List<String> groupIds = ["groupId1", "groupId2", "groupId3"];

// 创建回调
IRCIMIWGetJoinedGroupsCallback callback = IRCIMIWGetJoinedGroupsCallback(
onSuccess: (List<RCIMIWGroupInfo>? groupInfos) {
// 获取成功
print("获取已加入群组成功,数量: ${groupInfos?.length}");
},
onError: (RCIMIWCoreErrorCode? code) {
// 获取失败
print("获取失败,code: $code");
},
);

// 调用获取已加入群组方法
int? code = await engine?.getJoinedGroups(
groupIds,
callback: callback,
);

按角色获取已加入群组的资料

您可以使用 getJoinedGroupsByRole 按群成员角色分页获取已加入的群组。

此接口支持返回本次查询条件的总数,见 RCIMIWPagingQueryOptiongetTotalCount 属性。

群成员角色 RCIMIWGroupMemberRole 枚举介绍:

枚举值群成员角色
undef未定义角色(使用此枚举查询代表查询全部类型群成员)
normal普通群成员
manager管理员
owner群主
提示

分页获取说明:

  1. 首次获取时,RCIMIWPagingQueryOptionpageToken 无需设置(不设置、设置null、设置"",效果等同)。
  2. 获取第二页需要传入首次获取返回结果 RCIMIWPagingQueryResult 类型中的 pageToken
    • 如果不为 "",则可以传入该值再次获取,直至 pageToken 返回为 "",表示全部获取完成。
    • 如果为 "",表示没有下一页或已获取完成,无需再次获取。如传递 "",将视为获取首页数据。

代码示例

Dart
// 分页获取参数(设置null与设置"",效果等同)
String pageToken = "";

Future<void> getJoinedGroupsByRole(String pageToken) async {
// 通过 role 参数指定获取全部群成员角色类型的群
RCIMIWGroupMemberRole role = RCIMIWGroupMemberRole.undef;

// 分页请求参数
RCIMIWPagingQueryOption option = RCIMIWPagingQueryOption.create(
count: 20, // 设置分页大小,取值范围为 [1~100]
pageToken: pageToken, // 分页获取参数
order: false, // 按加入群组时间正序、倒序获取。true:正序;false:倒序
);

// 创建回调
IRCIMIWGetJoinedGroupsByRoleCallback callback = IRCIMIWGetJoinedGroupsByRoleCallback(
onSuccess: (RCIMIWPagingQueryResult<RCIMIWGroupInfo>? result) {
if (result != null && result.pageToken.isNotEmpty) {
// 使用返回的 pageToken 获取下一页
getJoinedGroupsByRole(result.pageToken);
} else {
// 获取结束
print("获取完成");
}
},
onError: (RCIMIWCoreErrorCode? code) {
// 获取失败
print("获取失败,code: $code");
},
);

// 调用按角色获取已加入群组方法
int? code = await engine?.getJoinedGroupsByRole(
role,
option,
callback: callback,
);
}

按群名称搜索已加入群组的资料

您可以使用 searchJoinedGroups 根据群名称搜索已加入的群组。
此接口支持返回本次查询条件的总数,见 RCIMIWPagingQueryOptiongetTotalCount 属性。

代码示例

Dart
// 分页获取参数(设置null与设置"",效果等同)
String pageToken = "";

Future<void> searchJoinedGroups(String pageToken) async {
// 群名称
String groupName = "groupName";

// 分页请求参数
RCIMIWPagingQueryOption option = RCIMIWPagingQueryOption.create(
count: 20, // 设置分页大小,取值范围为 [1~200]
pageToken: pageToken, // 分页获取参数
order: false, // 按加入群组时间正序、倒序获取。true:正序;false:倒序
);

// 创建回调
IRCIMIWSearchJoinedGroupsCallback callback = IRCIMIWSearchJoinedGroupsCallback(
onSuccess: (RCIMIWPagingQueryResult<RCIMIWGroupInfo>? result) {
if (result != null && result.pageToken.isNotEmpty) {
// 使用返回的 pageToken 获取下一页
searchJoinedGroups(result.pageToken);
} else {
// 获取结束
print("搜索完成");
}
},
onError: (RCIMIWCoreErrorCode? code) {
// 获取失败
print("搜索失败,code: $code");
},
);

// 调用搜索已加入群组方法
int? code = await engine?.searchJoinedGroups(
groupName,
option,
callback: callback,
);
}