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

相对于上一篇文章中所写的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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,108评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,699评论 1 296
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,812评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,236评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,583评论 3 288
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,739评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,957评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,704评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,447评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,643评论 2 249
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,133评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,486评论 3 256
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,151评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,108评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,889评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,782评论 2 277
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,681评论 2 272

推荐阅读更多精彩内容