IM 即时通讯
Android
开发指南

用户资料

更新时间: 2023/07/25 11:28:53

云信提供了用户资料托管,包含用户昵称,头像,生日,Email,性别,手机号码,签名和扩展字段等,SDK 中由 UserInfo 与其子接口 NimUserInfo 承载。

  • UserInfo 接口说明:
返回值 方法 说明
String getAccount() 返回用户帐号
String getAvatar() 返回用户头像地址
String getName() 返回用户名
  • NimUserInfo 接口说明:
返回值 方法 说明
String getBirthday() 获取生日
String getEmail() 获取 Email
String getExtension() 获取扩展字段
Map getExtensionMap() 获取扩展字段,返回 Map 格式
GenderEnum getGenderEnum() 获取性别
String getMobile() 获取手机号码
String getSignature() 获取签名

获取用户资料

从本地获取用户资料

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

获取批量用户资料

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

  • API 原型
/**
 * 从本地数据库中批量获取用户资料(同步接口)
 *
 * @param accounts 要获取的用户帐号集合
 * @return 用户资料列表
 */
List<NimUserInfo> getUserInfoList(List<String> accounts);
  • 参数说明
参数 说明
accounts 要获取的用户帐号集合
  • 示例
List<NimUserInfo> users = NIMClient.getService(UserService.class).getUserInfoList(accounts);

获取指定用户资料

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

  • API 原型
/**
 * 从本地数据库中获取用户资料(同步接口)
 *
 * @param account 要获取的用户账号
 * @return 用户资料
 */
NimUserInfo getUserInfo(String account);
  • 示例
NimUserInfo user = NIMClient.getService(UserService.class).getUserInfo(account);

获取所有用户资料

  • API 介绍

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

  • API 原型
/**
 * 获取本地数据库中所有用户资料
 *
 * @return 所有用户资料列表
 */
List<NimUserInfo> getAllUserInfo();
  • 示例
List<NimUserInfo> users = NIMClient.getService(UserService.class).getAllUserInfo();

用户资料更新时机

SDK本地用户资料除自己之外,不保证其他用户资料实时更新。其他用户数据更新时机为:

  • 调用 fetchUserInfo 方法主动获取并刷新用户资料。

  • 收到此用户发来消息(如果消息发送者有资料变更,SDK 会负责更新并通知)。

  • 登录后数据同步阶段,SDK会自动更新好友的用户资料。

从云端获取用户资料

  • API 介绍

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

  • API 原型
/**
 * 从服务器获取用户资料(每次最多获取150个用户,如果量大,上层请自行分批获取)
 *
 * @param accounts 要获取的用户帐号
 * @return InvocationFuture 可以设置回调函数。在用户资料存入数据库后就会回调。
 */
InvocationFuture<List<NimUserInfo>> fetchUserInfo(List<String> accounts);
  • 示例
NIMClient.getService(UserService.class).fetchUserInfo(accounts)
    .setCallback(new RequestCallback<List<NimUserInfo>>() { ... });

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

编辑用户资料

  • API 原型
/**
 * 更新本人用户资料
 *
 * @param fields 要更新的字段和新值, key为字段,value为对应的值
 * @return @return InvocationFuture 可以设置回调函数。
 */
InvocationFuture<Void> updateUserInfo(Map<UserInfoFieldEnum, Object> fields);
/**
 * 更新本人用户资料
 *
 * @param fields         要更新的字段和新值, key为字段,value为对应的值
 * @param antispamConfig 反垃圾相关配置参数
 * @return @return InvocationFuture 可以设置回调函数。
 */
InvocationFuture<Void> updateUserInfo(Map<UserInfoFieldEnum, Object> fields,
AntiSpamConfig antispamConfig);
  • 参数说明
参数 说明
fields 要更新的字段和新值, key 为字段,value 为对应的值
antispamConfig 要更新的字段和新值, key 为字段,value 为对应的值

传入参数 Map<UserInfoFieldEnum, Object> 更新用户本人资料,key 为字段,value 为对应的值。具体字段见 UserInfoFieldEnum

UserInfoFieldEnum 属性说明:

参数 说明
AVATAR 头像URL
BIRTHDAY 生日
EMAIL 电子邮箱
EXTEND 扩展字段,建议使用json
GENDER 性别
MOBILE 手机
Name 昵称
SIGNATURE 签名
undefined 未定义的域
  • SDK对部分字段进行格式校验:
字段 说明
邮箱 必须为合法邮箱
手机号 必须为合法手机号 如 13588888888、+(86)-13055555555
生日 必须为 "yyyy-MM-dd" 格式
  • 示例
Map<UserInfoFieldEnum, Object> fields = new HashMap<>(1);
fields.put(UserInfoFieldEnum.Name, "new name");
NIMClient.getService(UserService.class).updateUserInfo(fields)
    .setCallback(new RequestCallbackWrapper<Void>() { ... });

头像资源处理

如要更新头像时,需要先将头像图片上传到云端后,再将 URL 传给 SDK。可以使用云信提供文件资源上传与下载服务,或其他第三方服务。

云信自带的文件资源上传与下载服务由接口 NosService 与 NosServiceObserve 提供,详见 客户端API文档。

用户资料变更回调

  • API 原型
/**
 * 用户资料变更观察者通知
 *
 * @param observer 观察者,参数为更新后的用户资料列表
 * @param register true为注册,false为注销
 */
void observeUserInfoUpdate(Observer<List<NimUserInfo>> observer, boolean register);
  • 示例
// 注册/注销观察者
NIMClient.getService(UserServiceObserve.class).observeUserInfoUpdate(userInfoUpdateObserver, register);
// 用户资料变更观察者
private Observer<List<NimUserInfo>> userInfoUpdateObserver = new Observer<List<NimUserInfo>>() {
	@Override
	public void onEvent(List<NimUserInfo> users) {
	...
	}
};

用户检索

根据昵称检索

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

  • API原型
/**
 * 根据昵称反查账号
 *
 * @param name 昵称
 * @return 账号
 */
InvocationFuture<List<String>> searchAccountByName(String name);
  • 示例
NIMClient.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
        }
    }
});

根据关键字检索

搜索与关键字匹配的所有用户:

/**
 * 搜索与关键字匹配的所有用户
 *
 * @param keyword 关键字
 * @return NimUserInfo
 */
InvocationFuture<java.util.List<NimUserInfo>> searchUserInfosByKeyword(java.lang.String keyword);
此文档是否对你有帮助?
有帮助
去反馈
  • 获取用户资料
  • 从本地获取用户资料
  • 获取批量用户资料
  • 获取指定用户资料
  • 获取所有用户资料
  • 用户资料更新时机
  • 从云端获取用户资料
  • 编辑用户资料
  • 头像资源处理
  • 用户资料变更回调
  • 用户检索
  • 根据昵称检索
  • 根据关键字检索