用户关系
更新时间: 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 - attachment
为NIMUserAddAttachment
。在获取时需要强类型转换。 -
通过
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