自定义用户信息
更新时间: 2024/09/27 10:50:00
IM UIKit 自 v9.2.6 起,提供用户信息提供者(IUserInfoDelegate
),用于向您的应用获取用户信息。设置IUserInfoDelegate
后,您的应用仅需负责提供数据源,IM UIKit 获取数据后将自动调用IUserInfoDelegate
包含的方法设置、刷新用户头像与昵称等用户信息,并进行相关界面展示。
本文介绍IUserInfoDelegate
的内置方法以及如何设置IUserInfoDelegate
,实现用户信息的获取与更新。
用户信息提供者
IM UIKit 可通过用户信息提供者(IUserInfoDelegate
)从应用获取和更新用户信息。
IUserInfoDelegate 原型
java
public interface IUserInfoDelegate {
//同步获取用户信息数据
UserInfo getUserInfo(String account)
//异步获取用户数据
boolean fetchUserInfo(List<String> accountList, FetchCallback<List<UserInfo>> callback)
//用户数据更新
public void updateUserInfo(
@NonNull Map<UserField, ?> fields, @NonNull FetchCallback<Void> callback)
}
IM UIKit 可通过IUserInfoDelegate
的getUserInfo
方法从您的应用本地同步获取用户信息(该方法返回值可能为空)。为了不影响界面加载性能,建议不要在 IM UIKit 调用该方法时进行耗时操作。
javaIMKitClient.setUserInfoDelegate(new IUserInfoDelegate() {
@Override
public UserInfo getUserInfo(@NonNull String account) {
UserInfo userInfo = new UserInfo(account,"昵称","头像");
return userInfo;
}
...
},false);
IM UIKit 可通过IUserInfoDelegate
的fetchUserInfo
方法从您的应用服务端异步获取用户信息,IM UIKit 调用该方法时,您可进行耗时操作(请求网络等)。
- 该方法通过
FetchCallback
将数据回调给 IM UIKit。 - 该方法返回数据类型为
boolean
。如果返回true
,表示 IM UIKit 可通过该方法获取数据。如果返回false
,表示 IM UIKit 无法通过该方法获取数据,此时 IM UIKit 将等待数据回调。
javaIMKitClient.setUserInfoDelegate(new IUserInfoDelegate() {
...
@Override
public boolean fetchUserInfo(@NonNull List<String> accountList, @NonNull FetchCallback<List<UserInfo>> callback) {
List<UserInfo> userInfoList = new ArrayList<>();
for (String account:accountList){
userInfoList.add(UserInfo userInfo = new UserInfo(account,"昵称","头像"));
}
callback.onSuccess(userInfoList);
return true;
}
...
},false);
IM UIKit 可通过IUserInfoDelegate
的updateUserInfo
方法获取被修改的用户信息字段。
参数 | 说明 |
---|---|
UserField |
用户信息中包含的字段,如头像和昵称。 |
callback |
调用结果,成功或失败 |
javaIMKitClient.setUserInfoDelegate(new IUserInfoDelegate() {
...
@Override
public void updateUserInfo(@NonNull Map<UserField, ?> fields, @NonNull FetchCallback<Void> callback) {
}
},false);
前提条件
已完成 IM UIKit 的初始化且已加载相关界面。
建议您在界面加载之前设置用户信息提供者。以IM Demo中的使用场景为例,建议放在首页 MainActivity
中的onCreate
方法中,确保用户信息的获取在界面加载之前进行。
实现方法
调用IMKitClient
类中setUserInfoDelegate
方法设置用户信息提供者。设置之后,由您的应用来提供需要在界面显示的用户信息。调用时可通过useCache
参数设置用户信息缓存至内存。设置该功能之后,在应用的生命周期中,如果曾获取过用户或群组的信息,便会在内存中缓存该信息。只要 IM UIKit 可从缓存中获取到所需信息,便不会再触发调用获取用户信息的接口。
如不再需要用户信息提供者,可调用IMKitClient
类中removeUserInfoDelegate
方法进行移除。移除之后,由 NIM SDK 提供需要在界面显示的用户信息。
- API 原型
java//设置用户信息提供者。useCache代表是否使用内存缓存,如果使用则优先从内存中获取
IMKitClient.setUserInfoDelegate(IUserInfoDelegate delegate,boole useCache);
java//移除用户信息提供者
IMKitClient.removeUserInfoDelegate();
- 示例代码
javaIMKitClient.setUserInfoDelegate(new IUserInfoDelegate() {
@Override
public UserInfo getUserInfo(@NonNull String account) {
UserInfo userInfo = new UserInfo(account,"昵称","头像");
return userInfo;
}
@Override
public boolean fetchUserInfo(@NonNull List<String> accountList, @NonNull FetchCallback<List<UserInfo>> callback) {
List<UserInfo> userInfoList = new ArrayList<>();
for (String account:accountList){
userInfoList.add(UserInfo userInfo = new UserInfo(account,"昵称","头像"));
}
callback.onSuccess(userInfoList);
return true;
}
@Override
public void updateUserInfo(@NonNull Map<UserField, ?> fields, @NonNull FetchCallback<Void> callback) {
}
},false);
相关参考
用户信息说明
IM UIKit 通过UserInfo
字段定义用户信息,具体用户信息类型如下:
属性 |
类型 | 说明 |
---|---|---|
account |
String | 用户ID |
name |
String | 用户名称 |
avatar |
String | 用户头像 |
signature |
String | 用户签名 |
email |
String | 用户邮箱 |
mobile |
String | 用户手机号 |
extension |
String | 用户扩展字段 |
birthday |
String | 用户生日 |
genderEnum |
GenderEnum | 用户性别,枚举型 |
用户信息处理逻辑
在您设置用户信息提供者并自行实现相应逻辑之后,IM UIKit 处理用户信息的流程如下:
流程 |
说明 |
---|---|
1. | 如果已设置用户信息缓存至内存,那么当需要在界面上显示用户信息时,IM UIKit 首先从内存中查询已获取的缓存数据并进行界面渲染。如果未设置,则进入下一步 |
2. | IM UIKit 调用IUserInfoDelegate 的同步方法(getUserInfo )从应用本地获取用户信息。同步方法中允许您自行实现相应逻辑,让 IM UIKit 读取内存缓存数据或者持久化存储的本地数据。获取用户信息成功之后,IM UIKit 进行界面的渲染 |
3. | 如果上述同步方法获取到的数据为空,IM UIKit 调用IUserInfoDelegate 的异步方法(fetchUserInfo )从应用服务端获取用户信息,并在获取成功之后将用户信息回调给 IM UIKit。IM UIKit 收到数据之后进行界面渲染 |