自定义用户信息

更新时间: 2024/03/15 18:26:20

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 可通过IUserInfoDelegategetUserInfo 方法从您的应用本地同步获取用户信息(该方法返回值可能为空)。为了不影响界面加载性能,建议不要在 IM UIKit 调用该方法时进行耗时操作。

javaIMKitClient.setUserInfoDelegate(new IUserInfoDelegate() {
    @Override
    public UserInfo getUserInfo(@NonNull String account) {
        UserInfo userInfo = new UserInfo(account,"昵称","头像");
        return userInfo;
    }
    ...
},false);

获取应用服务端的用户信息

IM UIKit 可通过IUserInfoDelegatefetchUserInfo 方法从您的应用服务端异步获取用户信息,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 可通过IUserInfoDelegateupdateUserInfo方法获取被修改的用户信息字段。

参数 说明
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 收到数据之后进行界面渲染
此文档是否对你有帮助?
有帮助
去反馈
  • 用户信息提供者
  • 前提条件
  • 实现方法
  • 相关参考
  • 用户信息说明
  • 用户信息处理逻辑