写在前面:公司需要在短时间内实现客服的功能,在几番选择下还是定了环信的客服。讲真,环信的客服基本功能还是不错的,集成起来也不是很复杂。但是,但是,但是,貌似环信客服这个功能不太受重视,集成起来好多坑。特别是他们竟然在 Swift 普及了3年多后还没有 Swift的版本,在集成的过程中遇到了一些坑,特写此Blog帮助大家免进坑
文章概述:
情景再现
集成
1 文档几百年都不更新了?
2 导入的库是否带视频
3 关于 HelpDeskUI
4 Swift 中如何正确导入 HelpDesk.framework 、 Hyphenate.framework 以及 HelpDeskUI
情景再现
- 需求背景:公司需要快速集成客服功能,方便运营服务客户
- 开发环境:Xcode、Swift 4.0、环信 CEC客服SDK
集成
按照环信 CEC 客服 SDK 走一遍,坑主要有以下几点:
1 文档几百年都不更新了?
文档中说“下载的客服SDK目录包括helpdeskdemo-ios、HelpDeskFramework、BaseFramework 三个文件夹”,其实包含的文件早就更新为:HelpDesk、Hyphenate 和 kefu-ios-demo。
所以下载到 SDK 的时候不要慌张,哪找最新的走就好了。其中,Hyphenate.framework 是客服 SDK 的依赖库,HelpDesk.framework包含实时音视频、HelpDeskLite.framework不包含实时音视频。
在此说明:文档就要严谨,毕竟开发者都是以文档为准,如果有用心规范文档,就算是几分钟的犹豫对我们来说都是很有帮助的。而且,这个只是举例,文档中很多类似这种不用心的错误
2 导入的库是否带视频
带视频的库:HelpDesk.framework 和 Hyphenate.framework 是配对使用
不带视频的库:HelpDeskLite.framework 和 HyphenateLite.framework。
这个带不带视频的库分清楚了,但是文档是这样描述的“在工程中导入 HelpDesk.framework、HyphenateLite.framework文件夹”...简直了。
刚开始我真的是不知道 HelpDesk.framework 必须配 HelpDeskLite.framework的,就按照文档走,结果导入几次,各种尝试,都提示文件导入问题。正确是做法是:如果你想要带视频功能的客服系统,那就集成 HelpDesk.framework 和 Hyphenate.framework ;如果你想集成不带视频的客服系统,那么集成 HelpDeskLite.framework 和 HyphenateLite.framework。
3 关于 HelpDeskUI
HelpDeskUI 是环信给的默认客服聊天的 UI,如果项目中紧急集成客服系统,那这个 UI 可以直接丢进去,调用 HDMessageViewController 就出现客服聊天的界面了。
上面导入库的时候根本没有提到这个 HelpDeskUI 这个文件,可是下面 PCH 中明明需要导入这个 UI 的文件。orz...
找了半天在 Demo 的一个文件中发现了这个 HelpDeskUI,导入到项目中。
最终需要的SDK文件是这样子的:
4 Swift 中如何正确导入 HelpDesk.framework 、 Hyphenate.framework 以及 HelpDeskUI
4.1 首先将 HelpDesk.framework 、 Hyphenate.framework 以及 HelpDeskUI 导入到项目中(如上图“SDK 正确打开方式”)
4.2 TARGET → General → Embedded Binaries 中添加以上两个依赖库
4.3 向Build Settings → Linking → Other Linker Flags 中增加-ObjC(注意区分大小写
4.4 设置 Build Settings →Enable Bitcode 改为NO
4.5 在工程 info.plist 文件中,增加隐私权限:
Privacy - Photo Library Usage Description 需要访问您的相册
Privacy - Microphone Usage Description 需要访问您的麦克风
Privacy - Camera Usage Description 需要访问您的摄像机
4.6 设置 PCH (这里Hin重要!!!)
iOS 添加pch文件
4.7 设置 Swift 和 Objective-C 的桥接文件
编译一下,就 Success 了。
下篇文章会整理下接入客服逻辑的Blog,欢迎订阅
参考文档:
环信 CEC 客服 SDK
消息过来 messagesDidReceive 回调的问题