好友
QDIMUserManager
提供了用户账号资料管理。
QDUser 原型
@interface QDUser : NSObject
/**
用户ID
*/
@property (nonatomic, copy) NSString *userId;
/**
备注名
*/
@property (nullable, nonatomic, copy) NSString *alias;
/**
扩展字段
*/
@property (nullable, nonatomic, copy) NSString *ext;
/**
是否需要消息提醒
@return 是否需要消息提醒
*/
- (BOOL)notifyForNewMsg;
/**
会话是否置顶
*/
- (BOOL)sessionisTop;
/**
是否在黑名单中
@return 是否在黑名单中
*/
- (BOOL)isInMyBlackList;
// ======================================================================
// 用户资料,仅当用户选择同步人员信息到IM服务端时有效
// ======================================================================
/**
用户昵称
*/
@property (nullable, nonatomic, copy) NSString *nickname;
/**
头像信息
*/
@property (nullable, nonatomic, copy) NSString *avatar;
/**
移动电话
*/
@property (nullable, nonatomic, copy) NSString *mobile;
/**
电子邮件
*/
@property (nullable, nonatomic, copy) NSString *email;
/**
性别 0:未知 1:男 2:女
*/
@property (nullable, nonatomic, copy) NSString *sex;
/**
姓名简拼
*/
@property (nullable, nonatomic, copy) NSString *nameSP;
/**
姓名全拼
*/
@property (nullable, nonatomic, copy) NSString *nameAP;
/**
生日
*/
@property (nullable, nonatomic, copy) NSString *birthday;
/**
简介
*/
@property (nullable, nonatomic, copy) NSString *intro;
@end
获取本地用户资料
@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
此接口可以批量从服务器获取用户资料,出于用户体验和流量成本考虑,不建议应用频繁调用此接口。对于用户数据实时性要求不高的页面,应尽量调用读取本地缓存接口。
用户关系托管
QDIMUserManager 提供了用户用户关系管理,以及对用户会话的消息设置。在SDK中,不是好友也允许聊天。用户关系如果不托管给我们服务,开发者需要自己在应用服务器维护。
好友关系
- 获取好友列表
@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
此接口是根据本地缓存数据来判断是否有消息提醒的,在调用时请保证本地缓存是正确的(登录后有正常完成数据同步)。