iOS

用户资料

更新时间: 2024/03/14 17:08:34

NIMUserManager 提供了用户帐号资料管理。以下几个接口仅当选择云信托管用户资料时有效,如果开发者不希望云信获取自己的用户数据,则需自行维护用户资料。

NIMUserManager 里,使用 NIMUser 对用户进行封装。其中用户信息为 NIMUserInfo 属性。 具体的信息字段由 NIMUserInfoUpdateTag定义。 NIMUserInfoUpdateTag内置了多个常用信息字段(有格式校验)和一个拓展字段 NIMUserInfoUpdateTagEx 供开发者自行拓展。

NIMUser 原型

objc@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 原型

objc
@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 用户性别
email NSString 邮箱
birth NSString 生日
mobile NSString 电话号码
ext NSString 用户自定义扩展字段

获取用户资料

从本地获取用户资料

调用userInfo:方法可从本地获取用户资料。

目前userInfo:只支持在主线程调用,否则可能导致程序崩溃和数据读写丢失。

objc@protocol NIMUserManager <NSObject>

/**
 *  从本地获取用户资料
 *
 *  @param  userId 用户id
 *
 *  @return NIMUser
 *
 *  @discussion 需要将用户信息交给云信托管,且数据已经正常缓存到本地,此接口才有效。
 *              用户资料除自己之外,不保证其他用户资料实时更新
 *              其他用户资料更新的时机为: 1.调用 - (void)fetchUserInfos:completion: 方法刷新用户
 *                                    2.收到此用户发来消息
 *                                    3.程序再次启动,此时会同步部分好友信息
 */
- (nullable NIMUser *)userInfo:(NSString *)userId;

@end

示例

objcNIMUser *user = [[NIMSDK sharedSDK].userManager userInfo:@"userId"];

用户资料更新时机

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

  • 调用 - (void)fetchUserInfos:completion: 方法主动获取并刷新用户资料。

  • 收到其他用户发来消息。如果消息发送者有资料变更,SDK会负责更新并通过- (void)onUserInfoChanged:(NIMUser *)user回调出来。

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

从云端获取用户资料

objc@protocol NIMUserManager <NSObject>
/**
 *  从云信服务器批量获取用户资料
 *
 *  @param users       用户id列表
 *  @param completion  用户信息回调
 *
 *  @discussion 需要将用户信息交给云信托管,此接口才有效。调用此接口,不会触发 - (void)onUserInfoChanged: 回调。
 *              该接口会将获取到的用户信息缓存在本地,所以需要避免此接口的滥调,导致存储过多无用数据到本地而撑爆缓存:如在聊天室请求请求每个聊天室用户数据将造成缓存过大而影响程序性能
 *              本接口一次最多支持 150 个用户信息获取
 */
- (void)fetchUserInfos:(NSArray<NSString *> *)users
            completion:(nullable NIMUserInfoBlock)completion;
@end

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

编辑用户资料

对于自己的用户资料信息,用户可以调用修改接口去针对某些字段进行修改。

原型:

objc@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。云信提供了文件资源上传与下载服务。

文件资源上传:

objc@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协议主要方法一览:

objc@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

用户资料变更回调

当修改用户资料成功后,会触发回调:

objc@protocol NIMUserManagerDelegate <NSObject>
/** 
* 用户个人信息发生变化 (在线)
*/
- (void)onUserInfoChanged:(NIMUser *)user;
@end

用户检索

原型:

objc@protocol NIMUserManager <NSObject>
/**
*  查找成员
*
*  @param option      查询条件
*  @param completion  完成回调
*/
- (void)searchUserWithOption:(NIMUserSearchOption *)option
                  completion:(nullable NIMUserInfoBlock)completion;

参数列表:

参数 类型 说明
option NIMUserSearchOption 搜索选项
completion NIMUserInfoBlock 完成回调

NIMUserSearchOption原型:

objc@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 搜索文本
此文档是否对你有帮助?
有帮助
去反馈
  • 获取用户资料
  • 从本地获取用户资料
  • 用户资料更新时机
  • 从云端获取用户资料
  • 编辑用户资料
  • 头像资源处理
  • 用户资料变更回调
  • 用户检索