最近项目中有涉及到即时通讯的功能,所用到的是环信3.1.5的sdk。下面就开始介绍其过程:
(1)集成环信SDK:
pod:pod 'HyphenateFullSDK'
手动:因为我们要使用到语音和视频的功能,所以我们需要导入(环信 iOS HyphenateFullSDK 开发使用(包含实时通话功能))HyphenateFullSDK这个包。手动导入包文件后,我们需要手动加上一些库:
第 1 步:SDK 包含实时语音依赖库有:
CoreMedia.framework
AudioToolbox.framework
AVFoundation.framework
MobileCoreServices.framework
ImageIO.framework
libc++.dylib
libz.dylib
libstdc++.6.0.9.dylib
libsqlite3.dylib
libiconv.dylib
(如果使用的是 xcode7,后缀为 tbd。)
第 2 步:SDK 不支持 bitcode,向 Build Settings → Linking → Enable Bitcode 中设置 NO。
(2)添加EaseUI:
必须和SDK相对应的版本,不然会出现各种报错(方法找不到或者不对)
注意:如果编译报错,1、先检查EaseUI中的第三方是否和本地工程中的重复。 2、在PCH文件中引入头文件时:#ifdef __OBJC__ #import "easeUI.h" #import "EMSDKFull.h" 等等 #endif
正式开始代码的编写:
//AppKey:注册的AppKey,详细见下面注释。//apnsCertName:推送证书名(不需要加后缀),详细见下面注释。
初始化SDK:
EMOptions*options=[EMOptions optionsWithAppkey:@"douser#istore"]; options.apnsCertName=@"istore_dev"; [[EMClient sharedClient]initializeSDKWithOptions:options];
注册:
EMError*error=[[EMClient sharedClient]registerWithUsername:@"8001"password:@"111111"];if(error==nil){NSLog(@"注册成功");}
登陆:
EMError*error=[[EMClient sharedClient]loginWithUsername:@"8001"password:@"111111"];if(!error){NSLog(@"登录成功");}
注意:具体的自动登录(免登陆)、重连、退出登陆、异地登录等请移驾至环信官方:http://docs.easemob.com/im/300iosclientintegration/30iossdkbasic
聊天会话列表界面:建议自己搭建,便于管理和拓展
1:直接用环信的列表界面:ConversationListController 直接初始化加到自己的tabar上去
2:自己搭建列表界面:
获取与自己相关的所有的会话 cell上的角标、时间、信息等 tabar上的角标- (void)didReceiveMessages:(NSArray *)aMessages;是刷新该列表的重点(记住注册及代理)。对方发来的消息都会在这个方法中进行刷新列表及跟新角标数等。
注意:其他代码自行到demo中去寻找,环信demo中都有参考;
单聊+群聊:因为自己写的效果远没有环信的好,加上需求不要对聊天界面进行自定义,所以最后我还是直接用的demo中的界面(把demo中的ChatViewController拖到自己工程中,编译,注释掉报错的代码),初始化,push到聊天界面即可:
ChatViewController *chatController = [[ChatViewController alloc] initWithConversationChatter:conversation.conversationId conversationType:conversation.type];
群列表:获取与之相关所有的群
NSArray *groups = [[EMClient sharedClient].groupManager getMyGroupsFromServerWithError:nil];
语音和视频及时通话:因为都是环信写的 所以把有关及时通话的文件拖进来;
ChatDemoHelper CallViewController
1:在pct中加上 #define DEMO_CALL 1
2:全局搜索#if DEMO_CALL == 1 删掉,编译如有报错请仔细看是不是哪句代码重复了或者哪里没有注释完全。
3.ChatDemoHelper.m中 注册代码到——#pragma mark - EMCallManagerDelegate宏中间的代码都可以注释掉
语音和视频通话必走的代码重中之重:在根控制器中一定要把控制器赋给ChatDemoHelper:[ChatDemoHelper shareHelper].mainVC = self;
如果集成语音和视频过程中有问题的,可以参考官方给出的视频,不过只能借鉴:http://www.imgeek.org/video/24
上面所述就是我使用环信的心得,不是很全面。大神手下留情,新手一枚。后续我会把单人昵称、头像;群组名称、群组头像等等的一些方法写出来,如果发现我所提出的有问题和有好的建议,请直接提出来,也可以一起讨论。qq:1804094055 有问题可以找我。
网友评论