群组成员列表
本文描述了应用层(App)如何为 IMKit SDK 提供群组成员数据,用于在群聊会话中输入 @ 符号时弹出的默认选人界面的选人界面。设置完成后,在 IMKit UI 中上需要展示群成员列表时可 正常显示群组成员的头像、用户名或群内昵称。
提示
用户信息、群组信息、群成员用户信息必须由应用您主动从 App 服务端获取,并提供给 IMKit SDK。融云鸿蒙 SDK 不提供 App 用户与群组信息托管服务。融云服务端的用户昵称及头像仅用于推送服务。
群组成员提供者
设置群组成员提供者
使用 UserDataService
的 setUserDataProvider
方法设置群成员用户信息提供者。必须在 SDK 初始化之后,建立 IM 连接之前设置。建议在应用生命周期内设置。
应用开发者必须实现 UserDataProvider
的 fetchGroupMemberInfos
接口,SDK 才能获取到 App 的群组成员数据。如果 SDK 无法获取到群组成员列表, 选人界面会显示为空列表。
TypeScript
// 设置用户信息提供者
RongIM.getInstance().userDataService().setUserDataProvider(userDataProvider);
动态提供群组成员列表
S在 IMKit UI 需要展示群成员列表时,会触发 UserDataProvider
的 fetchGroupMemberInfos
方法,向应用层获取群组成员信息列表。
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 可以主动调用 UserDataService
的 getGroupMemberInfos
方法获取群成员用户信息。SDK 的行为如下:
- 首先尝试从本地缓存获取应用层提供的数据。
- 如果本地没有相关信息的数据,SDK 会触发
GroupUserInfoProvider
的fetchGroupMemberInfos
回调方法。如果您的 App 应用层已在该回调中提供数据,则 SDK 可成功获取群成员用户信息列表GroupMemberInfoModel
。
TypeScript
RongIM.getInstance().userDataService().getGroupMemberInfos("groupId")
.then((memberInfos: GroupMemberInfoModel[] | undefined) => {
// 群成员用户信息列表
})