环信即时通讯开发简单的聊天功能
相对于上一篇文章中所写的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