群组成员列表
本文描述了应用层(App)如何为 IMKit SDK 提供群组成员数据,用于在群聊会话中输入 @符号时弹出的默认选人界面、发起群组音视频通话的选人界面。设置完成后,在 IMKit UI 中上需要展示群成员列表时可正常显示群组成员的头像、用户名或群内昵称。
融云服务端不向 SDK 提供用户与群组信息托管服务。因此 SDK 所需要的群组信息必须由应用开发者主动从 App 服务端获取,并提供给 SDK。
了解群组成员提供者接口
SDK 在 UserDataService
类中定义了群组成员提供者(UserDataProvider
)。在 IMKit UI 需要展示群成员列表时,会触发 UserDataProvider
的 fetchGroupMemberInfos
方法,向应用层获取群组成员信息。
应用开发者必须实现 UserDataService
的 [UserDataProvider.fetchGroupMemberInfos] 接口,SDK 才能获取到 App 的群组成员数据。如果 SDK 无法获取到群组成员,选人界面会显示为空列表。
设置群组成员提供者
在 init 之后调用 UserDataService
的 [setUserDataProvider] 方法设置群组成员信息提供者。SDK 所需要的群组成员数据必须由应用开发者主动从应用层(例如 App 服务端)获取。
在 IMKit UI 需要展示群成员列表时,SDK 会触发 fetchGroupMemberInfo
与 fetchGroupMemberInfos
回调,均需要应用开发者处理,详细说明如下。
fetchGroupMemberInfo
提供群组 ID 与群成员用户 ID。您可以在方法中根据群组 ID 和群成员用户 ID,从应用层查询用户信息,然后将 [GroupMemberInfoModel] 列表提供给 SDK。fetchGroupMemberInfos
,提供群组 ID。您可以在方法中根据群组 ID 获取群组内用户 ID,再根据用户 ID 从应用层查询用户信息,然后将 [GroupMemberInfoModel] 列表提供给 SDK。
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> {
// app 拿到群组成员信息后通过 Promise 返给 IMKit
// App 可以从数据库或者 APPServer 获取信息
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);
});
}
}
RongIM.getInstance().userDataService().setUserDataProvider(userDataProvider);
刷新群组成员信息
如果 App 本地持有群成员用户信息数据(例如用户的昵称和头像),可直接刷新本地缓存和数据库中存储的群成员用户信息(头像与昵称)。刷新后,IMKit UI 会展示最新的群成员用户信息
刷新群成员用户信息必须在 IMKit 已成功建立 IM 连接后操作,否则无法刷新本地数据。可能适用场景如下:
- App 首次启动,并成功建立 IM 连接以后,可以将自身业务所需的群成员用户信息批量提供给 SDK,由 SDK 写入缓存与本地数据库,供后续使用。
- 在 IM 建立连接后,如果用户昵称、头像等信息变动,由 App 服务端通知客户端,客户端调用接口刷新群成员用户信息。
let groupMemberInfoModel = new GroupMemberInfoModel("targetId", "userId", "name", "portraitUri", "alias")
RongIM.getInstance().userDataService().updateGroupMemberInfo(groupMemberInfoModel)