美文网首页
环信即时通讯开发简单的聊天功能

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

作者: 虞小虞 | 来源:发表于2016-08-31 16:51 被阅读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

    相关文章

      网友评论

          本文标题:环信即时通讯开发简单的聊天功能

          本文链接:https://www.haomeiwen.com/subject/msvqettx.html