在上一篇文章中我們了解了環(huán)信客戶(hù)互動(dòng)云的功能,以及集成SDK前需要做的配置工作,接下來(lái)我們正式進(jìn)入項(xiàng)目集成階段,集成流程摘自環(huán)信CEC iOS SDK集成,本文對(duì)環(huán)信文檔做了更加詳細(xì)的說(shuō)明,以及一些未指明錯(cuò)誤的處理辦法,如有不當(dāng)之處,請(qǐng)各位大神指正.
文末會(huì)附上GitHub的demo地址
一铲汪、集成
提示 : 請(qǐng)按照以下5步全部操作完畢后再編譯,中間步驟執(zhí)行中如果編譯報(bào)錯(cuò)了不用管,繼續(xù)往下執(zhí)行即可
1.新建項(xiàng)目
首先我們先新建自己的項(xiàng)目,名稱(chēng)起為HuanxinKefu
2.向Build Settings → Linking → Other Linker Flags 中增加-ObjC(注意區(qū)分大小寫(xiě))。
3.復(fù)制所需SDK文件夾
-
打開(kāi)項(xiàng)目目錄,新建一個(gè)文件夾HXService,從商城Demo中找HelpDeskUI文件夾,找到后復(fù)制進(jìn)HXService文件夾
-
新建一個(gè)文件夾HXFramework,然后將HelpDesk.framework摩桶、HyphenateLite.framework(不包含實(shí)時(shí)語(yǔ)音功能)放在HXFramework文件夾中
4.導(dǎo)入SDK
-
將HXService文件夾拖進(jìn)項(xiàng)目中,勾選 Copy items if needed 和 Create groups,此時(shí)不要慌著編譯,報(bào)錯(cuò)也沒(méi)事,先不管,繼續(xù)往下操作
注意點(diǎn) : Xcode 9.0的bug,把文件拖進(jìn)項(xiàng)目后,這些文件的.m不能自動(dòng)添加到Compile Source中,導(dǎo)致找不到文件等錯(cuò)誤,需要手動(dòng)添加.m到Compile Source,特別麻煩
解決方案 : 升級(jí)Xcode 9.1或9.2
-
導(dǎo)入SDK,選中項(xiàng)目--General--Embedded Binaries--添加HelpDesk.framework和HyphenateLite.framework
5.在項(xiàng)目中新建一個(gè)文件夾HXChat,將商城Demo中的下圖中藍(lán)色標(biāo)注文件或文件夾全部復(fù)制進(jìn)HXChat
HFileViewController : 查看聊天文件控制器(不是發(fā)送文件的)
HDChatViewController : 聊天界面控制器(最主要的控制器)
AppDelegate+HelpDesk : 初始化環(huán)信SDK,APNs,登錄,退出操作,多設(shè)備登錄功能等
SCLoginManger : 環(huán)信SDK管理者(單例)
SVProgressHUD : 蒙版/HUD
LocalDefine : 一些常量的宏定義
7.在pch文件或全局.h文件中添加如下代碼:
//以下兩段代碼選用一個(gè)就好
//包含實(shí)時(shí)音視頻的這樣添加
#ifdef __OBJC__
#import <HelpDesk/HelpDesk.h>
#import "HelpDeskUI.h"
#import "SVProgressHUD.h"
#import "LocalDefine.h"
#import "UIImageView+WebCache.h"
#import "UIButton+WebCache.h"
#import "其他頭文件"
#endif
//不包含實(shí)時(shí)音視頻的這樣添加
#ifdef __OBJC__
#import <HelpDeskLite/HelpDeskLite.h>
#import "HelpDeskUI.h"
#import "SVProgressHUD.h"
#import "LocalDefine.h"
#import "UIImageView+WebCache.h"
#import "UIButton+WebCache.h"
#import "其他頭文件"
#endif
注意點(diǎn):如果你的pch文件中已經(jīng)導(dǎo)入了其他頭文件,務(wù)必將其他頭文件也寫(xiě)在#ifdef __OBJC__ 和 #endif 之間,不然會(huì)報(bào)錯(cuò),因?yàn)镾DK中包含的有C文件
8.需要修改的細(xì)節(jié)
- AppDelegate+HelpDesk.m 文件中注釋掉Bugly(如果你需要bugly,在商城demo的Frameworks文件夾中找到Bugly.framework并拖進(jìn)項(xiàng)目,此步則可以不用執(zhí)行)
//#import <Bugly/Bugly.h>
//[Bugly startWithAppId:@"b336efe49a"];
- AppDelegate+HelpDesk.m 文件中,導(dǎo)入該頭文件
#import "SCLoginManager.h"
- HDChatViewController中需要注釋掉以下代碼:
//第17行導(dǎo)入頭文件,注釋掉
//#import "HDLeaveMsgViewController.h"
//第77行的留言方法注釋掉
// 留言
/*
- (void)moreViewLeaveMessageAction:(HDChatBarMoreView *)moreView
{
[self stopAudioPlayingWithChangeCategory:YES];
HDLeaveMsgViewController *leaveMsgVC = [[HDLeaveMsgViewController alloc] init];
[self.navigationController pushViewController:leaveMsgVC animated:YES];
}
*/
//第211行,跳轉(zhuǎn)留言控制器的方法注釋掉
/*
- (void)didPressedLeaveMsgButton {
HDLeaveMsgViewController *leaveMsgVC = [[HDLeaveMsgViewController alloc] init];
[self.navigationController pushViewController:leaveMsgVC animated:YES];
}
*/
5.文件重復(fù)duplicate報(bào)錯(cuò)注意點(diǎn)
如果導(dǎo)入SDK后,編譯,報(bào)文件重復(fù)duplicate的錯(cuò),那是因?yàn)榄h(huán)信HelpDeskUI中的第三方庫(kù)與你項(xiàng)目中已集成的第三方庫(kù)重復(fù),所以直接刪掉HelpDeskUI--3rdparty中對(duì)應(yīng)的庫(kù)即可6.此時(shí)編譯,Success編譯成功--文件結(jié)構(gòu)如下
二桥状、相關(guān)配置
1.SDK 暫時(shí)不支持bitcode,在Build Settings →Enable Bitcode 改為NO硝清。
2.去除大量多余的警告,在Build Settings →documentation comments 改為NO
3.在工程info.plist文件中,增加隱私權(quán)限:
Privacy - Photo Library Usage Description 需要訪問(wèn)您的相冊(cè)
Privacy - Microphone Usage Description 需要訪問(wèn)您的麥克風(fēng)
Privacy - Camera Usage Description 需要訪問(wèn)您的攝像機(jī)
三转晰、使用
1.初始化
- 在AppDelegate.m文件中的導(dǎo)入頭文件
#import "AppDelegate+HelpDesk.h"
#import "ViewController.h" //初始界面,登錄/注冊(cè)界面
- 在AppDelegate.m的- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 方法中調(diào)用
//1.創(chuàng)建窗口
self.window = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds];
//2.初始化環(huán)信
[self easemobApplication:application didFinishLaunchingWithOptions:launchOptions];
//3.添加自定義小表情
[[HDEmotionEscape sharedInstance] setEaseEmotionEscapePattern:@"\\[[^\\[\\]]{1,3}\\]"];
[[HDEmotionEscape sharedInstance] setEaseEmotionEscapeDictionary:[HDConvertToCommonEmoticonsHelper emotionsDictionary]];
//4.設(shè)置根控制器
UIStoryboard *story = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
ViewController *vc = [story instantiateViewControllerWithIdentifier:@"story"];
UINavigationController *nav = [[UINavigationController alloc]initWithRootViewController:vc];
self.window.rootViewController = nav;
//5.顯示窗口
[self.window makeKeyAndVisible];
return YES;
- 在初始界面ViewController中進(jìn)行登錄注冊(cè)
首先導(dǎo)入頭文件
#import "HDChatViewController.h"
#import "SCLoginManager.h"
然后實(shí)現(xiàn)注冊(cè)方法
//注冊(cè)
- (void)regHuanXin{
HError *error = [[HChatClient sharedClient] registerWithUsername:self.username.text password:self.password.text];
if (!error) {
NSLog(@"注冊(cè)成功");
}else{
NSLog(@"注冊(cè)失敗:%@",error.errorDescription);
}
}
實(shí)現(xiàn)登錄方法,判斷登錄成功,則跳轉(zhuǎn)到聊天控制器HDChatViewController
//登錄方法
- (void)loginHuanXin{
HChatClient *client = [HChatClient sharedClient];
if (client.isLoggedInBefore != YES) {
HError *error = [client loginWithUsername:self.username.text password:self.password.text];
if (!error) {
NSLog(@"登錄成功");
[self joinChat];
} else {
NSLog(@"登錄失敗");
}
}else{
[self joinChat];
}
}
//跳轉(zhuǎn)到聊天控制器(重點(diǎn))
- (void)joinChat{
SCLoginManager *sc = [SCLoginManager shareLoginManager];
HDChatViewController *chatVC = [[HDChatViewController alloc] initWithConversationChatter:sc.cname]; // 獲取地址:kefu.easemob.com芦拿,“管理員模式 > 渠道管理 > 手機(jī)APP”頁(yè)面的關(guān)聯(lián)的“IM服務(wù)號(hào)”
[self.navigationController pushViewController:chatVC animated:YES];
}
- 退出登錄方法
//退出登錄
//如果要更換賬號(hào)登錄,一定要退出登錄后再登錄
- (IBAction)loginOutAction:(id)sender {
HError *error = [[HChatClient sharedClient] logout:YES];
if (error) { //登出出錯(cuò)
NSLog(@"退出登錄出錯(cuò)");
} else {//登出成功
NSLog(@"退出登錄成功");
}
}
2.配置環(huán)信
-
找到AppDelegate+HelpDesk.m文件中的initializeCustomerServiceSdk方法,配置推送證書(shū)的名稱(chēng),關(guān)于生成推送證書(shū)可參考 : http://www.reibang.com/p/4be5838338eb
其中的選項(xiàng)可以關(guān)閉/開(kāi)啟打印日志
-
在LocalDefine.h文件中,填寫(xiě)與客戶(hù)互動(dòng)云后臺(tái)關(guān)聯(lián)的信息,與后臺(tái)建立關(guān)聯(lián)關(guān)系
-
至此,基本集成工作已全部完畢,我們打開(kāi)APP嘗試聊天
首先注冊(cè)賬號(hào)
然后點(diǎn)擊登錄,登錄成功跳轉(zhuǎn)到聊天控制器,我們嘗試發(fā)送一條消息給后臺(tái)客服
至此,我們代碼使用過(guò)程已經(jīng)全部寫(xiě)完了,表情和語(yǔ)音信息都可以正常使用,目前只能接收和查看文件,如果想要集成發(fā)送文件功能,可以參考http://blog.csdn.net/mengmakies/article/details/64122172
3.注意點(diǎn)
- 遠(yuǎn)程推送在AppDelegate+HelpDesk中已經(jīng)集成,本地推送代碼可以參考商城Demo
- 聊天控制器HDChatViewController繼承自HelpDeskUI中的HDMessageViewController,HDMessageViewController才是真正的聊天控制器,如果要修改東西,也可以從該控制器中修改
- 當(dāng)聊天控制器HDChatViewController沒(méi)有加載(例如APP剛啟動(dòng))或已經(jīng)dealloc,此時(shí)是不能接受到后臺(tái)發(fā)的消息的(HDChatViewController有消息監(jiān)聽(tīng)方法),但是我們使用中往往會(huì)有這樣的需求,此時(shí),你可以在AppDelegate+HelpDesk(其他不會(huì)dealloc的控制器也可以)中也添加消息監(jiān)聽(tīng)的代理方法,多個(gè)接受消息監(jiān)聽(tīng)的方法互不影響
//添加消息監(jiān)控,第二個(gè)參數(shù)是執(zhí)行代理方法的隊(duì)列查邢,默認(rèn)是主隊(duì)列
[[HChatClient sharedClient].chatManager addDelegate:self delegateQueue:nil];
//移除消息監(jiān)控
[[HChatClient sharedClient].chatManager removeDelegate:self];
- (void)messagesDidReceive:(NSArray *)aMessages{
//收到普通消息,格式:<HMessage *>
//只接收未讀消息,每條消息都會(huì)調(diào)用一次該方法
}
-
頭像和昵稱(chēng)都可以在HelpDeskUI中修改
四蔗崎、總結(jié)
1.更多擴(kuò)展功能可以查看環(huán)信文檔,如有需要,我可以將功能加在自己的Demo中
2.如果在集成過(guò)程中遇到任何問(wèn)題,請(qǐng)?jiān)谙路搅粞詞我們共同交流
3.附github的demo地址 : 自己寫(xiě)的demo
下載后只需導(dǎo)入HelpDeskLite.framework,HyphenateLite.framework即可
4.感謝各位的支持~