用户资料
更新时间: 2024/03/07 11:14:43
用户资料
云信提供了用户资料托管,包含用户昵称,头像,生日,Email,性别,手机号码,签名和扩展字段等,SDK 中由 NIMUser 承载。
- NIMUser 接口说明:
参数 | 类型 | 说明 |
---|---|---|
userId | String? | 用户帐号 |
avatar | String? | 用户头像地址 |
nick | String? | 返回用户名 |
birth | String? | 获取生日 |
String ? | 获取 Email | |
ext | String? | 获取扩展字段 |
gender | NIMUserGenderEnum? | 获取性别 |
mobile | String? | 获取手机号码 |
sign | String? | 获取签名 |
获取用户资料
从本地获取用户资料
由于用户资料变更需要跨进程异步调用,开发者最好能在第三方 APP 中做好用户资料缓存,查询用户资料时都从本地缓存中访问。在用户资料有变化时,SDK 会告诉注册的观察者,此时,第三方 APP 可更新缓存,并刷新界面。
获取指定用户资料
通过用户账号,从本地数据库获取用户资料。
- API 原型
dart/// 从本地数据库中获取用户资料
/// 通过用户账号[userId]查询并返回该用户的资料
Future<NIMResult<NIMUser>> getUserInfo(String userId);
- 示例
dartNIMResult<NIMUser> result = await NimCore.instance.userService
.getUserInfo(account);
用户资料更新时机
SDK本地用户资料除自己之外,不保证其他用户资料实时更新。其他用户数据更新时机为:
-
调用 fetchUserInfo 方法主动获取并刷新用户资料。
-
收到此用户发来消息(如果消息发送者有资料变更,SDK 会负责更新并通知)。
-
登录后数据同步阶段,SDK会自动更新好友的用户资料。
从云端获取用户资料
- API 介绍
从服务器获取用户资料,一般在本地用户资料不存在时调用,获取后 SDK 会负责更新本地数据库。每次最多获取150个用户,如果量大,上层请自行分批获取。
- API 原型
dart/// 从云端获取用户资料(每次最多获取150个用户,如果量大,上层请自行分批获取)
/// 通过用户账号列表[userIdList]查询并返回所有用户的资料列表
Future<NIMResult<List<NIMUser>>> fetchUserInfoList(List<String> userIdList);
- 示例
dartNIMResult<List<NIMUser>> result = await NimCore.instance.userService.fetchUserInfoList([account]);
说明:此接口可以批量从服务器获取用户资料,从用户体验和流量成本考虑,不建议应用频繁调用此接口。对于用户数据实时性要求不高的页面,应尽量调用读取本地缓存接口。
编辑用户资料
- API 原型
dart/// 更新本人用户资料
/// 修改为[user]提供的内容
Future<NIMResult<void>> updateMyUserInfo(NIMUser user);
- 参数说明
支持修改头像URL、生日、电子邮箱、扩展字段、性别、手机、昵称、签名
- SDK对部分字段进行格式校验:
字段 | 说明 |
---|---|
邮箱 | 必须为合法邮箱 |
手机号 | 必须为合法手机号 如 13588888888、+(86)-13055555555 |
生日 | 必须为 "yyyy-MM-dd" 格式 |
- 示例
dartNIMResult<void> result =
await NimCore.instance.userService.updateMyUserInfo(user);
头像资源处理
如要更新头像时,需要先将头像图片上传到云端后,再将 URL 传给 SDK。可以使用云信提供文件资源上传与下载服务,或其他第三方服务。
云信自带的文件资源上传与下载服务由接口 NimCore.instance.nosService 提供,详见 客户端API文档。
用户资料变更回调
- API 原型
通过监听NimCore.instance.userService.onUserInfoChange来实现
- 示例
dartNimCore.instance.userService.onUserInfoChange.listen((userInfoList) {
///用户信息变更列表
});
用户检索
根据昵称检索
从本地数据库中获取具有指定昵称的用户的账号列表
- API原型
dart/// 根据昵称反查账号列表
/// 通过昵称[nick]反查账号列表
Future<NIMResult<List<String>>> searchUserIdListByNick(String nick);
- 示例
dartNIMResult<List<String>> result = await NimCore.instance.userService.searchUserIdListByNick(account);
根据关键字检索
搜索与关键字匹配的所有用户:
dart/// 搜索与关键字匹配的所有用户
/// 通过关键字[keyword],返回与之匹配的所有的用户列表
NIMResult<List<NIMUser>> searchUserResult = await NimCore.instance.userService.searchUserInfoListByKeyword(keyword);