【iOS】環(huán)信客戶(hù)互動(dòng)云SDK集成+使用攻略(二)

上一篇文章中我們了解了環(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文件夾
    導(dǎo)入HelpDeskUI.png
  • 新建一個(gè)文件夾HXFramework,然后將HelpDesk.framework摩桶、HyphenateLite.framework(不包含實(shí)時(shí)語(yǔ)音功能)放在HXFramework文件夾中
    導(dǎo)入環(huán)信客戶(hù)互動(dòng)云SDK.png
4.導(dǎo)入SDK
  • 將HXService文件夾拖進(jìn)項(xiàng)目中,勾選 Copy items if needed 和 Create groups,此時(shí)不要慌著編譯,報(bào)錯(cuò)也沒(méi)事,先不管,繼續(xù)往下操作
    導(dǎo)入HelpDeskUI.png

注意點(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
    導(dǎo)入SDK.png
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 : 一些常量的宏定義


所需文件.png
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ù)即可
HelpDeskUI中的第三方庫(kù).png
6.此時(shí)編譯,Success編譯成功--文件結(jié)構(gòu)如下
最終文件瀏覽.png

二桥状、相關(guān)配置

1.SDK 暫時(shí)不支持bitcode,在Build Settings →Enable Bitcode 改為NO硝清。
image.png
2.去除大量多余的警告,在Build Settings →documentation comments 改為NO
去除大量多余警告.png
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ī)


權(quán)限配置.png

三转晰、使用

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)啟打印日志

    image.png

  • 在LocalDefine.h文件中,填寫(xiě)與客戶(hù)互動(dòng)云后臺(tái)關(guān)聯(lián)的信息,與后臺(tái)建立關(guān)聯(lián)關(guān)系
    image.png
  • 至此,基本集成工作已全部完畢,我們打開(kāi)APP嘗試聊天

    首先注冊(cè)賬號(hào)
    注冊(cè).png

    然后點(diǎn)擊登錄,登錄成功跳轉(zhuǎn)到聊天控制器,我們嘗試發(fā)送一條消息給后臺(tái)客服
    前臺(tái)發(fā)消息.png

后臺(tái)接收到消息.png

至此,我們代碼使用過(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中修改


    修改頭像/昵稱(chēng).png

四蔗崎、總結(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.感謝各位的支持~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市扰藕,隨后出現(xiàn)的幾起案子缓苛,更是在濱河造成了極大的恐慌,老刑警劉巖邓深,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件未桥,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡芥备,警方通過(guò)查閱死者的電腦和手機(jī)冬耿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)萌壳,“玉大人亦镶,你說(shuō)我怎么就攤上這事「の停” “怎么了缤骨?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)尺借。 經(jīng)常有香客問(wèn)我绊起,道長(zhǎng),這世上最難降的妖魔是什么褐望? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任勒庄,我火速辦了婚禮串前,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘实蔽。我一直安慰自己荡碾,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布局装。 她就那樣靜靜地躺著坛吁,像睡著了一般。 火紅的嫁衣襯著肌膚如雪铐尚。 梳的紋絲不亂的頭發(fā)上拨脉,一...
    開(kāi)封第一講書(shū)人閱讀 49,144評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音宣增,去河邊找鬼玫膀。 笑死,一個(gè)胖子當(dāng)著我的面吹牛爹脾,可吹牛的內(nèi)容都是我干的帖旨。 我是一名探鬼主播,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼灵妨,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼解阅!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起泌霍,我...
    開(kāi)封第一講書(shū)人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤货抄,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后朱转,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體蟹地,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年肋拔,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了锈津。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡凉蜂,死狀恐怖琼梆,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情窿吩,我是刑警寧澤茎杂,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站纫雁,受9級(jí)特大地震影響煌往,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一刽脖、第九天 我趴在偏房一處隱蔽的房頂上張望羞海。 院中可真熱鬧,春花似錦曲管、人聲如沸却邓。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)腊徙。三九已至,卻和暖如春檬某,著一層夾襖步出監(jiān)牢的瞬間撬腾,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工恢恼, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留民傻,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓场斑,卻偏偏與公主長(zhǎng)得像饰潜,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子和簸,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

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