iOS

用户关系

更新时间: 2024/08/08 14:59:22

云信 NIMUserManager 提提供好友关系、黑名单与免打扰三种内置用户关系。三种关系互相独立,互不影响。即任意两个用户之间可以同时存在这三种关系。

本文主要介绍好友关系的管理和维护。

技术原理

NIM SDK 支持添加/删除好友,设置好友信息,查询好友状态和信息等操作。

NIM SDK 添加好友的方式分为以下两种:

  • 直接添加好友,不需要对方同意。该模式下,调用接口成功后,本端和对端(被添加的好友)都会收到添加好友成功的回调。

  • 请求添加对方为好友,需要对方验证通过才能添加。该模式下,调用接口成功后,对端(被添加的好友)会收到好友申请的回调。

    • 对端可以接受好友申请,接受成功后,本端和对端都会收到添加好友成功的回调。
    • 对端也可以拒绝好友申请,拒绝成功后,发起好友申请的用户会收到拒绝好友申请的回调。

前提条件

登录 IM

监听好友关系变更事件回调

在进行好友相关操作前,可以提前注册好友关系变更事件(onFriendChanged)的监听。注册成功后,当好友关系发生变更时,SDK 会触发对应回调通知。

objc@protocol NIMUserManagerDelegate <NSObject>

@optional
/**
 *  好友关系发生变化 (在线)
 *
 *  @param user 用户对象
 */
- (void)onFriendChanged:(NIMUser *)user;
@end

监听系统通知事件回调

云信 NIM SDK 支持接收和存储内置系统通知。

好友关系的相关操作执行后,会触发响应的系统通知 NIMSystemNotification。好友相关的系统通知事件类型统一为 NIMSystemNotification。具体请参见 系统通知

  • 好友相关的系统通知 NIMSystemNotification - Type 字段值统一为 NIMSystemNotification

    NIMSystemNotification - sourceID 为操作者的账号。NIMSystemNotification - targetID 为目标 ID。NIMSystemNotification - attachmentNIMUserAddAttachment。在获取时需要强类型转换。

  • 通过 NIMUserAddAttachment - operationType 获取具体的操作事件。 可以进一步细分为:

    • NIMUserOperationAdd:直接添加好友
    • NIMUserOperationRequest:请求添加好友
    • NIMUserOperationVerify:通过添加好友请求
    • NIMUserOperationReject:拒绝添加好友请求

添加代理委托:

//NIMSystemNotificationManager.m
//全局监听
- (void)viewDidLoad {
    ...
    [[NIMSDK sharedSDK].systemNotificationManager addDelegate:self];
}

在以下回调里可以监听到系统通知:

@protocol NIMSystemNotificationManagerDelegate <NSObject>
@optional
/**
 *  监听系统通知回调
 *
 *  @param notification 系统通知
 */
-(void)onReceiveSystemNotification:(NIMSystemNotification *)notification;
@end

添加好友

调用 requestFriend:completion: 方法添加好友。

NIM SDK 添加好友分为以下两种模式:

  • 直接添加为好友(NIMUserOperation = NIMUserOperationAdd)。

    该模式下,调用接口成功后,本端和对端(被添加的好友)都会收到好友关系变更的回调。

  • 请求添加对方为好友,需要对方验证通过才能添加(NIMUserOperation = NIMUserOperationRequest)。

    该模式下,调用接口成功后,即向对方发送添加好友的申请,对端(被添加的好友)会收到好友申请。对端可以选择接受或拒绝好友申请。

objc**
 *  添加好友
 *
 *  @param request    添加好友请求
 *  @param completion 完成回调
 */
- (void)requestFriend:(NIMUserRequest *)request
           completion:(nullable NIMUserBlock)completion;

回应好友申请

当收到他人的好友申请后,可以调用 requestFriend:completion: 方法接受或拒绝该请求。

  • NIMUserOperation = NIMUserOperationVerify:通过添加好友请求
  • NIMUserOperation = NIMUserOperationReject :拒绝添加好友请求
objc@protocol NIMUserManager <NSObject>
/**
 *  处理好友关系
 *
 *  @param request    处理好友关系请求
 *  @param completion 完成回调
 */
- (void)requestFriend:(NIMUserRequest *)request
            completion:(NIMUserBlock)block;
@end 

删除好友

调用 deleteFriend 方法删除好友。

删除好友后,将自动解除双方的好友关系,双方的好友列表中均不存在对方。删除好友后,默认情况下双方依然可以聊天。

objc/**
 *  删除好友
 *
 *  @param userId      好友Id
 *  @param remove      是否同时删除备注
 *  @param completion  完成回调
 */
- (void)deleteFriend:(NSString *)userId
         removeAlias:(BOOL)remove
          completion:(nullable NIMUserBlock)completion;
@end            

查询好友关系

调用 isMyFriend 方法可以查询指定用户是否为我的好友。

objc@protocol NIMUserManager <NSObject>
/**
 *  判断是否是我的好友
 *
 *  @param userId 用户Id
 *
 *  @return 是否是我的好友
 */
- (BOOL)isMyFriend:(NSString *)userId;

修改好友备注

目前云信支持通过 updateUser 方法更新好友的备注名。

objc@protocol NIMUserManager <NSObject>
/**
 *  @param user 目标用户
 */
- (void)updateUser:(NIMUser *)user 
        completion:(nullable NIMUserBlock)completion;

获取所有好友信息

调用 myFriends 方法获取所有好友账号。

好友列表有本地缓存,缓存会在手动/自动登录后与服务器自动进行同步更新。

接口返回的是 NIMUser 列表。 NIMUser 封装了开发者向云信托管的好友 ID,对此好友的会话设置(是否免打扰,是否是拉黑用户等),以及用户的详细信息 NIMUserInfo (需要将用户信息交给云信托管)。

objc@protocol NIMUserManager <NSObject>
/**
 *  返回我的好友列表
 *
 *  @return NIMUser列表
 */
- (nullable NSArray<NIMUser *> *)myFriends;
@end
此文档是否对你有帮助?
有帮助
去反馈
  • 技术原理
  • 前提条件
  • 监听好友关系变更事件回调
  • 监听系统通知事件回调
  • 添加好友
  • 回应好友申请
  • 删除好友
  • 查询好友关系
  • 修改好友备注
  • 获取所有好友信息