好友

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

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

results matching ""

    No results matching ""