监听加好友请求
当您收到好友请求,如果您没有处理,则您每次登录的时候,服务器都会给你发该请求, 请确保你在登录成功之前已经注册了监听。
需求:用户test6向用户test发送“加好友”请求,用户test处理(同意或拒绝),并且同意后要刷新联系人表格。
实现:需要实现2个回调方法,具体如下:/*!
@method
@brief 好友请求被拒绝时的回调
@discussion
@param username 之前发出的好友请求被用户username拒绝了
*/
- (void)didRejectedByBuddy:(NSString *)username
{
NSString *message = [NSString stringWithFormat:@"%@ 拒绝了你的好友请求",username];
// 提示
UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"好友添加消息" message:message preferredStyle:UIAlertControllerStyleAlert];
[alert addAction:[UIAlertAction actionWithTitle:@"知道了" style:UIAlertActionStyleCancel handler:nil]];
[self presentViewController:alert animated:YES completion:nil];
}
/*!
@method
@brief 接收到好友请求时的通知
@discussion
@param username 发起好友请求的用户username
@param message 收到好友请求时的say hello消息
*/
- (void)didReceiveBuddyRequest:(NSString *)username message:(NSString *)message
{
// 弹出提示,让用户选择“同意”还是“拒绝”
UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"好友添加请求" message:message preferredStyle:UIAlertControllerStyleAlert];
[alert addAction:[UIAlertAction actionWithTitle:@"同意" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
// 同意加好友申请
[[EaseMob sharedInstance].chatManager acceptBuddyRequest:username error:nil];
}]];
[alert addAction:[UIAlertAction actionWithTitle:@"拒绝" style:UIAlertActionStyleDestructive handler:^(UIAlertAction * _Nonnull action) {
// 拒绝加好友申请
[[EaseMob sharedInstance].chatManager rejectBuddyRequest:username reason:@"我不认识你" error:nil];
}]];
[self presentViewController:alert animated:YES completion:nil];
}
/**
* 当其他用户向你发出“加好友”请求,你同意后会调用这个方法
*/
- (void)didUpdateBuddyList:(NSArray *)buddyList changedBuddies:(NSArray *)changedBuddies isAdd:(BOOL)isAdd
{
// 重新赋值数据源
self.buddyList = buddyList;
// 刷新表格
[self.tableView reloadData];
}
效果演示:
/*!
@method
@brief 好友请求被拒绝时的回调
@discussion
@param username 之前发出的好友请求被用户username拒绝了
*/
- (void)didRejectedByBuddy:(NSString *)username
{
NSString *message = [NSString stringWithFormat:@"%@ 拒绝了你的好友请求",username];
// 提示
UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"好友添加消息" message:message preferredStyle:UIAlertControllerStyleAlert];
[alert addAction:[UIAlertAction actionWithTitle:@"知道了" style:UIAlertActionStyleCancel handler:nil]];
[self presentViewController:alert animated:YES completion:nil];
}
/*!
@method
@brief 接收到好友请求时的通知
@discussion
@param username 发起好友请求的用户username
@param message 收到好友请求时的say hello消息
*/
- (void)didReceiveBuddyRequest:(NSString *)username message:(NSString *)message
{
// 弹出提示,让用户选择“同意”还是“拒绝”
UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"好友添加请求" message:message preferredStyle:UIAlertControllerStyleAlert];
[alert addAction:[UIAlertAction actionWithTitle:@"同意" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
// 同意加好友申请
[[EaseMob sharedInstance].chatManager acceptBuddyRequest:username error:nil];
}]];
[alert addAction:[UIAlertAction actionWithTitle:@"拒绝" style:UIAlertActionStyleDestructive handler:^(UIAlertAction * _Nonnull action) {
// 拒绝加好友申请
[[EaseMob sharedInstance].chatManager rejectBuddyRequest:username reason:@"我不认识你" error:nil];
}]];
[self presentViewController:alert animated:YES completion:nil];
}
/**
* 当其他用户向你发出“加好友”请求,你同意后会调用这个方法
*/
- (void)didUpdateBuddyList:(NSArray *)buddyList changedBuddies:(NSArray *)changedBuddies isAdd:(BOOL)isAdd
{
// 重新赋值数据源
self.buddyList = buddyList;
// 刷新表格
[self.tableView reloadData];
}
最后联系人控制器代码如下:
//
// ContactViewController.m
#import "ContactViewController.h"
#import "EaseMob.h"
@interface ContactViewController ()<EMChatManagerDelegate>
/**
* 好友列表数据源
*/
@property(nonatomic,strong)NSArray *buddyList;
@end
@implementation ContactViewController
- (void)viewDidLoad {
[super viewDidLoad];
// 标题
self.title = @"联系人";
// 添加(聊天管理器)代理
[[EaseMob sharedInstance].chatManager addDelegate:self delegateQueue:nil];
// 获取好友列表数据
self.buddyList = [[EaseMob sharedInstance].chatManager buddyList];
}
/**
* 移除(聊天管理器)代理
*/
- (void)dealloc
{
[[EaseMob sharedInstance].chatManager removeDelegate:self];
}
#pragma mark - EMChatManagerDelegate
/*!
@method
@brief 好友请求被接受时的回调
@discussion
@param username 之前发出的好友请求被用户username接受了
*/
- (void)didAcceptedByBuddy:(NSString *)username
{
NSString *message = [NSString stringWithFormat:@"%@ 同意了你的好友请求",username];
// 提示
UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"好友添加消息" message:message preferredStyle:UIAlertControllerStyleAlert];
[alert addAction:[UIAlertAction actionWithTitle:@"知道了" style:UIAlertActionStyleCancel handler:nil]];
[self presentViewController:alert animated:YES completion:nil];
// 把新的好友显示到表格
[[EaseMob sharedInstance].chatManager asyncFetchBuddyListWithCompletion:^(NSArray *buddyList, EMError *error) {
if (!error) {
// 赋值数据源
self.buddyList = buddyList;
// 刷新表格
[self.tableView reloadData];
}
} onQueue:nil];
}
/*!
@method
@brief 好友请求被拒绝时的回调
@discussion
@param username 之前发出的好友请求被用户username拒绝了
*/
- (void)didRejectedByBuddy:(NSString *)username
{
NSString *message = [NSString stringWithFormat:@"%@ 拒绝了你的好友请求",username];
// 提示
UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"好友添加消息" message:message preferredStyle:UIAlertControllerStyleAlert];
[alert addAction:[UIAlertAction actionWithTitle:@"知道了" style:UIAlertActionStyleCancel handler:nil]];
[self presentViewController:alert animated:YES completion:nil];
}
/*!
@method
@brief 接收到好友请求时的通知
@discussion
@param username 发起好友请求的用户username
@param message 收到好友请求时的say hello消息
*/
- (void)didReceiveBuddyRequest:(NSString *)username message:(NSString *)message
{
// 弹出提示,让用户选择“同意”还是“拒绝”
UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"好友添加请求" message:message preferredStyle:UIAlertControllerStyleAlert];
[alert addAction:[UIAlertAction actionWithTitle:@"同意" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
// 同意加好友申请
[[EaseMob sharedInstance].chatManager acceptBuddyRequest:username error:nil];
}]];
[alert addAction:[UIAlertAction actionWithTitle:@"拒绝" style:UIAlertActionStyleDestructive handler:^(UIAlertAction * _Nonnull action) {
// 拒绝加好友申请
[[EaseMob sharedInstance].chatManager rejectBuddyRequest:username reason:@"我不认识你" error:nil];
}]];
[self presentViewController:alert animated:YES completion:nil];
}
/**
* 当其他用户向你发出“加好友”请求,你同意后会调用这个方法
*/
- (void)didUpdateBuddyList:(NSArray *)buddyList changedBuddies:(NSArray *)changedBuddies isAdd:(BOOL)isAdd
{
// 重新赋值数据源
self.buddyList = buddyList;
// 刷新表格
[self.tableView reloadData];
}
#pragma mark - Table view data source
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return self.buddyList.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *ID = @"buddyCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID forIndexPath:indexPath];
// 1.获取"好友"模型
EMBuddy *buddy = self.buddyList[indexPath.row];
// 2.配置cell数据
cell.imageView.image = [UIImage imageNamed:@"chatListCellHead"];
cell.textLabel.text = buddy.username;
return cell;
}
@end