用户资料
更新时间: 2022/09/19 11:01:41
云信提供了用户资料托管,包含用户昵称,头像,生日,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<UserInfo>>() { ... });
说明:此接口可以批量从服务器获取用户资料,从用户体验和流量成本考虑,不建议应用频繁调用此接口。对于用户数据实时性要求不高的页面,应尽量调用读取本地缓存接口。
编辑用户资料
- 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 | 生日 |
电子邮箱 | |
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<UserInfo>> userInfoUpdateObserver = new Observer<List<UserInfo>>() {
@Override
public void onEvent(List<UserInfo> 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);