好友管理


注:环信不是好友也可以聊天,不推荐使用环信的好友机制。如果你有自己的服务器或好友关系,请自己维护好友关系。

当 SDK 初始化时,您可以设置是否由 SDK 主动帮您获取好友,如果未设置,需要您自己调用获取方法获取。

// 登录成功后,自动去取好友列表
// SDK获取结束后,会回调
// - (void)didFetchedBuddyList:(NSArray *)buddyList error:(EMError *)error方法。
[[EaseMob sharedInstance].chatManager setIsAutoFetchBuddyList:YES];

获取好友列表,环信提供了四种方法。

1. 同步方法

EMError *error = nil;
NSArray *buddyList = [[EaseMob sharedInstance].chatManager fetchBuddyListWithError:&error];
if (!error) {
    NSLog(@"获取成功 -- %@",buddyList);
}

2. block 异步方法

[[EaseMob sharedInstance].chatManager asyncFetchBuddyListWithCompletion:^(NSArray *buddyList, EMError *error) {
    if (!error) {
        NSLog(@"获取成功 -- %@",buddyList);
    }
} onQueue:nil];

3. IChatManagerDelegate 回调方法

接口调用

// 获取好友列表
[[EaseMob sharedInstance].chatManager asyncFetchBuddyList];

回调监听

/*!
 @method
 @brief 获取好友列表成功时的回调
 @discussion
 @param buddyList 好友列表
 @param error     错误信息
 */
- (void)didFetchedBuddyList:(NSArray *)buddyList
                      error:(EMError *)error;

4. 取内存中的值

该方法比较特殊,只有在您之前获取过好友列表的情况下才会有值,且不能保证最新。

NSArray *buddyList = [[EaseMob sharedInstance].chatManager buddyList];

发送加好友申请

环信 iOS SDK 提供了添加好友的方法。

如果您已经发过,并且对方没有处理,您将不能再次发送。

BOOL isSuccess = [[EaseMob sharedInstance].chatManager addBuddy:@"6001" message:@"我想加您为好友" error:&error];
if (isSuccess && !error) {
    NSLog(@"添加成功");
}

监听加好友请求

当您收到好友请求,如果您没有处理,则您每次登录的时候,服务器都会给你发该请求,请确保你在登录成功之前已经注册了监听。

监听回调

/*!
 @method
 @brief 接收到好友请求时的通知
 @discussion
 @param username 发起好友请求的用户username
 @param message  收到好友请求时的say hello消息
 */
- (void)didReceiveBuddyRequest:(NSString *)username
                       message:(NSString *)message;

同意加好友申请

EMError *error = nil;
BOOL isSuccess = [[EaseMob sharedInstance].chatManager acceptBuddyRequest:@"8001" error:&error];
if (isSuccess && !error) {
    NSLog(@"发送同意成功");
}

拒绝加好友申请

EMError *error = nil;
BOOL isSuccess = [[EaseMob sharedInstance].chatManager rejectBuddyRequest:@"8001" reason:@"111111" error:&error];
if (isSuccess && !error) {
    NSLog(@"发送拒绝成功");
}

好友申请处理结果回调

监听回调

/*!
@method
@brief 好友请求被接受时的回调
@discussion
@param username 之前发出的好友请求被用户username接受了
*/
- (void)didAcceptedByBuddy:(NSString *)username;

/*!
@method
@brief 好友请求被拒绝时的回调
@discussion
@param username 之前发出的好友请求被用户username拒绝了
*/
- (void)didRejectedByBuddy:(NSString *)username;
EMError *error = nil;
// 删除好友
BOOL isSuccess = [[EaseMob sharedInstance].chatManager removeBuddy:@"6001" removeFromRemote:YES error:&error];
if (isSuccess && !error) {
    NSLog(@"删除成功");
}
  • removeBuddy:要删除的用户
  • removeFromRemote:是否将自己从对方好友列表中移除
  • error:错误信息

获取好友黑名单

环信的黑名单体系是独立的,与好友无任何关系。也就是说,您可以将任何人加入黑名单,不论他是否与您是好友关系。同时,如果您将好友加入黑名单,则他仍然是您的好友,只不过同时也在黑名单中。

黑名单的类型(EMRelationship)有三种,其中,两种可用。

typedef enum{
    eRelationshipBoth  = 0, 		双向都不接收消息;
    eRelationshipFrom,				能给黑名单中的人发消息,接收不到黑名单中的人发的消息;
    eRelationshipTo,				暂不支持;
}EMRelationship;

查询黑名单列表,环信提供了四种方法。

1. 同步方法

EMError *error = nil;
NSArray *blockedList = [[EaseMob sharedInstance].chatManager fetchBlockedList:&error];
if (!error) {
    NSLog(@"获取成功 -- %@",blockedList);
}

2. block 回调方法

[[EaseMob sharedInstance].chatManager asyncFetchBlockedListWithCompletion:^(NSArray *blockedList, EMError *error) {
    if (!error) {
        NSLog(@"获取成功 -- %@",blockedList);
    }
} onQueue:nil];

3. IChatManagerDelegate 回调方法

接口调用

// 获取黑名单
[[EaseMob sharedInstance].chatManager asyncFetchBlockedList];

回调监听

- (void)didUpdateBlockedList:(NSArray *)blockedList;

4. 取内存中的值

该方法比较特殊,只有在您之前获取过黑名单列表的情况下才会有值,且不能保证最新。

NSArray *blockedList = [[EaseMob sharedInstance].chatManager blockedList];

加入黑名单

接口调用

//	将6001加入黑名单
EMError *error = [[EaseMob sharedInstance].chatManager blockBuddy:@"6001" 	relationship:eRelationshipBoth];
if (!error) {
	NSLog(@"发送成功");
}

回调监听

/*!
 @method
 @brief 将好友加到黑名单完成后的回调
 @discussion
 @param buddy    加入黑名单的好友
 @param pError   错误信息
 */
- (void)didBlockBuddy:(EMBuddy *)buddy error:(EMError **)pError;

移出黑名单

接口调用

// 将6001移除黑名单
EMError *error = [[EaseMob sharedInstance].chatManager unblockBuddy:@"6001"];
if (!error) {
	NSLog(@"发送成功");
}

回调监听

/*!
 @method
 @brief 将好友移出黑名单完成后的回调
 @discussion
 @param buddy    移出黑名单的好友
 @param pError   错误信息
 */
- (void)didUnblockBuddy:(EMBuddy *)buddy error:(EMError **)pError;

上一页:消息

下一页:群组管理