【环信集成笔记】进阶篇-EaseUI集成以及会话列表开发
有人说环信需要服务器和iOS端配合,其实可以两种方式:
1.全有iOS端和环信交互。2.让服务器替我们保存环信密码。
先不说方式,先教大家如何集成。环信里有一个自带已经弄好的EaseUI,如果你对页面的要求不是很大,那就用环信自带的EaseUI开发。我使用的就是环信的EaseUI。为了不影响项目,你先导入需要的系统框架。我使用的是即时通讯V2版本。
集成准备前请看他们的官网文档介绍。http://docs.easemob.com/start/300iosclientintegration/20iossdkimport
是即时通讯V3,请按照他去添加对应的库!没有安全感的可以全部添加!只要你不限工程大,麻烦就可以。
添加完成以后。下载他的SDK,有几种文件需要你拖进来。
如果你前面有一个会话列表页面,例如下图:
如果你也有一个消息页面的话,如果没有什么太多内容,我建议放弃你自己自定义的TableViewCell,因为EaseUI 里有已经写好的消息页面:EaseConversationListViewController
这个页面不用改动太多。如果你发现这个页面为什么不用登录环信账号,环信是这样的:你在AppDelegate登录。
登录的demo为:
除了上面两种方式,还有一种就是环信有一个会记录的方法,除了注销会一直存在。怎么简单怎么来。
OK,注册成功,我们继续讨论:EaseConversationListViewController
如果你的页面换成了EaseConversationListViewController,那么你不需要做任何操作都可以获取到最新数据,但是你需要点击进入会话页面。
ChatViewController 就是你的会话列表页,关于ChatViewController * chatVc = [[ChatViewController alloc]initWithConversationChatter:model.title conversationType:eConversationTypeChat];
1.model.title 这个会话列表的用户名,你也可以写死。
2.eConversationTypeChat,枚举,这是单人会话,还有群聊等等。
有了这个就可以传到会话列表页了。
会话列表就不多说了,没有这个文件我直接发给你好了。
对了有人会出现这种情况,如下图:
是否发现重复消息。[self tableViewDidTriggerHeaderRefresh]; 检查一下这个方法是不是在chatViewController 和EaseMessageViewCOntroller 的ViewDidLoad 里面都调用了,看如果都有,随便删除一个这个方法。就ok了!
关于头像昵称如何能做成活的,思路是:环信有一个方法,可以获取消息列表的信息。
这个方法就在你的根视图里拿出来。能获取到所有消息的环信的账号,如果你们注册的环信账号是手机号的。第一次发请求的话给服务器依次发送这个手机号,获取他的昵称和头像,然后存到本地。下次再次发请求的时候之前获取一下这个信息,有的话直接拿,没有的话就发送请求。
现在我在研究如何改变会话列表的名字和头像,因为有些产品的需要,不能展示账号或者手机号,所以如果你还有不懂得地方你加我好友QQ:1119718338,欢迎一起交流。当然如果您觉得对您有帮助,请点赞或打赏!谢谢!
1.全有iOS端和环信交互。2.让服务器替我们保存环信密码。
先不说方式,先教大家如何集成。环信里有一个自带已经弄好的EaseUI,如果你对页面的要求不是很大,那就用环信自带的EaseUI开发。我使用的就是环信的EaseUI。为了不影响项目,你先导入需要的系统框架。我使用的是即时通讯V2版本。
集成准备前请看他们的官网文档介绍。http://docs.easemob.com/start/300iosclientintegration/20iossdkimport
是即时通讯V3,请按照他去添加对应的库!没有安全感的可以全部添加!只要你不限工程大,麻烦就可以。
添加完成以后。下载他的SDK,有几种文件需要你拖进来。
1.EaseUIResource.bundle如果还是少了什么东西不知道怎么加,请加我QQ:1119718338,我给你发送所有需要的文件,前提请注意加好友时候留言清楚。
2.gifimage(包含文件:EMGifImage.h以及.m)
3.EaseMobSDK
4.EaseUI(包括子目录:include,lib,resources*请注意里面不是图片是库,XMPP框架。 )
5.Resource(环信的图片文件夹)
6.ChatViewController(你可以用他们示范demo里拖,这个类就是对话类)
7.CystomizableCell
8.PrefixHeader.pch
9.Localizable.strings
如果你前面有一个会话列表页面,例如下图:
如果你也有一个消息页面的话,如果没有什么太多内容,我建议放弃你自己自定义的TableViewCell,因为EaseUI 里有已经写好的消息页面:EaseConversationListViewController
这个页面不用改动太多。如果你发现这个页面为什么不用登录环信账号,环信是这样的:你在AppDelegate登录。
登录的demo为:
[[EaseMob sharedInstance].chatManager asyncLoginWithUsername:@“用户的环信账号” password:@“用户的环信密码” completion:^(NSDictionary *loginInfo, EMError *error) {
NSLog(@"error====%@",error);
if (!error)
{
NSLog(@"登录成功");
NSLog(@"===%@",loginInfo);
//获取数据库中数据
[[EaseMob sharedInstance].chatManager loadDataFromDatabase];
}
} onQueue:nil];
当然有登录就有注册
[[EaseMob sharedInstance].chatManager asyncRegisterNewAccount:phone.text password:password2.text withCompletion:^(NSString *username, NSString *password, EMError *error) {
NSLog(@"error====%@",error);
if (!error)
{
NSLog(@"注册成功");
NSLog(@"===%@",loginInfo);
}
} onQueue:nil];
1.只用iOS和环信交互:在你app注册会员的时候,注册成功获得返回值,正确的返回值内去注册环信账号,而环信账号就是用户注册你app的账号,密码需要写死,例如:123456,那么无论谁注册,传给环信的密码都是123456。这样方便登录。如果环信返回给你是注册成功,那么你需要在成功里创建NSUserDeafults存储你的环信账号,密码就不用存了。并且调用环信登录方法。如果不在AppDelegate里写登录,你的APP如果退出了,下次打开就没用了,所以必须时时刻刻登录。所以你需要在AppDelegate登录,账号就是你本地存储的账号。密码还是死的。如果正常流程来说就是:
1.注册自己APP账号-成功-注册环信账号,密码为死的-成功-登录环信账号。
2.登录自己APP账号-成功-登录环信
3.AppDelegate存储账号。
2.让iOS,服务器,环信交互:通过上面的那种方式,跟服务器唯一交互的就是密码,你需要在用户注册你自己产品的时候,密码也注册环信。注册成功,将密码post给服务器,登录的时候成功,服务器不光返回error,msg,还要加一个环信的password,这样你拿到password 可以再进行登录。当然注册的时候Phone和Password需都需要存储,方便在AppDelegate入口类登录。
1.注册自己APP账号-成功-注册环信账号,密码为注册APP的密码-成功-Post密码给服务器-成功-登录环信账号。
2.登录自己APP账号-成功-拿到服务器返回的Password,登录环信账号-成功。
3.AppDelegate存储账号和密码
除了上面两种方式,还有一种就是环信有一个会记录的方法,除了注销会一直存在。怎么简单怎么来。
OK,注册成功,我们继续讨论:EaseConversationListViewController
如果你的页面换成了EaseConversationListViewController,那么你不需要做任何操作都可以获取到最新数据,但是你需要点击进入会话页面。
ChatViewController 就是你的会话列表页,关于ChatViewController * chatVc = [[ChatViewController alloc]initWithConversationChatter:model.title conversationType:eConversationTypeChat];
1.model.title 这个会话列表的用户名,你也可以写死。
2.eConversationTypeChat,枚举,这是单人会话,还有群聊等等。
有了这个就可以传到会话列表页了。
会话列表就不多说了,没有这个文件我直接发给你好了。
对了有人会出现这种情况,如下图:
是否发现重复消息。[self tableViewDidTriggerHeaderRefresh]; 检查一下这个方法是不是在chatViewController 和EaseMessageViewCOntroller 的ViewDidLoad 里面都调用了,看如果都有,随便删除一个这个方法。就ok了!
关于头像昵称如何能做成活的,思路是:环信有一个方法,可以获取消息列表的信息。
这个方法就在你的根视图里拿出来。能获取到所有消息的环信的账号,如果你们注册的环信账号是手机号的。第一次发请求的话给服务器依次发送这个手机号,获取他的昵称和头像,然后存到本地。下次再次发请求的时候之前获取一下这个信息,有的话直接拿,没有的话就发送请求。
现在我在研究如何改变会话列表的名字和头像,因为有些产品的需要,不能展示账号或者手机号,所以如果你还有不懂得地方你加我好友QQ:1119718338,欢迎一起交流。当然如果您觉得对您有帮助,请点赞或打赏!谢谢!
1 个评论
我的聊天界面 是 ChatViewController 在- (UITableViewCell *)messageViewController:(UITableView *)tableView
cellForMessageModel:(id<IMessageModel>)messageModel 这个方法里 判断 NSDictionary * extDic = messageModel.message.ext ;
if (extDic) {
static NSString * cellID1 = @"cellID1" ;
ccccTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:cellID1];
if (!cell) {
cell = [[ccccTableViewCell alloc]initWithStyle:(UITableViewCellStyleDefault) reuseIdentifier:cellID1];
}
// cell.imageView.image = [UIImage imageNamed:@"chatBar_colorMore_audioCallSelected"];
// cell.imageView.backgroundColor = [UIColor redColor] ;
// cell.textLabel.text = @"1111" ;
return cell ;
}
return nil ;
但是 cell 显示不出来 背景色 可以显示 内容显示不了 然后我又换成系统的uitabViewCell然后只能显示 textLabel Image 显示不出来 。这种情况会是什么原因?