========= iOS 访客端demo集成(含UI库) ========= * 为了方便您快速了解我们的访客端SDK所提供的各种能力,我们对外开放了访客端集成Demo的全部源码,里面包含了对话过程中的业务处理及上层UI库; * 通过这个Demo源码,可以帮助产品人员快速了解我们的访客端功能,可以帮助研发人员快速了解集成技术逻辑,帮助测试人员通过对比demo和您自己的app,更快定位问题; * 我们的访客端Demo里提供了一整套UI,您可以直接使用这套UI,当然我们更建议您用作参考,根据您的APP风格和实际业务场景,设计您自己的一套UI和业务使用流程,减少访客在使用您app过程中所产生的割裂感; * 在SDK集成过程中,针对您遇到的问题我们建议您先对比下Demo里的处理逻辑,帮助您快速解决您遇到的问题,如果Demo仍无法解答您心中的疑惑,请直接联系我们商务或技术支持,我们会全力为您提供所需要的帮助! ==== 访客端Demo使用 ==== 当您在手机上安装完访客端demo应用后,首次使用需先经过简单的扫码配置,然后就可以开始发起正常对话了,详细说明如下: {{:cs:300visitoraccess:客服云-安卓端demo下载后使用配置.png?nolink|}} ==== 访客端Demo与您自己APP的区别 ==== 访客端Demo与客户的APP以及SDK之间的关系说明如下: * 对象不同:我们的demo主要供产品、研发、测试等内部使用,便于了解功能的,您的APP是面对终端用户的; * 使用不同:我们访客端Demo是不上架应用商店,您的App是需要上架到各大应用商店提供给访客下载的; * 功能不同:我们访客端Demo仅提供的是对话的功能,您的APP里一般都是实现各种例如零售、维修、娱乐等各种功能,对话功能只是对于您的app里的一项补充能力; {{:cs:300visitoraccess:客服云-安卓端demo与sdk的区别.png?nolink|}} ======== 代码下载 ======== 您可以通过以下两种方式获取到源代码: * 下载代码压缩包:客服云sdk 及 Demo 下载 [[http://www.easemob.com/download/cs ]] * 下载源代码:github源码地址 [[https://github.com/easemob/kefu-ios-demo ]] 欢迎大家提交PR改进和修复HelpDeskUI中的问题。 ======== 运行 CustomerSystem-ios 工程 ======== 从//客服云sdk 及 Demo 下载// 下载 iOS SDK 压缩包,然后解压。解压后在 kefu-iossdk-vx.x.x 文件夹下有一个kefu-ios-demo文件夹,即为CustomerSystem-ios的工程目录。 终端cd到kefu-ios-demo的podfile目录下,终端执行pod install命令,等待下载完所有的pod依赖库,即可打开CustomerSystem-ios.xcworkspace,运行kefu-ios-demo进行自定义再次开发。 ===== sdk集成请参考 ===== 请移步sdk集成文档[[http://docs.easemob.com/cs/300visitoraccess/iossdkvec]] ======== 工程配置 ======== === 确保以下内容工程都配置上 才能正确使用 环信UI库 === =====info.plist配置 ===== * 视频通话界面图片采用字体图标方式 集成时需要把General文件夹下的字体图标库加入到工程中 如果没有视频相关可以不加 {{:cs:300visitoraccess:icfont.png?400|}} ====== 环信UI库====== 环信UI库介绍主要分为两种 一种是基础会话聊天UI库 一种是音视频UI库: * HelpDeskUI —— 基础会话聊天UI库 * HDCallUIKit —— 音视频UI库 (基于声网音视频服务,使用环信 IM 作为信令通道的开源音视频模块) =====HelpDeskUI===== ==== 目录介绍==== * 3rdparty——ui依赖的第三方库 部分基于pod集成 * ViewController——存放所有页面的控制器类 * Views—— 存放界面的view * Helper—— 封装发送各个类型消息的工具类 * Model—— 消息模型解析模块 * Util—— 工具类模块 ====集成==== ===集成基础会话聊天UI库时只需要把demo中HelpDeskUI文件夹拖入到自己项目中=== {{:cs:300visitoraccess:qq20230228-114841_2x.png?200|}} === 在pch文件或全局.h文件中添加如下代码=== UI库使用了第三方库Masonry作用页面布局 如果工程中也用了Masonry请把我们的如下代码放到您工程引入的#import "Masonry.h"的上边防止跟您本身使用的库导致的冲突 #ifdef __OBJC__ #import #import "HelpDeskUI.h" #endif =====音视频UI库===== ==== UI库说明 ==== *音视频UI库主要分为两种 一种是融合视频(在线聊天中视频) 一种是独立视频(VEC视频) 都在HDCallUIKit下 {{:cs:300visitoraccess:hdcallkit.png?200|}} ==== HDCallUIKit 目录介绍==== General —— 通用基础工具类 两种视频都依赖这个文件下的类 Online —— 融合视频(在线聊天中视频) VEC —— 独立视频(VEC视频)。 其中Online 和 VEC 都是独立的代码。相互不依赖 可以灵活插拔 根据需求添加对应音视频UI库 ==== Online 目录介绍 ==== Fastboard —— 互动白板相关代码类 Manager —— 视频中的管理类 HDAgoraCallManager主要类 对声网sdk进行了封装 详细请查看这个类的头文件 ViewController —— 视频界面相关类 HDCallViewController 视频界面主要入口类 这个类有一个需要注意的地方 这个类包含了白板界面相关的代码 如果没有集成白板相关代码 请一定要在这个类的头文件中找到 如下代码 进行注释 即关闭 白板功能 要不然 会影响编译 因为ui库中默认都是所以功能开启的 // ⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️如果不使用白板功能请一定要注释到以下的代码 ⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️ //#define OnlineWhiteBoard 1 // ⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️如果不使用白板功能请一定要注释到以上的代码 ⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️ Views —— 视频界面需要的相关view ==== 集成接入 CEC会话中的视频 ==== === cec监听坐席接通视频或者坐席发起视频 === * 在需要弹视频界面的类导入头文件 #import "HDCallAppManger.h" * 在对应类的监听视频弹窗的通知 代码如下 // 使用HDCallUIKit中声网视频相关功能请一定注册这个通知 [[HDCallAppManger shareInstance] initAddCallObserver]; ==== cec 访客发起视频 ==== HDMessage *message = [HDClient.sharedClient.callManager cec_creteVideoInviteMessageWithImServiceNum:self.conversation.conversationId content: NSLocalizedString(@"em_chat_invite_video_call", @"em_chat_invite_video_call")]; HDVisitorInfo *visitorInfo = [[HDVisitorInfo alloc] init]; visitorInfo.nickName = @"我是访客"; [message addContent:visitorInfo]; [[HDClient sharedClient].chatManager sendMessage:message progress:nil completion:^(HDMessage *message, HDError *error){ if (!error) { dispatch_async(dispatch_get_main_queue(), ^(void) { //online [[HDCallViewController sharedManager] showViewWithKeyCenter:nil withType:HDVideoCallDirectionSend]; [HDCallViewController sharedManager].hangUpCallback = ^(HDCallViewController * _Nonnull callVC, NSString * _Nonnull timeStr) { [[HDCallViewController sharedManager] removeView]; [[HDCallViewController sharedManager] removeSharedManager]; }; }); } }]; ==== VEC UI库目录介绍 ==== 注意 所有vec相关的代码类都添加了vec 标识以便区分使用功能 VEC_Fastboard —— 互动白板相关代码类 Manager —— 视频中的管理类 HDVECAgoraCallManager主要类 对声网sdk进行了封装 详细请查看这个类的头文件 ViewController —— 视频界面相关类 HDVECCallViewController 视频界面主要入口类 这个类有一个需要注意的地方 这个类包含了白板界面相关的代码 如果没有集成白板相关代码 请一定要在这个类的头文件中找到 如下代码 进行注释 即关闭 白板功能 要不然 会影响编译 因为ui库中默认都是所以功能开启的 // ⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️如果不使用白板功能请一定要注释到以下的代码 ⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️ //#define HDVECWhiteBoard 1 // ⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️如果不使用白板功能请一定要注释到以上的代码 ⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️ Views —— 视频界面需要的相关view ==== 集成接入 VEC独立视频==== ====vec监听坐席接通视频或者坐席发起视频==== 在需要弹视频界面的类导入头文件 #import "HDCallAppManger.h" 在对应类的监听视频弹窗的通知 代码如下 // 使用HDCallUIKit中声网视频相关功能请一定注册这个通知 [[HDCallAppManger shareInstance] initAddCallObserver]; ====vec 访客发起视频==== ===访客发起视频邀请 需要注意 发起视频前 一定要保证登录了环信才可以=== // 发起视频 必要参数设置 如下代码 HDVECCallInputModel * model = [[HDVECCallInputModel alloc] init]; model.videoInputType = HDCallVideoInputDefault; // 固定类型HDCallVideoInputDefault 这个 HDVisitorInfo *visitorInfo = [[HDVisitorInfo alloc] init]; visitorInfo.nickName = @"我是访客"; model.visitorInfo = visitorInfo; //传访客信息 model.vec_imServiceNum = @"vec的im服务号"; 管理后台-》接入-〉视频客服-》关联信息获取 model.vec_configid = @"vec的插件id"; 管理后台-》接入-〉视频客服-》关联信息获取 [[NSNotificationCenter defaultCenter] postNotificationName:@"hd_easemob_vec_call" object:model]; === cec会话内发起vec 视频邀请场景 如下是 询前引导场景下的发起视频邀请=== // cec会话内发起vec 视频邀请场景 如下是 询前引导场景下的发起视频邀请 HDVECCallInputModel * model = [[HDVECCallInputModel alloc] init]; model.videoInputType = HDCallVideoInputGuidance; // 固定类型HDCallVideoInputGuidance 这个 HDVisitorInfo *visitorInfo = [[HDVisitorInfo alloc] init]; visitorInfo.nickName = @"我是访客"; model.visitorInfo = visitorInfo; //传访客信息 model.cec_imServiceNum = @"cec的im服务号"; 管理后台-》接入-〉在线客服-》关联信息获取 // 把item 传过去 HDMenuItem 是询前引导的菜单消息解析后的model类 跳转到独立视频需要的参数都在这个解析类里边 HDCallAppManger 里边自动解析了 详细解析请参考HDCallAppManger.m这个类的实现方式 //还需要传一个当前会话过去 目前是在聊天的HDMessageViewController.h类里调用 具体请参考改类里的实现方式 如果是集成了我们的会话HelpDeskUI ui库 那询前引导的这个场景 可以不用集成因为我们我的HelpDeskUI ui库 已经集成好了 具体请参考HDMessageViewController.m内的实现方式 NSMutableDictionary * dic = [[NSMutableDictionary alloc] init]; [dic hd_setValue:self.conversation forKey:@"easemob_currentConversation"]; [dic hd_setValue:item forKey:@"easemob_currentHDMenuItem"]; [[NSNotificationCenter defaultCenter] postNotificationName:@"hd_easemob_vec_call" object:model userInfo:dic]; === ⚠️⚠️⚠️⚠️⚠️⚠️⚠️注意 如果是 融合视频 和 独立视频 共同使用 需要根据sdk 中的isVECMessage 这个方法 进行判断是融合视频还是vec独立视频 代码请 参考 HDCallAppManger.m类里的实现方式⚠️⚠️⚠️⚠️⚠️ === /*! * \~chinese * 获取当前消息是否是 VEC 消息 yes 是vec 消息。no 不是vec 消息 */ - (BOOL)isVECMessage:(HDMessage *)message; ====== 集成pod库====== # 环信环信UI库 依赖的第三方库 * pod 'MBProgressHUD', * pod 'Masonry' * pod 'SDWebImage' #音视频UI库 依赖的声网sdk * pod 'AgoraRtcEngine_iOS','4.1.1' #音视频UI库 依赖的白板sdk 需要注意 如果音视频UI库 中没有涉及白板业务 不需要 导入此库 pod 'Fastboard', '1.1.2' pod 'TZImagePickerController' ====== 选择手动导入声网sdk====== *前往 声网官网[[https://docs.agora.io/cn/video-call-4.x/downloads?platform=iOS|sdk下载]] 页面,获取客服对应的版本的SDK(目前客服集成依赖的版本是3.6.1),然后解压。 *将 SDK 包内 libs 路径下的文件,拷贝到你的项目路径下。 *打开 Xcode,添加对应动态库,确保添加的动态库 Embed 属性设置为 Embed & Sign。 ===详细代码请查看demo中HDCallUIKit文件下对应的源码===