环信即时通讯开发简单的聊天功能

2016-08-31  本文已影响561人  虞小虞

相对于上一篇文章中所写的XMPP开发聊天APP来说,使用环信开发相对简单了许多。环信封装了属于自己的一个SDK,并且集成了一个可以满足我们正常聊天的一个聊天界面,这让我们省去了很多步骤。

环信即时通讯进行coding前,需要到环信官网注册你的APP,注册完了之后环信会帮你搭建一个简单的服务器,我们可以在这个服务器中对账号进行一些操作。

一、注册应用

1、到环信官网注册一个账号,然后登陆。(注册是注册即时通讯云)

2、创建应用,填写你的应用名称,这里写你项目的名称例如XXXDemo就行了,产品名称,然后选择开发注册,描述随便写。创建好了之后会有你创建应用的信息,看到有个APPKey,这个是待会我们需要用到的,可以copy好。

二、代码实现

1、用cocoapods导入 pod'HyphenateFullSDK',然后把ChatView、EaseUI、Resource这3个文件拉进工程(下面有demo,demo里面有这3个文件。到官网下载demo也可以,官网的demo一样有这3个文件)。然后新建一个PCH文件,导入我们即将用到的几个类的头文件。

2、到AppDelegate里面将项目与环信里面注册的应用关联起来。

.m文件

//在刚开始进入APP的方法里面对应用进行关联

- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions {

//这里填写的是我们刚刚创建应用的APPKey

NSString*appKey =@"创建应用时的appkey";

EMOptions*options = [EMOptions optionsWithAppkey:appKey];

//如果你的APP需要用到推送功能,这里填的是你的证书名,不需要后缀。(如何创建推送的证书,在官网有介绍)

//options.apnsCertName = @"";

//利用单例进行初始化

[[EMClient sharedClient]initializeSDKWithOptions:options];

//关联的方法

[[EaseSDKHelper shareHelper]hyphenateApplication:application didFinishLaunchingWithOptions:launchOptions appkey:appKey apnsCertName:nil otherConfig:@{kSDKConfigEnableConsoleLogger:[NSNumber numberWithBool:YES]}];

returnYES;

}

//APP进入后台

- (void)applicationDidEnterBackground:(UIApplication*)application {

[[EMClientsharedClient]applicationDidEnterBackground:application];

}

//APP将从后台返回

- (void)applicationWillEnterForeground:(UIApplication*)application {

[[EMClientsharedClient]applicationWillEnterForeground:application];

}

3、关联好了之后,做注册跟登录功能,界面就不介绍了,我做的很随便,看看截图就好,重点是如何实现注册与登录。先说登录

//判断是否登录成功

EMError*error = [[EMClient sharedClient]loginWithUsername:self.nameTF.text password:self.passwordTF.text];

if(!error) {

NSLog(@"登录成功");

//从数据库中获取信息

[[EMClient sharedClient].chatManager loadAllConversationsFromDB];

//登录成功跳转页面至好友列表

UIStoryboard*storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];

FriendListTableViewController*friendListTableViewController = [storyboard instantiateViewControllerWithIdentifier:@"FriendListTableViewController"];

[self.navigationController pushViewController:friendListTableViewController animated:NO];

}else{

//登录失败显示错误信息

[MBProgressHUD showError:@"请输入正确的账号、密码"];

}

//判断退出登录是否成功

EMError*error = [[EMClientsharedClient]logout:YES];

if(!error) {

NSLog(@"退出登录成功");

//退出登录成功,返回登录界面

[self.navigationControllerpopViewControllerAnimated:NO];

}else{

NSLog(@"退出失败");

}

注册

//判断是否注册成功

EMError *error = [[EMClient sharedClient]registerWithUsername:self.nameTF.text password:self.passwordTF.text];

if(error ==nil) {

NSLog(@"注册成功");

//注册成功后返回登录界面

[self.navigationController  popViewController Animated:NO];

}else{

NSLog(@"注册失败%@",error);

}

获取好友列表

//判断是否获取好友列表成功

EMError *error =nil;

//从服务器获取好友列表

NSArray *userList = [[EMClient sharedClient].contactManager getContactsFromServerWithError:&error];

//从数据库获取好友列表

//NSArray *userlist=[[EMClient sharedClient].contactManager getContactsFromDB];

if(!error) {

NSLog(@"获取好友列表成功-- %@",userList);

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^{

[dataSource removeAllObjects];

[dataSource addObjectsFromArray:userList];

dispatch_async(dispatch_get_main_queue(), ^{

[self.tableViewre loadData];

});

});

}

添加好友

在接收好友申请的时候需要用到协议进行监听,所以需要遵循EMContactManagerDelegate代理

//确定代理

[[EMClient sharedClient].contactManager addDelegate:self delegateQueue:nil];

//判断添加好友是否添加成功

EMError*error = [[EMClient sharedClient].contactManager addContact:_TF.text message:nil];

if(!error) {

NSLog(@"添加成功");

[_bgView removeFromSuperview];

_bgView=nil;

}else{

[MBProgressHUDshowError:@"输入不能为空"];

}

好友申请处理结果回调

//监听回调

- (void)didReceiveAgreedFromUsername:(NSString*)aUsername

{

NSLog(@"%@同意了我的好友请求",aUsername);

[selfgetFriendList];//获取好友列表并刷新tableView

}

- (void)didReceiveDeclinedFromUsername:(NSString*)aUsername

{

NSLog(@"%@拒绝了我的好友请求",aUsername);

}

监听好友添加回调

- (void)didReceiveFriendInvitationFromUsername:(NSString*)aUsername

message:(NSString*)aMessage

{

UIAlertController* alertController = [UIAlertControlleralertControllerWithTitle:[NSStringstringWithFormat:@"收到来自%@的请求", aUsername]message:aMessagepreferredStyle:(UIAlertControllerStyleAlert)];

UIAlertAction* acceptAction = [UIAlertActionactionWithTitle:@"好"style:(UIAlertActionStyleDefault)handler:^(UIAlertAction*_Nonnullaction)

{

//同意好友请求的方法

EMError*agreeError = [[EMClientsharedClient].contactManageracceptInvitationForUsername:aUsername];

if(!agreeError) {

NSLog(@"发送同意成功");

//获取好友列表并刷新tableView

[selfgetFriendList];

}

}];

UIAlertAction* rejectAction = [UIAlertActionactionWithTitle:@"NO"style:(UIAlertActionStyleCancel)handler:^(UIAlertAction*_Nonnullaction) {

//拒绝好友请求的方法

EMError*rejectError = [[EMClientsharedClient].contactManagerdeclineInvitationForUsername:aUsername];

if(!rejectError) {

NSLog(@"发送拒绝成功");

}

}];

[alertControlleraddAction:acceptAction];

[alertControlleraddAction:rejectAction];

[selfshowDetailViewController:alertControllersender:nil];

}

删除好友

//判断是否删除好友成功

EMError*error = [[EMClient sharedClient].contactManager deleteContact:dataSource[indexPath.row]];

if(!error) {

NSLog(@"删除成功");

}

这里讲一下,在点击cell进入ChatViewController时,需要将我们获取的好友传进去。

ChatViewController*chatController = [[ChatViewController alloc]initWithConversationChatter:dataSource[indexPath.row]conversationType:EMConversationTypeChat];

chatController.title=dataSource[indexPath.row];

[self.navigationController pushViewController:chatController animated:YES];

环信即时通讯开发简单的聊天APP基本就这样了,功能很简单,实现也是很容易,比起上一篇xmpp的开发来说,环信更加易懂。

最后附上demo

上一篇下一篇

猜你喜欢

热点阅读