史上最詳細(xì)的環(huán)信移動(dòng)客服APP快速集成秘籍


項(xiàng)目需要集成環(huán)信客服系統(tǒng)救湖,這兩天的摸爬滾打和客服溝通后整理一篇文章趟紊,以作備份

環(huán)信的客服真的真的真的很贊

撰稿時(shí)間:2017.03.07晚

相關(guān)文檔:
環(huán)信開(kāi)發(fā)文檔
移動(dòng)客服 iOS SDK 集成
移動(dòng)客服 iOS SDK API
移動(dòng)客服:商城”demo源碼和EaseUI源碼(iOS)
移動(dòng)客服 Android SDK 集成
移動(dòng)客服 Android SDK API
移動(dòng)客服:商城”demo源碼和EaseUI源碼(Android)

后臺(tái):
移動(dòng)客服后臺(tái)
環(huán)信管理后臺(tái)

詳細(xì)步驟如下:

SDK方面
  1. 先把 移動(dòng)客服:商城”demo源碼和EaseUI源碼(iOS) 下載下來(lái)悠轩,該SDK基于IM SDK 3.x芬失,如同時(shí)使用環(huán)信IM功能(非音視頻)袍啡,需使用此文檔中的初始化乞娄、登錄剃斧、登出操作轨香,不需要添加IM的SDK,其IMSDK-API正常使用幼东。
  2. 打開(kāi)下載好的demo臂容,架構(gòu)如下圖

    將紅色框框里面的兩個(gè)文件夾,在Finder中復(fù)制到自己的項(xiàng)目的適當(dāng)路徑中(這個(gè)地方有個(gè)坑根蟹,稍后下午詳細(xì)說(shuō)明)脓杉,然后拖拽到項(xiàng)目時(shí)選擇 Create groups
  3. Build Phases ---> Link Binary With Libraries 中添加依賴庫(kù)
AudioToolbox.framework
AVFoundation.framework
libc++.dylib
libz.dylib
libstdc++.6.0.9.dylib
libsqlite3.dylib
// Xcode 7 及以上版本 . dylib 為 .tbd

如下圖:


  1. Build Settings ---> Linking ---> Other Linker Flags 中增加 -ObjC娜亿。
  2. SDK 不支持 bitcode丽已,在 Build Settings ---> Build Options ---> Enable Bitcode 中設(shè)置 NO。


    步驟4买决、步驟5
  3. 在工程info.plist文件中 增加隱私權(quán)限



    此處相關(guān)的權(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ī)

詳細(xì)的權(quán)限設(shè)置沛婴,請(qǐng) 點(diǎn)我點(diǎn)我

  1. 在 .pch 中 或者 全局的 .h 中添加如下代碼:
 #ifdef __OBJC__
 #import "helpdesk_sdk.h"
 #import "HelpDeskUI.h"
 #endif

如果項(xiàng)目中沒(méi)有 .pch督赤,如下步驟創(chuàng)建:
a. command + N ---> PCH File ---> Next


b. 可以修改名字 ---> Create

c. 如下圖配置嘁灯,搜索 prefix 即可

創(chuàng)建APP關(guān)聯(lián)

上面的步驟依據(jù)文檔 可以輕松完成,但是APP相關(guān)關(guān)聯(lián)躲舌,就比較坑了丑婿,如果沒(méi)有集成過(guò)環(huán)信聊天的經(jīng)歷的話很容易碼入誤區(qū),下面請(qǐng)緊跟隨筆者步驟:

  1. 需要申請(qǐng)兩個(gè)賬號(hào):移動(dòng)客服后臺(tái)没卸、環(huán)信管理后臺(tái)羹奉,如果已經(jīng)有了請(qǐng)下一步。
  2. 先在 環(huán)信管理后臺(tái) 創(chuàng)建應(yīng)用

    點(diǎn)擊應(yīng)用顯示應(yīng)用的信息(** AppKey约计、Client ID诀拭、Client Secret** 這幾個(gè)要記著)
  3. 環(huán)信管理后臺(tái) 注冊(cè)IM用戶(名稱要記著)
  4. 移至 環(huán)信管理后臺(tái) 創(chuàng)建APP關(guān)聯(lián)( 官方文檔,官方文檔介紹有些不全面煤蚌,而且有點(diǎn)不全面 )
    在后臺(tái)右上角選擇 管理員模式 ---> 渠道管理 ---> 手機(jī)APP ---> 添加APP關(guān)聯(lián) ---> 去關(guān)聯(lián)IM賬號(hào)

  5. 輸入關(guān)聯(lián)的應(yīng)用的信息耕挨,下圖方框中為所關(guān)聯(lián)應(yīng)用創(chuàng)建的IM用戶



    輸入完畢细卧,保存即可如下圖


  6. 記下 tenantId 租戶ID,下文用到:設(shè)置 ---> 企業(yè)信息
  7. 上面步驟完成后筒占,官方文檔中沒(méi)有提及的一步: 設(shè)置--->會(huì)話分配規(guī)則

    至此APP關(guān)聯(lián)結(jié)束贪庙,可以切回 客服模式
代碼部分
  1. 入口類(lèi)中 didFinishLaunchingWithOptions,初始化環(huán)信客服
    HOptions *option = [[HOptions alloc] init];
    option.appkey = @"***";
    option.tenantId = @"***"; // 上文提到的 設(shè)置 ---> 企業(yè)信息
    //推送證書(shū)名字
#if DEBUG
    option.apnsCertName = @"開(kāi)發(fā)環(huán)境推送證書(shū)名稱";
#else
    option.apnsCertName = @"正式環(huán)境推送證書(shū)名稱";
#endif
    //Kefu SDK 初始化,初始化失敗后將不能使用 SDK
    HError *initError = [[HChatClient sharedClient] initializeSDKWithOptions:option];
    if (initError) { // 初始化錯(cuò)誤
        UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"" message:@"客服系統(tǒng)初始化錯(cuò)誤" delegate:nil cancelButtonTitle:@"知道了" otherButtonTitles:nil, nil];
        [alertView show];
    }

    [[HChatClient sharedClient] addDelegate:self delegateQueue:nil];
  1. 入口類(lèi)遵循 HChatClientDelegate
  2. 入口類(lèi)實(shí)現(xiàn)協(xié)議
 //  環(huán)信客服連接服務(wù)器的狀態(tài)變化時(shí)會(huì)接收到該回調(diào), 有以下幾種情況, 會(huì)引起該方法的調(diào)用:  1. 登錄成功后, 手機(jī)無(wú)法上網(wǎng)時(shí), 會(huì)調(diào)用該回調(diào)  2. 登錄成功后, 網(wǎng)絡(luò)狀態(tài)變化時(shí), 會(huì)調(diào)用該回調(diào)
//  @param aConnectionState 當(dāng)前狀態(tài)
 - (void)connectionStateDidChange:(HConnectionState)aConnectionState {
        NSLog(@"\n-----> %@", aConnectionState == HConnectionConnected ? @"已連接" : @"未連接");
 }
  1. 實(shí)現(xiàn)下面方法
 - (void)applicationWillEnterForeground:(UIApplication *)application  {
       [[HChatClient sharedClient] applicationWillEnterForeground:self];
}

 - (void)applicationDidEnterBackground:(UIApplication *)application  {
       [[HChatClient sharedClient] applicationDidEnterBackground:self];
}
  1. 快速集成可以如下操作:
    找到下載的demo中如下 .h 和 .m (如下圖)復(fù)制到自己的項(xiàng)目中翰苫,并拖拽到項(xiàng)目中:

    由于 HDChatViewController 繼承自 HDMessageViewController(在 HelpDeskUI 中)止邮,可以直接套用demo里面的相關(guān)邏輯,移入后編譯 修改 由于缺乏相關(guān)引用文件報(bào)錯(cuò)革骨,即可作為聊天頁(yè)面农尖。
  2. 在監(jiān)聽(tīng)進(jìn)入聊天頁(yè)面的func析恋,可以進(jìn)行如下操作
    注冊(cè):經(jīng)驗(yàn)證這里注冊(cè)的賬號(hào)良哲,會(huì)出現(xiàn)在 環(huán)信管理后臺(tái) 該應(yīng)用的 IM用戶列表
  HChatClient *client = [HChatClient sharedClient];
// registerWithUsername:password:  注冊(cè)用戶,同步方法助隧,會(huì)阻塞當(dāng)前線程. 不推薦使用筑凫,建議后臺(tái)通過(guò)REST注冊(cè),快速
// 這里 注冊(cè)的用戶 相當(dāng)于使用app聯(lián)系客服的用戶并村,可以依照一定的規(guī)則來(lái)創(chuàng)建巍实,規(guī)則如下
  HError *error = [[HChatClient sharedClient] registerWithUsername:@"fengfengAppUser" password:@"123456"];
if (error &&  error.code != HErrorUserAlreadyExist) {
      // HErrorNetworkUnavailable 網(wǎng)絡(luò)不可用
      // HErrorUserAlreadyExist 用戶已存在
      // HErrorUserAuthenticationFailed 無(wú)開(kāi)放注冊(cè)權(quán)限(后臺(tái)管理界面設(shè)置[開(kāi)放|授權(quán)])
      // HErrorUserIllegalArgument 用戶名非法
      NSLog(@"注冊(cè)失敗;error code:%d,error description :%@",error.code,error.errorDescription);
  }

環(huán)信 ID 規(guī)則
登錄:

//  由于HChatClient有一個(gè)isLoggedInBefore(BOOL),登錄操作前可以先做個(gè)判斷
if (client.isLoggedInBefore != YES) {
       //這里登錄的賬號(hào)是上面注冊(cè)的賬號(hào)哩牍,或者是從服務(wù)端獲取的賬號(hào)棚潦,也即是使用app聯(lián)系客服的用戶的賬號(hào)
       HError *error2 = [client loginWithUsername:@"fengfengAppUser" password:@"123456"];
       if (!error2) { //登錄成功
           // 這里 的 @"fengfeng01"參數(shù),一定是上文 中 在 環(huán)信客服后臺(tái) 關(guān)聯(lián)的IM賬號(hào)
           HDChatViewController *chatVC = [[HDChatViewController alloc] initWithConversationChatter:@"fengfeng01"];
           [weakSelf.navigationController pushViewController:chatVC animated:YES];
      } else { //登錄失敗
           [weakSelf showTextHud:error.errorDescription];
           return;
      }
 } else { //已經(jīng)成功登錄
       // 這里 的 @"fengfeng01"參數(shù)膝昆,一定是上文 中 在 環(huán)信客服后臺(tái) 關(guān)聯(lián)的IM賬號(hào)
       HDChatViewController *chatVC = [[HDChatViewController alloc] initWithConversationChatter:@"fengfeng01"];
       [weakSelf.navigationController pushViewController:chatVC animated:YES];
  }

這里比較重要 丸边,單獨(dú)再次列出來(lái):

// 這里 的 @"fengfeng01"參數(shù),一定是上文 中 在 環(huán)信客服后臺(tái) 關(guān)聯(lián)的IM賬號(hào)荚孵,也就是 關(guān)聯(lián)的什么賬號(hào)妹窖,這里參數(shù)傳入什么
 HDChatViewController *chatVC = [[HDChatViewController alloc] initWithConversationChatter:@"fengfeng01"];
消息發(fā)送完成回調(diào)block

當(dāng)如上正確配置后,發(fā)送消息可以在回調(diào)block中看到如下信息
在如下圖 .m 中:


在 HDMessageViewController.m 中收叶,如下func中斷點(diǎn):

控制臺(tái)如下:

關(guān)鍵字段在方框中:
_conversationId 骄呼、_to :指的是在 環(huán)信客服后臺(tái) 關(guān)聯(lián)APP 的時(shí)候綁定的 IM賬號(hào)
_from :指的是 上文 注冊(cè)登錄 的賬號(hào)判没。
error:當(dāng)聊天異常的時(shí)候蜓萄,查看 error 中的信息是個(gè)不錯(cuò)的選擇。

至此:環(huán)信客服聊天系統(tǒng) 簡(jiǎn)單的集成完畢澄峰,如果一切順利的話可以在環(huán)信客服后臺(tái)收到如下信息:如下圖
環(huán)信客服后臺(tái) ---> 管理員模式 ---> 會(huì)話


集成過(guò)程遇到的問(wèn)題:(集成過(guò)程遇到新的問(wèn)題隨時(shí)更新)

  1. 導(dǎo)入SDK后重復(fù)導(dǎo)入編譯報(bào)錯(cuò):如圖



    解決辦法:
    由于環(huán)信客服SDK集成了一些常用的第三方的庫(kù)嫉沽,如果項(xiàng)目本身也存在這些第三方的庫(kù),就 會(huì)引起沖突摊阀,刪除掉耻蛇,然后把報(bào)錯(cuò)的地方修改成正常的調(diào)用即可


  2. 和客服溝通后對(duì)一些疑問(wèn)的整理:

Q:在APP中集成了客服系統(tǒng)后 客戶 和 客服 之間的關(guān)系如何協(xié)調(diào)踪蹬?
A:IM服務(wù)號(hào)就是 IM用戶,你新注冊(cè)一個(gè)IM用戶 然后用于綁定IM服務(wù)號(hào)的臣咖,然后客戶端登錄的用戶 都與這個(gè)綁定的IM服務(wù)號(hào)聊天跃捣,客服系統(tǒng)將與這個(gè)IM服務(wù)號(hào)聊天的會(huì)話分配給客服

Q:注冊(cè)的IM用戶 相當(dāng)于 客服和用戶之前的 樞紐么
M:可以這么理解

Q:為什么 這個(gè)賬號(hào)可以在服務(wù)端注冊(cè),也可以在后臺(tái)管理系統(tǒng)手動(dòng)添加啊
M:其實(shí)都是一個(gè)接口操作的夺蛇,服務(wù)器端的rest接口

Q:是不是 服務(wù)端返回的用于登陸的IM賬號(hào)不同 APP用戶關(guān)聯(lián)的客服也不同了吶疚漆?
M:未必,移動(dòng)客服那邊綁定一個(gè)IM服務(wù)號(hào)就夠用了刁赦,客戶端登錄的其他IM用戶(服務(wù)端返回的或者注冊(cè)的)都給這個(gè)移動(dòng)客服綁定的IM服務(wù)號(hào)發(fā)消息娶聘,環(huán)信的客服系統(tǒng)就能收到客戶端發(fā)送過(guò)來(lái)的消息了


 不定期更新 不合適的地方 還請(qǐng)指點(diǎn)~ 感激不盡
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市甚脉,隨后出現(xiàn)的幾起案子丸升,更是在濱河造成了極大的恐慌,老刑警劉巖牺氨,帶你破解...
    沈念sama閱讀 216,692評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件狡耻,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡猴凹,警方通過(guò)查閱死者的電腦和手機(jī)夷狰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)郊霎,“玉大人沼头,你說(shuō)我怎么就攤上這事∈槿埃” “怎么了进倍?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,995評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)庄撮。 經(jīng)常有香客問(wèn)我背捌,道長(zhǎng),這世上最難降的妖魔是什么洞斯? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,223評(píng)論 1 292
  • 正文 為了忘掉前任毡庆,我火速辦了婚禮,結(jié)果婚禮上烙如,老公的妹妹穿的比我還像新娘么抗。我一直安慰自己,他們只是感情好亚铁,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,245評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布蝇刀。 她就那樣靜靜地躺著,像睡著了一般徘溢。 火紅的嫁衣襯著肌膚如雪吞琐。 梳的紋絲不亂的頭發(fā)上捆探,一...
    開(kāi)封第一講書(shū)人閱讀 51,208評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音站粟,去河邊找鬼黍图。 笑死,一個(gè)胖子當(dāng)著我的面吹牛奴烙,可吹牛的內(nèi)容都是我干的助被。 我是一名探鬼主播,決...
    沈念sama閱讀 40,091評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼切诀,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼揩环!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起幅虑,我...
    開(kāi)封第一講書(shū)人閱讀 38,929評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤丰滑,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后翘单,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體吨枉,經(jīng)...
    沈念sama閱讀 45,346評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蹦渣,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,570評(píng)論 2 333
  • 正文 我和宋清朗相戀三年哄芜,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片柬唯。...
    茶點(diǎn)故事閱讀 39,739評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡认臊,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出锄奢,到底是詐尸還是另有隱情失晴,我是刑警寧澤,帶...
    沈念sama閱讀 35,437評(píng)論 5 344
  • 正文 年R本政府宣布拘央,位于F島的核電站涂屁,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏灰伟。R本人自食惡果不足惜拆又,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,037評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望栏账。 院中可真熱鬧帖族,春花似錦、人聲如沸挡爵。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,677評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)茶鹃。三九已至涣雕,卻和暖如春艰亮,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背挣郭。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,833評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工垃杖, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人丈屹。 一個(gè)月前我還...
    沈念sama閱讀 47,760評(píng)論 2 369
  • 正文 我出身青樓调俘,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親旺垒。 傳聞我的和親對(duì)象是個(gè)殘疾皇子彩库,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,647評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 作為一名常年混跡imGeek開(kāi)發(fā)者社區(qū)的程序猿,本著響應(yīng)社區(qū)號(hào)召的“我為人人先蒋,人人為我”口號(hào)骇钦,贈(zèng)人玫瑰,手留余香竞漾。...
    imGeek閱讀 1,672評(píng)論 0 3
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,081評(píng)論 25 707
  • 1)項(xiàng)目里面不需要環(huán)信SDK的太多功能眯搭,只是想要聊天和好友功能,其他都不用业岁,那SDK一定要總是跟著更新么鳞仙? a.環(huán)...
    DefaultYuan閱讀 26,558評(píng)論 17 59
  • 版權(quán)聲明:本文為博主原創(chuàng)文章,未經(jīng)博主允許不得轉(zhuǎn)載笔时。 前言 公司最近要求做即時(shí)通訊, 直接用了三方環(huán)信了,今天和大...
    Heaven7th閱讀 9,631評(píng)論 24 30
  • 一直有一個(gè)想法 自己去從頭寫(xiě)一款游戲棍好,真正能根據(jù)自己想法增加游戲趣味性 但一直沒(méi)有這種機(jī)會(huì) 也是對(duì)前后端技術(shù)不能全...
    zebei閱讀 543評(píng)論 0 1