用户
<p>[TOC]</p>
<h2>用户</h2>
<p><code>QDIMUserManager</code> 提供了用户账号资料管理。</p>
<p>QDUser 原型</p>
<pre><code>@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;
@property (nullable, nonatomic, copy) NSString *extdata1;
@property (nullable, nonatomic, copy) NSString *extdata2;
@property (nullable, nonatomic, copy) NSString *extdata3;
@property (nullable, nonatomic, copy) NSString *extdata4;
@property (nullable, nonatomic, copy) NSString *extdata5;
/**
* 会话是否置顶
*
* @return 是否置顶
*/
- (BOOL)sessionIsTop;
/**
* 是否需要消息提醒
*
* @return 是否需要消息提醒
*/
- (BOOL)notifyForNewMsg;
/**
* 是否在黑名单中
*
* @return 是否在黑名单中
*/
- (BOOL)isInMyBlackList;
/**
* 聊天背景图片url (本地存储使用)
*
* @return url
*/
- (NSString *)imgurlSessionBackground;
@end</code></pre>
<h2>登录用户的用户信息以及部分系统配置</h2>
<p><code>QDLoginInfo</code> 提供了用户账号资料管理, 配置信息配合WorkPro部分功能使用</p>
<pre><code>/**
* 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)enableSaveFileToYunPan;
/**
* 禁止搜索外部联系人
*/
- (BOOL)disableSearchExternalContact;
/**
* 是否开启群主销毁消息功能
*/
- (BOOL)enableGroupOwnerDestoryMessage;
/**
* 单对单音视频是否使用Linphone
*/
- (BOOL)enableP2PLinphone;
/**
* 是否无感知撤回消息
*/
- (BOOL)enableNoPerceivedRecallMessage;
</code></pre>
<h2>获取本地用户资料</h2>
<pre><code>@protocol QDIMUserManager
/**
从本地获取用户资料
@param userId 用户Id
@return 用户信息对象
*/
- (nullable QDUser *)userInfo:(NSString *)userId;
@end</code></pre>
<p>示例</p>
<pre><code>QDUser *user = [[[QDClient sharedClient] userManager] userInfo:@"userId"];</code></pre>
<p>用户资料除自己之外,不保证其他用户资料实时更新。其他用户数据更新时机为:</p>
<ul>
<li>调用 <code>- (void)fetchUserInfos:completion:</code> 方法刷新用户</li>
<li>收到此用户发来消息</li>
</ul>
<p>获取服务器用户资料</p>
<pre><code>@protocol QDIMUserManager
/**
批量获取用户信息接口
@param users 用户Id列表
@param completion 用户信息回调
*/
- (void)fetchUserInfos:(NSArray<NSString *> *)users
completion:(void (^ _Nullable)(NSArray<QDUser *> * _Nullable userList, NSError * _Nullable error))completion;
@end</code></pre>
<p>此接口可以批量从服务器获取用户资料,出于用户体验和流量成本考虑,不建议应用频繁调用此接口。对于用户数据实时性要求不高的页面,应尽量调用读取本地缓存接口。</p>
<h2>好友关系</h2>
<ul>
<li>获取好友列表</li>
</ul>
<pre><code>@protocol QDIMUserManager
/**
* 获取好友列表 (本地获取)
*
* @return 好友列表
*/
- (NSArray<QDUser *> *)getFriendList;
@end</code></pre>
<p>好友列表有本地缓存,缓存会在手动/自动登录后与服务器自动进行同步更新。接口返回的是 QDUser 列表。 QDUser 封装了开发者向我们服务端的好友ID,对此好友的会话设置(是否需要消息提醒,是否是拉黑用户等)。</p>
<ul>
<li>好友请求</li>
</ul>
<pre><code>@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</code></pre>
<ul>
<li>处理好友请求</li>
</ul>
<pre><code>@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</code></pre>
<ul>
<li>监听好友请求</li>
</ul>
<p>当好友邀请发出后,对方会收到一条系统通知消息 ( QDSystemNotification ) ,可以通过注册 QDIMSystemNotificationManager 中的 addDelegate: 回调来监听。</p>
<p>示例</p>
<pre><code>// QiNotificationCenter.m
[[QDClient sharedClient].systemNotificationManager addDelegate:self];</code></pre>
<ul>
<li>好友添加成功后,会触发回调: </li>
</ul>
<pre><code>@protocol QDIMUserManagerDelegate <NSObject>
/**
* 好友状态发生改变
*/
- (void)onFriendChanged:(QDUser *)user;
@end</code></pre>
<ul>
<li>删除好友 用户和用户之间可以解除好友关系</li>
</ul>
<pre><code>@protocol QDIMUserManager
/**
* 删除好友
*
* @param userID 好友的用户ID
* @param completion 回调
*/
- (void)deleteFriend:(NSString *)userID completion:(void(^ _Nullable)(NSError * _Nullable error))completion;
@end</code></pre>
<ul>
<li>解除成功后,会同时修改本地的缓存数据,并触发回调:</li>
</ul>
<pre><code>@protocol QDIMUserManagerDelegate <NSObject>
/**
* 好友状态发生改变
*/
- (void)onFriendChanged:(QDUser *)user;
@end</code></pre>
<h2>黑名单</h2>
<p>在关系服务中,黑名单和好友关系是互相独立的,即修改好友关系不会影响黑名单关系,同时,修改黑名单也不会对好友关系进行操作。</p>
<ul>
<li>获取黑名单成员列表</li>
</ul>
<pre><code>@protocol QDIMUserManager
/**
* 返回所有在黑名单中的用户列表
*
* @return 黑名单成员QDUser列表
*/
- (NSArray<QDUser *> *)myBlackList;
@end
</code></pre>
<p>黑名单列表有本地缓存,缓存会在手动/自动登录后与服务器自动进行同步更新。接口返回的是 QDUser 列表。 </p>
<ul>
<li>添加用户到黑名单</li>
</ul>
<pre><code>@protocol QDIMUserManager
/**
* 添加用户到黑名单
*
* @param userId 用户Id
* @param completion 完成回调
*/
- (void)addToBlackList:(NSString *)userId completion:(_Nullable QDUserBlock)completion;
@end
</code></pre>
<p>拉黑成功后,会同时修改本地缓存,并触发回调:</p>
<pre><code>
@protocol QDIMUserManagerDelegate <NSObject>
/**
* 黑名单列表发生变化 (在线)
*/
- (void)onBlackListChanged;
@end
</code></pre>
<ul>
<li>将用户从黑名单移除</li>
</ul>
<pre><code>@protocol QDIMUserManager
/**
* 将用户从黑名单移除
*
* @param userId 用户Id
* @param completion 完成回调
*/
- (void)removeFromBlackBlackList:(NSString *)userId completion:(_Nullable QDUserBlock)completion;
@end
</code></pre>
<p>移除成功后,会同时修改本地缓存,并触发回调:</p>
<pre><code>@protocol QDIMUserManagerDelegate <NSObject>
/**
* 黑名单列表发生变化 (在线)
*/
- (void)onBlackListChanged;
@end
</code></pre>
<ul>
<li>判断用户是否在自己的黑名单内</li>
</ul>
<pre><code>@protocol QDIMUserManager
/**
* 判断用户是否已被拉黑
*
* @param userId 用户Id
* @return 是否已被拉黑
*/
- (BOOL)isUserInBlackList:(NSString *)userId;
@end
</code></pre>
<h2>消息提醒</h2>
<p>在消息服务中,可以单独设置是否开启某个用户的消息提醒,即对某个用户静音。静音关系和好友关系是互相独立的,修改好友关系不会影响静音关系,同时,修改静音关系也不会对好友关系进行操作。</p>
<ul>
<li>获取静音成员列表</li>
</ul>
<pre><code>@protocol QDIMUserManager
/**
* 静音列表
*
* @return 返回被我设置为取消消息通知的QDUser列表
*/
- (nullable NSArray<QDUser *> *)myMuteUserList;
@end
</code></pre>
<p>静音列表有本地缓存,缓存会在手动/自动登录后与服务器自动进行同步更新。接口返回的是 QDUser 列表。</p>
<ul>
<li>设置消息提醒</li>
</ul>
<pre><code>@protocol QDIMUserManager
/**
* 设置消息提醒
*
* @param notify 是否提醒
* @param userId 用户Id
* @param completion 完成回调
*/
- (void)updateNotifyState:(BOOL)notify forUser:(NSString *)userId completion:(_Nullable QDUserBlock)completion;
@end
</code></pre>
<p>设置成功之后,同时更新本地缓存数据。</p>
<ul>
<li>用户是否有消息提醒</li>
</ul>
<pre><code>@protocol QDIMUserManager
/**
* 是否需要消息通知
*
* @param userId 用户Id
* @return 是否需要消息通知
*/
- (BOOL)notifyForNewMsg:(NSString *)userId;
@end
</code></pre>
<p>此接口是根据本地缓存数据来判断是否有消息提醒的,在调用时请保证本地缓存是正确的(登录后有正常完成数据同步)。</p>