用户资料
更新时间: 2022/12/19 19:13:09
NIMUserManager
提供了用户帐号资料管理。以下几个接口仅当选择云信托管用户资料时有效,如果开发者不希望云信获取自己的用户数据,则需自行维护用户资料。
NIMUserManager
里,使用 NIMUser
对用户进行封装。其中用户信息为 NIMUserInfo
属性。
具体的信息字段由 NIMUserInfoUpdateTag
定义。 NIMUserInfoUpdateTag
内置了多个常用信息字段(有格式校验)和一个拓展字段 NIMUserInfoUpdateTagEx
供开发者自行拓展。
NIMUser 原型
@interface NIMUser : NSObject
/**
* 用户 Id
*/
@property (nullable,nonatomic,copy) NSString *userId;
/**
* 备注名,长度限制为128个字符。
*/
@property (nullable,nonatomic,copy) NSString *alias;
/**
* 扩展字段
*/
@property (nullable,nonatomic,copy) NSString *ext;
/**
* 服务器扩展字段。该字段只能由服务器进行修改,客户端只能读取。
*/
@property (nullable, nonatomic, copy, readonly) NSString *serverExt;
/**
* 用户资料,仅当用户选择托管信息到云信时有效
* 用户资料除自己之外,不保证其他用户资料实时更新
* 其他用户资料更新的时机为: 1.调用 - (void)fetchUserInfos:completion: 方法刷新用户
* 2.收到此用户发来消息
* 3.程序再次启动,此时会同步好友信息
*/
@property (nullable,nonatomic,strong,readonly) NIMUserInfo *userInfo;
@end
属性列表
参数 | 类型 | 说明 |
---|---|---|
userId | NSString | 用户 Id |
alias | NSString | 备注名,长度限制为128个字符。 |
ext | NSString | 扩展字段 |
serverExt | NSString | 服务器扩展字段。该字段只能由服务器进行修改,客户端只能读取。 |
userInfo | NIMUserInfo | 用户资料,仅当用户选择托管信息到云信时有效,用户资料除自己之外,不保证其他用户资料实时更新 |
NIMUserInfo 原型
@interface NIMUserInfo : NSObject
/**
* 用户昵称
*/
@property (nullable,nonatomic,copy,readonly) NSString *nickName;
/**
* 用户头像
*/
@property (nullable,nonatomic,copy,readonly) NSString *avatarUrl;
/**
* 用户头像缩略图
* @discussion 仅适用于使用云信上传服务进行上传的资源,否则无效。
*/
@property (nullable,nonatomic,copy,readonly) NSString *thumbAvatarUrl;
/**
* 用户签名
*/
@property (nullable,nonatomic,copy,readonly) NSString *sign;
/**
* 用户性别
*/
@property (nonatomic,assign,readonly) NIMUserGender gender;
/**
* 邮箱
*/
@property (nullable,nonatomic,copy,readonly) NSString *email;
/**
* 生日
*/
@property (nullable,nonatomic,copy,readonly) NSString *birth;
/**
* 电话号码
*/
@property (nullable,nonatomic,copy,readonly) NSString *mobile;
/**
* 用户自定义扩展字段
*/
@property (nullable,nonatomic,copy,readonly) NSString *ext;
@end
属性列表
参数 | 类型 | 说明 |
---|---|---|
nickName | NSString | 用户昵称 |
avatarUrl | NSString | 用户头像 |
thumbAvatarUrl | NSString | 用户头像缩略图,仅适用于使用云信上传服务进行上传的资源,否则无效。 |
sign | NSString | 用户签名 |
gender | NSString | 用户性别 |
NSString | 邮箱 | |
birth | NSString | 生日 |
mobile | NSString | 电话号码 |
ext | NSString | 用户自定义扩展字段 |
获取用户资料
从本地获取用户资料
调用userInfo:
方法可从本地获取用户资料。
目前userInfo:
只支持在主线程调用,否则可能导致程序崩溃和数据读写丢失。
@protocol NIMUserManager <NSObject>
/**
* 从本地获取用户资料
*
* @param userId 用户id
*
* @return NIMUser
*
* @discussion 需要将用户信息交给云信托管,且数据已经正常缓存到本地,此接口才有效。
* 用户资料除自己之外,不保证其他用户资料实时更新
* 其他用户资料更新的时机为: 1.调用 - (void)fetchUserInfos:completion: 方法刷新用户
* 2.收到此用户发来消息
* 3.程序再次启动,此时会同步部分好友信息
*/
- (nullable NIMUser *)userInfo:(NSString *)userId;
@end
示例
NIMUser *user = [[NIMSDK sharedSDK].userManager userInfo:@"userId"];
用户资料更新时机
SDK本地用户资料除自己之外,不保证其他用户资料实时更新。其他用户数据更新时机为:
-
调用
- (void)fetchUserInfos:completion:
方法主动获取并刷新用户资料。 -
收到其他用户发来消息。如果消息发送者有资料变更,SDK会负责更新并通过
- (void)onUserInfoChanged:(NIMUser *)user
回调出来。 -
登录后数据同步阶段,SDK会自动更新好友的用户资料。
从云端获取用户资料
@protocol NIMUserManager <NSObject>
/**
* 从云信服务器批量获取用户资料
*
* @param users 用户id列表
* @param completion 用户信息回调
*
* @discussion 需要将用户信息交给云信托管,此接口才有效。调用此接口,不会触发 - (void)onUserInfoChanged: 回调。
* 该接口会将获取到的用户信息缓存在本地,所以需要避免此接口的滥调,导致存储过多无用数据到本地而撑爆缓存:如在聊天室请求请求每个聊天室用户数据将造成缓存过大而影响程序性能
* 本接口一次最多支持 150 个用户信息获取
*/
- (void)fetchUserInfos:(NSArray<NSString *> *)users
completion:(nullable NIMUserInfoBlock)completion;
@end
此接口可以批量从服务器获取用户资料,出于用户体验和流量成本考虑,不建议应用频繁调用此接口。对于用户数据实时性要求不高的页面,应尽量调用读取本地缓存接口。
编辑用户资料
对于自己的用户资料信息,用户可以调用修改接口去针对某些字段进行修改。
原型:
@protocol NIMUserManager <NSObject>
/**
* 修改自己的用户资料
*
* @param values 需要更新的用户信息键值对
* @param completion 修改结果回调
*
* @discussion 这个接口可以一次性修改多个属性,如昵称,头像等,传入的数据键值对是 {@(NIMUserInfoUpdateTag) : NSString},
* 无效数据将被过滤。一些字段有修改限制,具体请参看 NIMUserInfoUpdateTag 的相关说明
*/
- (void)updateMyUserInfo:(NSDictionary<NSNumber *,NSString *> *)values
completion:(nullable NIMUserBlock)completion;
@end
只允许用户编辑自己的资料。此接口可以一次性编辑多个属性。如昵称,头像等,传入的数据键值对是 {@(NIMUserInfoUpdateTag) : NSString}
,无效数据将被过滤。一些字段有修改格式校验。具体限制为:
属性名 | 具体字段 | 类型限制 | 格式校验 |
---|---|---|---|
用户昵称 | NIMUserInfoUpdateTagNick |
NSString |
无 |
用户头像 | NIMUserInfoUpdateTagAvatar |
NSString |
无 |
用户签名 | NIMUserInfoUpdateTagSign |
NSString |
无 |
用户性别 | NIMUserInfoUpdateTagGender |
NIMUserGender |
只支持指定枚举 |
用户邮箱 | NIMUserInfoUpdateTagEmail |
NSString |
只支持合法邮箱 |
用户生日 | NIMUserInfoUpdateTagBirth |
NSString |
yyyy-MM-dd |
用户手机 | NIMUserInfoUpdateTagMobile |
NSString |
合法手机号 如13588888888、+(86)-13055555555 |
拓展字段 | NIMUserInfoUpdateTagExt |
NSString |
无 |
对某些资料内容另外的反垃圾的业务ID | NIMUserInfoUpdateTagAntispamBusinessId |
NSString |
无 |
头像资源处理
如要更新头像时,需要先将头像图片上传到云端后,再将 URL 传给 SDK。云信提供了文件资源上传与下载服务。
文件资源上传:
@protocol NIMResourceManager <NSObject>
/**
* 上传文件
* @param filepath 上传文件路径
* @param scene 场景类别
* @param progress 进度Block
* @param completion 结果回调
*
* @discussion 这个接口可以一次性修改多个属性,如昵称,头像等,传入的数据键值对是 {@(NIMUserInfoUpdateTag) : NSString},
* 无效数据将被过滤。一些字段有修改限制,具体请参看 NIMUserInfoUpdateTag 的相关说明
*/
- (void)upload:(NSString *)filepath
scene:(nonnull NSString *)scene
progress:(nullable NIMHttpProgressBlock)progress
completion:(nullable NIMUploadCompleteBlock)completion;
@end
其中,scene
具体参见NOS 资源场景。
NIMResourceManager
协议主要方法一览:
@protocol NIMResourceManager <NSObject>
/**
* 下载文件
*/
- (void)download:(NSString *)urlString
filepath:(NSString *)filepath
progress:(nullable NIMHttpProgressBlock)progress
completion:(nullable NIMDownloadCompleteBlock)completion;
/**
* 取消上传/下载任务
*/
- (void)cancelTask:(NSString *)filepath;
/**
* 规范化 URL 地址
*/
- (NSString *)normalizeURLString:(NSString *)urlString;
/**
* 将传入的 nos 图片 url 调整为缩略图形式 url
*/
- (NSString *)imageThumbnailURL:(NSString *)urlString;
/**
* 将传入的 nos 视频 url 调整为缩略图形式 url
*/
- (NSString *)videoThumbnailURL:(NSString *)urlString;
@end
用户资料变更回调
当修改用户资料成功后,会触发回调:
@protocol NIMUserManagerDelegate <NSObject>
/**
* 用户个人信息发生变化 (在线)
*/
- (void)onUserInfoChanged:(NIMUser *)user;
@end
用户检索
原型:
@protocol NIMUserManager <NSObject>
/**
* 查找成员
*
* @param option 查询条件
* @param completion 完成回调
*/
- (void)searchUserWithOption:(NIMUserSearchOption *)option
completion:(nullable NIMUserInfoBlock)completion;
参数列表:
参数 | 类型 | 说明 |
---|---|---|
option | NIMUserSearchOption | 搜索选项 |
completion | NIMUserInfoBlock | 完成回调 |
NIMUserSearchOption原型:
@interface NIMUserSearchOption : NSObject
/**
* 搜索文本的搜索范围。(默认:NIMUserSearchRangeOptionFriends)
*/
@property (nonatomic, assign) NIMUserSearchRangeOption searchRange;
/**
* 搜索文本的匹配区域。(默认:NIMUserSearchContentOptionAll)
*/
@property (nonatomic, assign) NIMUserSearchContentOption searchContentOption;
/**
* 忽略大小写。(默认:YES)
*/
@property (nonatomic, assign) BOOL ignoreingCase;
/**
* 搜索文本。
*/
@property (nullable,nonatomic,copy) NSString *searchContent;
参数列表:
参数 | 类型 | 说明 |
---|---|---|
searchRange | NIMUserSearchRangeOption | 搜索文本的搜索范围 |
searchContentOption | NIMUserSearchContentOption | 搜索文本的匹配区域 |
ignoreingCase | BOOL | 忽略大小写 |
searchContent | NSString | 搜索文本 |