跳到主要内容

群组成员列表

本文描述了应用层(App)如何为 IMKit SDK 提供群组成员数据,用于在群聊会话中输入 @ 符号时弹出的默认选人界面的选人界面。设置完成后,在 IMKit UI 中上需要展示群成员列表时可正常显示群组成员的头像、用户名或群内昵称。

提示

用户信息、群组信息、群成员用户信息必须由应用您主动从 App 服务端获取,并提供给 IMKit SDK。融云鸿蒙 SDK 不提供 App 用户与群组信息托管服务。融云服务端的用户昵称及头像仅用于推送服务。

群组成员提供者

设置群组成员提供者

使用 UserDataServicesetUserDataProvider 方法设置群成员用户信息提供者。必须在 SDK 初始化之后,建立 IM 连接之前设置。建议在应用生命周期内设置。

应用开发者必须实现 UserDataProviderfetchGroupMemberInfos 接口,SDK 才能获取到 App 的群组成员数据。如果 SDK 无法获取到群组成员列表,选人界面会显示为空列表。

TypeScript
// 设置用户信息提供者
RongIM.getInstance().userDataService().setUserDataProvider(userDataProvider);

动态提供群组成员列表

S在 IMKit UI 需要展示群成员列表时,会触发 UserDataProviderfetchGroupMemberInfos 方法,向应用层获取群组成员信息列表。

TypeScript
let userDataProvider: UserDataProvider = {

fetchUserInfo: (userId: string): Promise<UserInfoModel> => {
// 用户信息
return new Promise((resolve: Function) => {
let userInfo = new UserInfoModel(userId, "用户名称", "用户头像")
resolve(userInfo);
});
},

fetchGroupInfo: (groupId: string): Promise<GroupInfoModel> => {
// 群信息
return new Promise((resolve: Function) => {
let info = new GroupInfoModel(groupId, "群组名称", "群组头像")
resolve(info);
});
},

fetchGroupMemberInfo: (groupId: string, userId: string): Promise<GroupMemberInfoModel> => {
// 群成员信息
return new Promise((resolve: Function) => {
let info = new GroupMemberInfoModel(groupId, userId, "群成员名称", "群成员头像")
resolve(info);
});
},

fetchGroupMemberInfos: (groupId: string): Promise<Array<GroupMemberInfoModel>> => {
// 群成员列表信息
// App 拿到群组所有成员信息后通过 Promise 返给 IMKit,App 可以从数据库或者 APPServer 获取信息
return new Promise((resolve: Function) => {
let array = new Array<GroupMemberInfoModel>();
for (let i = 0; i < 10; i++) {
let userId = "userId" + i;
let info = new GroupMemberInfoModel(groupId, userId, "群成员名称", "群成员头像")
array.push(info);
}
resolve(array);
});
},

/**
* 是否持久化存储用户信息到 SDK 的本地数据库, 默认为 true,
* @since 1.6.0
*/
isCacheUserInfo: true,

/**
* 是否持久化存储群组信息到 SDK 的本地数据库, 默认为 true,
* @since 1.6.0
*/
isCacheGroupInfo: true,

/**
* 是否持久化存储群成员信息到 SDK 的本地数据库, 默认为 true,
* @since 1.6.0
*/
isCacheGroupMemberInfo: true,
}

获取群成员用户信息列表

App 可以主动调用 UserDataServicegetGroupMemberInfos 方法获取群成员用户信息。SDK 的行为如下:

  1. 首先尝试从本地缓存获取应用层提供的数据。
  2. 如果本地没有相关信息的数据,SDK 会触发 GroupUserInfoProviderfetchGroupMemberInfos 回调方法。如果您的 App 应用层已在该回调中提供数据,则 SDK 可成功获取群成员用户信息列表 GroupMemberInfoModel
TypeScript
RongIM.getInstance().userDataService().getGroupMemberInfos("groupId")
.then((memberInfos: GroupMemberInfoModel[] | undefined) => {
// 群成员用户信息列表
})