Android

用户资料

更新时间: 2024/08/06 15:50:02

NetEase IM SDK(以下简称 NIM SDK)提供用户信息的托管,实现用户资料的统一管理和共享。

技术原理

NIM SDK 支持获取以及更新自己的用户资料信息,其中用户资料包括用户昵称、性别、头像、签名、手机、邮箱、生日等信息。SDK 中由 UserInfo 与其子接口 NimUserInfo 承载。

NIM SDK 会将用户资料缓存到本地,但是除自身的资料外,SDK 不保证其他用户资料的实时更新。以下事件会触发其他用户资料的更新:

  • 登录后数据同步阶段,SDK 会自动同步好友的用户资料。
  • 收到其他用户发来消息时,如果消息发送者有资料变更,则 SDK 会同步更新对方的用户资料并进行通知。
  • 直接调用 fetchUserInfo 方法主动从服务器获取并刷新最新的用户资料。

如果需要同步的用户资料较多,SDK 的同步时间会相对较长。

前提条件

登录 IM

监听用户资料变更事件回调

在进行用户相关操作前,可以调用 observeUserInfoUpdate 提前注册用户资料变更事件的监听。注册成功后,当用户资料发生变更时,SDK 会触发对应回调通知。

示例代码如下:

java// 注册/注销观察者
NIMClient.getService(UserServiceObserve.class).observeUserInfoUpdate(userInfoUpdateObserver, register);
// 用户资料变更观察者
private Observer<List<NimUserInfo>> userInfoUpdateObserver = new Observer<List<NimUserInfo>>() {
	@Override
	public void onEvent(List<NimUserInfo> users) {
	...
	}
};

更新本人的用户资料

调用 updateUserInfo 方法更新自己的用户资料。

更新资料成功后,SDK 会返回用户资料变更回调,并同步缓存到本地。

入参 fields 中传入需要更新的字段和新值,key 为字段,value 为对应的值。

示例代码如下:

javaMap<UserInfoFieldEnum, Object> fields = new HashMap<>(1);
fields.put(UserInfoFieldEnum.Name, "new name");
NIMClient.getService(UserService.class).updateUserInfo(fields)
    .setCallback(new RequestCallbackWrapper<Void>() { ... });
  • 如果需要更新头像,需要先将头像图片上传到云端后,再将 URL 传给 SDK。可以使用云信提供文件资源上传与下载服务,或其他第三方服务。

  • 云信自带的文件资源上传与下载服务由接口 NosServiceNosServiceObserve 提供。

获取所有用户资料

从本地获取用户资料

建议在您的应用中做好用户资料缓存,查询用户资料都通过本地缓存进行。在用户资料有变化时,SDK 会通过您注册的观察者触发回调来通知您。此时,您的应用可更新缓存,并刷新界面。

获取批量用户资料

调用 getUserInfoList 方法通过用户帐号集合,从本地数据库批量获取用户资料列表。

示例代码如下:

javaList<NimUserInfo> users = NIMClient.getService(UserService.class).getUserInfoList(accounts);

获取指定用户资料

调用 getUserInfo 方法通过用户账号,从本地数据库获取用户资料。

示例代码如下:

javaNimUserInfo user = NIMClient.getService(UserService.class).getUserInfo(account);

获取所有用户资料

调用 getAllUserInfo 方法获取本地数据库中所有的用户资料,一般适合在登录后构建用户资料缓存时使用。

示例代码如下:

javaList<NimUserInfo> users = NIMClient.getService(UserService.class).getAllUserInfo();

从云端获取用户资料

调用 fetchUserInfo 方法从服务器获取用户资料,一般在本地用户资料不存在时调用,获取后 SDK 会负责更新本地数据库。每次最多获取 150 个用户,如果量大,上层请自行分批获取。

示例代码如下:

javaNIMClient.getService(UserService.class).fetchUserInfo(accounts)
    .setCallback(new RequestCallback<List<NimUserInfo>>() { ... });

此接口可以批量从服务器获取用户资料,从用户体验和流量成本考虑,不建议应用频繁调用此接口。对于用户数据实时性要求不高的页面,应尽量调用读取本地缓存接口。

用户检索

云信 IM 支持根据用户昵称或其他关键字信息搜索用户的资料信息。

根据用户昵称检索

调用 searchAccountByName 方法从本地数据库中获取具有指定昵称的用户的账号列表。

示例代码如下:

javaNIMClient.getService(UserService.class).searchAccountByName("nick").setCallback(new RequestCallbackWrapper<List<String>>() {
    @Override
    public void onResult(int code, List<String> result, Throwable exception) {
        if (code == ResponseCode.RES_SUCCESS) {
            // 成功
        } else {
            // 失败,错误码见code
        }

        if (exception != null) {
            // error
        }
    }
});

根据关键字检索

调用 searchUserInfosByKeyword 方法搜索与关键字匹配的所有用户。

java/**
 * 搜索与关键字匹配的所有用户
 *
 * @param keyword 关键字
 * @return NimUserInfo
 */
InvocationFuture<java.util.List<NimUserInfo>> searchUserInfosByKeyword(java.lang.String keyword);
此文档是否对你有帮助?
有帮助
去反馈
  • 技术原理
  • 前提条件
  • 监听用户资料变更事件回调
  • 更新本人的用户资料
  • 获取所有用户资料
  • 从本地获取用户资料
  • 获取批量用户资料
  • 获取指定用户资料
  • 获取所有用户资料
  • 从云端获取用户资料
  • 用户检索
  • 根据用户昵称检索
  • 根据关键字检索