用户

用户

QDIMUserManager 提供了用户账号资料管理。

QDUser 原型

@interface QDUser : NSObject

/**
 *  用户ID
 */
@property (nonatomic, copy)   NSString  *userId;

/**
 *  在组织架构里面的排序
 */
@property (nonatomic, assign) NSInteger index;

/**
 *  用户状态 0-未激活;1-正常;2-禁用;3-删除
 */
@property (nonatomic, assign) NSInteger userStatus;

/**
 *  用户昵称
 */
@property (nullable, nonatomic, copy)   NSString *nickname;

/**
 *  用户登录名
 */
@property (nullable, nonatomic, copy)   NSString *loginname;

/**
 *  备注名
 */
@property (nullable, nonatomic, copy)   NSString *alias;

/**
 *  头像信息
 */
@property (nullable, nonatomic, copy)   NSString *avatar;

/**
 *  性别 0:未知 1:男  2:女
 */
@property (nullable, nonatomic, copy)   NSString *sex;

/**
 *  生日
 */
@property (nullable, nonatomic, copy)   NSString *birthday;

/**
 *  简介
 */
@property (nullable, nonatomic, copy)   NSString *intro;

/**
 *  移动电话
 */
@property (nullable, nonatomic, copy)   NSString *mobile;

/**
 *  办公电话
 */
@property (nullable, nonatomic, copy)   NSString *OPhone;

/**
 *  职位
 */
@property (nullable, nonatomic, copy)   NSString *job;

/**
 *  员工号
 */
@property (nullable, nonatomic, copy)   NSString *empcode;

/**
 *  电子邮件
 */
@property (nullable, nonatomic, copy)   NSString *email;

/**
 *  房间号
 */
@property (nullable, nonatomic, copy)   NSString *roomNum;

/**
 *  短号
 */
@property (nullable, nonatomic, copy)   NSString *shortNum;

/**
 *  用户等级
 */
@property (nullable, nonatomic, copy)   NSString *secLevel;

/**
 *  地址
 */
@property (nullable, nonatomic, copy)   NSString *address;

/**
 *  最近离线时间
 */
@property (nullable, nonatomic, copy)   NSString *lastOffLineTime;

/**
 *  姓名简拼
 */
@property (nullable, nonatomic, copy)   NSString *nameSP;

/**
 *  姓名全拼
 */
@property (nullable, nonatomic, copy)   NSString *nameAP;

/**
 *  扩展字段
 */
@property (nullable, nonatomic, copy)   NSString *ext;

/**
 *  会话是否置顶
 *
 * @return 是否置顶
 */
- (BOOL)sessionIsTop;

/**
 *  是否需要消息提醒
 *
 *  @return 是否需要消息提醒
 */
- (BOOL)notifyForNewMsg;

/**
 *  是否在黑名单中
 *
 *  @return 是否在黑名单中
 */
- (BOOL)isInMyBlackList;


@end

登录用户的用户信息以及部分系统配置

QDLoginInfo 提供了用户账号资料管理, 配置信息配合WorkPro部分功能使用

/**
 *  ssid
 */
@property (nonatomic, copy)   NSString  *SSID;

/**
 *  账号
 */
@property (nonatomic, copy)   NSString  *userId;

/**
 *  用户名
 */
@property (nonatomic, copy)   NSString  *username;

/**
 *  登录名
 */
@property (nonatomic, copy)   NSString  *loginName;

/**
 * 用户头像
 */
@property (nonatomic, copy)   NSString  *userAvatar;

/**
 *  密码
 */
@property (nonatomic, copy)   NSString  *password;

/**
 *  加密类型
 */
@property (nonatomic, assign) NSInteger enType;

/**
 *  消息加密方式
 */
@property (nonatomic, assign) NSInteger  msgEntype;

/**
 *  登录Token
 */
@property (nonatomic, copy, nullable) NSString *token;

/**
 *  消息加密密钥
 */
@property (nonatomic, copy, nullable) NSString *msgToken;

/**
 *  会话ID
 */
@property (nonatomic, copy)   NSString     *sessionID;

/**
 *  登录服务器ID
 */
@property (nonatomic, copy)   NSString     *serverID;

/**
 *  序列号失效天数
 */
@property (nonatomic, assign) NSInteger    SLDay;

/**
 *  序列号提醒 1,试用到期剩余10天内提醒;2-注册到期剩余10天内提醒,3-试用到期提醒,4-注册到期提醒
 */
@property (nonatomic, assign) NSInteger    SLPrompt;

/**
 *  服务端配置属性
 */
@property (nonatomic, assign) NSInteger    CFlag;

/**
 *  服务端时间
 */
@property (nonatomic, copy)   NSString     *STime;

/**
 *  本地时间与服务器时间的差值
 */
@property (nonatomic, assign) NSInteger    STimeOffset;

/**
 *  公司名称
 */
@property (nonatomic, copy)   NSString     *scName;
/**
 * 皮肤版本号
 */
@property (nonatomic, copy)   NSString     *skinVer;

/**
 * 服务端保存的客户端版本号
 */
@property (nonatomic, copy)   NSString     *packVer;

/**
 版本类型 -1, 标准版本;2,专业版本(默认);3,国产化版本
 */
@property (nonatomic, assign) NSInteger    verType;

/**
 * 第三方集成授权
 */
@property (nonatomic, copy)   NSString     *verifytoken;

/**
 *  扩展属性
 */
@property (nonatomic, copy)   NSString     *client_ext;



// ======================================================================
// 所在组织架构公司、部门信息
// ======================================================================

/**
 *  所在公司
 */
@property (nonatomic, strong) NSArray<QDCompany *> *companys;

/**
 *  所在的部门
 */
@property (nonatomic, strong) NSArray<QDDept *>    *depts;


// ======================================================================
// 服务接口信息
// ======================================================================

/**
 *  域名
 */
@property (nonatomic, copy)   NSString     *domain;

/**
 *  登录服务器IP地址
 */
@property (nonatomic, copy)   NSString     *loginServer;

/**
 *  登录服务器端口
 */
@property (nonatomic, assign) int16_t      loginPort;

/**
 *  文件服务器地址
 */
@property (nonatomic, copy)   NSString     *fileServer;

/**
 *  文件服务器端口
 */
@property (nonatomic, assign) int16_t      filePort;

/**
 *  音视频服务器地址
 */
@property (nonatomic, copy)   NSString     *mediaServer;

/**
 *  web服务地址
 */
@property (nonatomic, copy)   NSString     *webServer;

/**
 *  web文件服务地址
 */
@property (nonatomic, copy)   NSString     *webFileServer;

// ======================================================================
// 权限配置
// ======================================================================

@property (nonatomic, strong) NSDictionary *powerDict;

@property (nonatomic, copy)   NSString     *authen;

@property (nonatomic, copy)   NSString     *appid;

@property (nonatomic, copy)   NSString     *appSecret;

@property (nonatomic, assign) int8_t       msg_ace;

@property (nonatomic, assign) int8_t       profile_edit;

@property (nonatomic, assign) int8_t       profile_view;

@property (nonatomic, assign) double       attach_size_limit;

@property (nonatomic, assign) NSInteger    video_use;

@property (nonatomic, assign) NSInteger    batch_person_limit;

// ======================================================================
// 高管配置
// ======================================================================

/**
 * 用户密级
 */
@property (nonatomic, copy)   NSString  *secLevel;

/**
 * 高管模式禁止策略 取值说明: 值叠加 1-禁止聊天 2-禁止查看联系方式
 */
@property (nonatomic, assign) NSInteger grade_disable_ace;

/**
 * 高管模式跨级策略 选择允许低级别用户跨级沟通:1,2,3,禁止跨级(0)
 */
@property (nonatomic, assign) NSInteger grade_cross_grade;

// ======================================================================
// 修改用户信息权限
// ======================================================================

/**
 * 是否可以修改职位
 */
- (BOOL)enableEditJob;
/**
 * 是否修改头像
 */
- (BOOL)enableEditPic;

/**
 * 是否可以修改电子邮件
 */
- (BOOL)enabelEditEmail;

/**
 * 是否可以修改手机号
 */
- (BOOL)enableEditMobile;

/**
  * 是否可以修改座机号
 */
- (BOOL)enabelEditOPhone;


// ======================================================================
// 查看用户信息权限
// ======================================================================

/**
 * 是否可以查看邮箱
 */
- (BOOL)enableViewEmail;

/**
 * 是否可以查看手机号
 */
- (BOOL)enableViewMobile;

/**
 * 是否可以查看座机
 */
- (BOOL)enableViewOPhone;

/**
 * 是否可以查看房间号
 */
- (BOOL)enableViewRoomNum;

// ======================================================================
// 功能权限
// ======================================================================

/**
 * 是否禁止语音功能
 */
- (BOOL)disableAudio;

/**
 * 是否禁止视频功能
 */
- (BOOL)disableVideo;

/**
 * 是否开启水印
 */
- (BOOL)enableWatermask;

/**
 * 是否禁止外部联系人互加好友
 */
- (BOOL)enableAddFriend;

/**
 * 是否禁止发送文件
 */
- (BOOL)disableSendFile;

/**
 * 是否禁止修改密码
 */
- (BOOL)disableChangePwd;

/**
 * 是否开启密聊功能
 */
- (BOOL)enableSecretChat;

/**
 * 是否开启用户安全等级
 */
- (BOOL)enableUserSecret;

/**
 * 是否设置门户为程序主页
 */
- (BOOL)enableHomePortal;

/**
 * 是否禁止按在线状态排序
 */
- (BOOL)disableOnlineSort;

/**
 * 是否禁止显示在线状态
 */
- (BOOL)disableShowOnline;

/**
 * 是否禁止群共享
 */
- (BOOL)disableGroupShare;

/**
 * 是否开启敏感词过滤
 */
- (BOOL)enableFilterSeword;

/**
 * 禁止文件下载
 */
- (BOOL)disableDownloadFile;

/**
 * 是否允许好友邀请
 */
- (BOOL)enableFriendInvited;

/**
 * 是否启用消息文件存储到云盘
 */
- (BOOL)enableSaveFileToYunPan;

/**
 * 禁止搜索外部联系人
 */
- (BOOL)disableSearchExternalContact;

/**
 * 是否开启群主销毁消息功能
 */
- (BOOL)enableGroupOwnerDestoryMessage;

/**
 * 单对单音视频是否使用Linphone
 */
- (BOOL)enableP2PLinphone;

获取本地用户资料

@protocol QDIMUserManager

/**
从本地获取用户资料

@param  userId 用户Id
@return 用户信息对象
*/
- (nullable QDUser *)userInfo:(NSString *)userId;

@end

示例

QDUser *user = [[[QDClient sharedClient] userManager] userInfo:@"userId"];

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

  • 调用 - (void)fetchUserInfos:completion: 方法刷新用户
  • 收到此用户发来消息

获取服务器用户资料

@protocol QDIMUserManager

/**
批量获取用户信息接口

@param users      用户Id列表
@param completion 用户信息回调
*/
- (void)fetchUserInfos:(NSArray<NSString *> *)users
completion:(void (^ _Nullable)(NSArray<QDUser *> * _Nullable userList, NSError * _Nullable error))completion;

@end

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

好友关系

  • 获取好友列表
@protocol QDIMUserManager

/**
*  获取好友列表 (本地获取)
*
*  @return 好友列表
*/
- (NSArray<QDUser *> *)getFriendList;

@end

好友列表有本地缓存,缓存会在手动/自动登录后与服务器自动进行同步更新。接口返回的是 QDUser 列表。 QDUser 封装了开发者向我们服务端的好友ID,对此好友的会话设置(是否需要消息提醒,是否是拉黑用户等)。

  • 好友请求
@protocol QDIMUserManager

/**
*  邀请好友
*
*  @param userId 用户Id
*  @param desc   原因描述
*  @param completion 回调
*/
- (void)inviteFriendWithUserId:(NSString *)userId desc:(nullable NSString *)desc completion:(void(^ _Nullable)(NSError * _Nullable error))completion;

@end
  • 处理好友请求
@protocol QDIMUserManager

/**
*  处理好友申请
*
*  @param userID      申请用户ID
*  @param isAgreement 是否同意好友申请
*  @param reason      原因描述
*  @param completion  回调
*/
- (void)dealWithFriendInvitedWithUserID:(NSString *)userID isAgreement:(BOOL)isAgreement reason:(nullable NSString *)reason completion:(void(^ _Nullable)(NSError * _Nullable error))completion;

@end
  • 监听好友请求

当好友邀请发出后,对方会收到一条系统通知消息 ( QDSystemNotification ) ,可以通过注册 QDIMSystemNotificationManager 中的 addDelegate: 回调来监听。

示例

// QiNotificationCenter.m

[[QDClient sharedClient].systemNotificationManager addDelegate:self];
  • 好友添加成功后,会触发回调:
@protocol QDIMUserManagerDelegate <NSObject>

/**
*  好友状态发生改变
*/
- (void)onFriendChanged:(QDUser *)user;

@end
  • 删除好友 用户和用户之间可以解除好友关系
@protocol QDIMUserManager

/**
*  删除好友
*
*  @param userID 好友的用户ID
*  @param completion 回调
*/
- (void)deleteFriend:(NSString *)userID completion:(void(^ _Nullable)(NSError * _Nullable error))completion;

@end
  • 解除成功后,会同时修改本地的缓存数据,并触发回调:
@protocol QDIMUserManagerDelegate <NSObject>

/**
*  好友状态发生改变
*/
- (void)onFriendChanged:(QDUser *)user;

@end

黑名单

在关系服务中,黑名单和好友关系是互相独立的,即修改好友关系不会影响黑名单关系,同时,修改黑名单也不会对好友关系进行操作。

  • 获取黑名单成员列表
@protocol QDIMUserManager

/**
*  返回所有在黑名单中的用户列表 
*
*  @return 黑名单成员QDUser列表
*/
- (NSArray<QDUser *> *)myBlackList;

@end

黑名单列表有本地缓存,缓存会在手动/自动登录后与服务器自动进行同步更新。接口返回的是 QDUser 列表。

  • 添加用户到黑名单
@protocol QDIMUserManager

/**
*  添加用户到黑名单
*
*  @param userId      用户Id
*  @param completion  完成回调
*/
- (void)addToBlackList:(NSString *)userId completion:(_Nullable QDUserBlock)completion;

@end

拉黑成功后,会同时修改本地缓存,并触发回调:


@protocol QDIMUserManagerDelegate <NSObject>

/**
*  黑名单列表发生变化 (在线)
*/
- (void)onBlackListChanged;

@end
  • 将用户从黑名单移除
@protocol QDIMUserManager

/**
*  将用户从黑名单移除
*
*  @param userId      用户Id
*  @param completion  完成回调
*/
- (void)removeFromBlackBlackList:(NSString *)userId completion:(_Nullable QDUserBlock)completion;

@end

移除成功后,会同时修改本地缓存,并触发回调:

@protocol QDIMUserManagerDelegate <NSObject>

/**
*  黑名单列表发生变化 (在线)
*/
- (void)onBlackListChanged;

@end
  • 判断用户是否在自己的黑名单内
@protocol QDIMUserManager

/**
*  判断用户是否已被拉黑
*
*  @param userId 用户Id
*  @return       是否已被拉黑
*/
- (BOOL)isUserInBlackList:(NSString *)userId;

@end

消息提醒

在消息服务中,可以单独设置是否开启某个用户的消息提醒,即对某个用户静音。静音关系和好友关系是互相独立的,修改好友关系不会影响静音关系,同时,修改静音关系也不会对好友关系进行操作。

  • 获取静音成员列表
@protocol QDIMUserManager

/**
*  静音列表
*
*  @return 返回被我设置为取消消息通知的QDUser列表
*/
- (nullable NSArray<QDUser *> *)myMuteUserList;

@end

静音列表有本地缓存,缓存会在手动/自动登录后与服务器自动进行同步更新。接口返回的是 QDUser 列表。

  • 设置消息提醒
@protocol QDIMUserManager

/**
*  设置消息提醒
*
*  @param notify      是否提醒
*  @param userId      用户Id
*  @param completion  完成回调
*/
- (void)updateNotifyState:(BOOL)notify forUser:(NSString *)userId completion:(_Nullable QDUserBlock)completion;

@end

设置成功之后,同时更新本地缓存数据。

  • 用户是否有消息提醒
@protocol QDIMUserManager

/**
*  是否需要消息通知
*
*  @param userId 用户Id
*  @return 是否需要消息通知
*/
- (BOOL)notifyForNewMsg:(NSString *)userId;

@end

此接口是根据本地缓存数据来判断是否有消息提醒的,在调用时请保证本地缓存是正确的(登录后有正常完成数据同步)。