iOS集成環(huán)信移動客服

前幾天集成環(huán)信移動客服,遇到了許多問題约啊,集成的過程也是磕磕絆絆饵逐,現(xiàn)在總結(jié)出來記錄一下劲阎。步驟大體是這樣:

1.首先到環(huán)信官網(wǎng)下載3.0SDK的demo 網(wǎng)址:http://www.easemob.com/download

(PS:因為我當(dāng)時下的SDK是最新的3.1.5版本,環(huán)信官方文檔和最新的3.0的demo中刨沦,有好多API和類名都對不上诗宣,導(dǎo)致了我走了許多彎路,這一點小伙伴們可以借鑒一下)

2.然后將demo中的SDK加入到你的工程中(SDK的文件名是 HyphenateSDK)想诅,SDK文件中有兩個.a包召庞,一個是帶實時通話功能(HyphenateFullSDK),一個是不帶的(HyphenateSDK)来破,選其中一個篮灼,另一個刪除掉,兩者只能保留一個徘禁。具體如何添加SDK以及SDK的依賴庫參考環(huán)信官方鏈接:http://docs.easemob.com/doku.php?id=im:300iosclientintegration:20iossdkimport

3.添加完SDK之后诅诱,添加聊天頁面,環(huán)信demo中UI的部分都封裝在了EaseUI文件中(具體是聊天頁面晌坤,會話列表界面逢艘,聯(lián)系人界面),找到環(huán)信 demo中的EaseUI文件骤菠。將EaseUI內(nèi)部的EaseUI,以及EaseUIResource里的Resource疤孕,以及export文件 --->resource文件-->EaseUIResource.bundle商乎,將這3個文件加到你的工程中,編譯的過程會報錯祭阀,下面列舉幾個常見的報錯的解決辦法:

? ? ?1)修改報錯的路徑: buildSetting ->搜索library search paths鹉戚,將報錯的路徑都刪除掉,再重新添加進去专控,我出現(xiàn)的路徑問題是我項目中友盟和樂視抹凳,刪除重新添加就好了。

? ? ?2)SDK 不支持 bitcode伦腐,向Build Settings →Linking →Enable Bitcode 中設(shè)置 NO赢底。

? ? ?3)刪除EMSDWebImage ,MJRefesh , MBProgress(因為我的項目中有這三個框架,重復(fù)了)柏蘑,編譯后幸冻,把帶有EMSDWebImage都改成SDWebImage

? ? ?4)然后先找到自己項目中的pch文件,然后將SDK的頭文件引入到你的pch文件中咳焚,如果是用的帶實時通話功能的SDK就引入 #import "EMSDKFull.h" ?如果不帶實時通話功能的引入 #import "EMSDK.h"洽损,同時在引入 #import "EaseUI.h"(UI的頭文件)

4.如果工程編譯成功了,那么恭喜你革半,可以寫移動客服代碼了碑定。在你的appdelegate流码,寫上初始化環(huán)信appkey,以及登錄環(huán)信服務(wù)器的方法:http://docs.easemob.com/doku.php?id=im:300iosclientintegration:30iossdkbasic (收發(fā)消息是根據(jù)環(huán)信ID延刘,客戶端一定要寫登錄環(huán)信服務(wù)器的方法漫试,這個環(huán)信ID就是你環(huán)信管理后臺應(yīng)用下的IM用戶)。然后自己可以寫一個按鈕访娶,在按鈕的點擊事件中商虐,跳轉(zhuǎn)到聊天頁面,方法如下:

EaseMessageViewController *message = [[EaseMessageViewController alloc] initWithConversationChatter:"這里填接受消息方的環(huán)信ID" conversationType:EMConversationTypeChat];

這里用到的聊天頁面就是EaseUI中的EaseMessageViewController.m聊天頁面崖疤,自己引一下頭文件

這里需要注意兩點:

1)conversationType:后面是個枚舉類型秘车,集成的時候可以點進去看一下,因為做的是移動客服劫哼,所以選擇EMConversationTypeChat(單聊)就行叮趴。

2)在跳轉(zhuǎn)到聊天控制界面之前,要實例化聊天控制器EaseMessageViewController权烧,但是實例化的時候一定不能這么寫:EaseMessageViewController *message = [[EaseMessageViewController alloc] init];這種寫法是錯誤的眯亦。這樣會生成一個新的聊天界面,之前的聊天記錄和信息是獲取不到的般码,一定要按照上面正確的寫法來寫妻率。

以上集成SDK的過程可以參考下面的視頻,視頻地址:http://www.imgeek.org/video/

昵稱板祝、頭像的設(shè)置


這里說一下頭像和昵稱獲取的方法:第一種是發(fā)送請求從后臺獲取宫静,第二種是從本地獲取,我是從本地取出來的

- (id)messageViewController:(EaseMessageViewController *)viewController ? ? ? ? ? ? ? ? ? ? ? ? ? modelForMessage:(EMMessage *)message{ ? ?idmodel = nil;

//獲取用戶的模型信息

model = [[EaseMessageModel alloc] initWithMessage:message];

if (model.isSender) {

model.avatarImage = [UIImage imageNamed:@"EaseUIResource.bundle/user"];

}else{

model.avatarImage = [UIImage imageNamed:@"road_chat_icon"];

}

//從本地獲取昵稱和頭像券时,在此處賦值即可

NSString * nickName = @"從本地獲取的昵稱";

NSString * araURLStr = @"從本地獲取的頭像";

NSString * currentName = [[EMClient sharedClient] currentUsername];

NSString * msgName = model.message.from;

if ([currentName isEqualToString:msgName]) {

//設(shè)置自己的頭像

if (nickName) {

model.nickname = nickName;

}

if (araURLStr) {

model.avatarURLPath = araURLStr;

}

}else{

//設(shè)置對方的頭像和昵稱

model.nickname = @"設(shè)置對方的昵稱";

model.avatarURLPath = @"設(shè)置對方的頭像";

}

model.failImageName = @"imageDownloadFail";

return model;

}

發(fā)送擴展消息

當(dāng)點擊進入聊天界面的時候孤里,默認是把商品的信息詳情給發(fā)過去,這時需要定義擴展消息橘洞。


這里說明一下:

? ? ? ? 1)commodityInfo是自己定義 的一個字典捌袜,為了接收從上一個控制器傳過來的商品信息。

? ? ? ? 2)messageExt中是想要發(fā)送的擴展消息炸枣,其中"msgtype"是在客服后臺的聊天界面要展示的內(nèi)容虏等,"weichat"是用戶要展示的詳細信息

? ? 3)在移動端展示的時候,問了客服抛虏,說是讓定義一個cell,繼承自EaseBaseMessageCell博其,可以自定義中的bubbleView來進行布局。我是定義了一個新的cell迂猴,繼承UITableViewCell慕淡,然后在聊天控制器的- (UITableViewCell *)messageViewController:(UITableView *)tableView cellForMessageModel:(id)model方法中,根據(jù)是否是擴展消息沸毁,來創(chuàng)建擴展消息的cell峰髓。

推送問題

在網(wǎng)上查資料的時候傻寂,發(fā)現(xiàn)大多數(shù)的人都是因為推送證書的問題而導(dǎo)致推送不成功。關(guān)于證書的詳細配置和上傳問題携兵,可以參考這個鏈接:http://www.imgeek.org/article/825307504

說一下本地通知的實現(xiàn):

具體原理可以參考這個鏈接:http://blog.csdn.net/u012236875/article/details/52328783

代碼如下:

- (void)didReceiveMessages:(NSArray *)aMessages

{

for(EMMessage *message in aMessages){

UIApplicationState state = [[UIApplication sharedApplication] applicationState];

switch (state) {

case UIApplicationStateBackground:

[self showNotificationWithMessage:message];

break;

default:

break;

}

}

}

- (void)showNotificationWithMessage:(EMMessage *)message

{

EMPushOptions *options = [[EMClient sharedClient] pushOptions];

//發(fā)送本地推送

UILocalNotification *notification = [[UILocalNotification alloc] init];

notification.fireDate = [NSDate date]; //觸發(fā)通知的時間

if (options.displayStyle == EMPushDisplayStyleMessageSummary) {

EMMessageBody * ?messageBody = message.body;

NSString *messageStr = nil;

switch (messageBody.type) {

case EMMessageBodyTypeText:

{

messageStr = ((EMTextMessageBody *)messageBody).text;

}

break;

case EMMessageBodyTypeImage:

{

messageStr = NSLocalizedString(@"message.image", @"Image");

}

break;

default:

break;

}

NSString *title = message.from;

notification.alertBody = [NSString stringWithFormat:@"%@:%@", title, messageStr];

}

else{

// ? ? ? ?notification.alertBody = NSLocalizedString(@"receiveMessage", @"you have a new message");

notification.alertBody = @"您有一條新消息";

}

#warning 去掉注釋會顯示[本地]開頭, 方便在開發(fā)中區(qū)分是否為本地推送

//notification.alertBody = [[NSString alloc] initWithFormat:@"[本地]%@", notification.alertBody];

notification.alertAction = NSLocalizedString(@"open", @"Open");

notification.timeZone = [NSTimeZone defaultTimeZone];

notification.soundName = UILocalNotificationDefaultSoundName;

//發(fā)送通知

[[UIApplication sharedApplication] scheduleLocalNotification:notification];

}

總結(jié):

? ? ? ? 在集成的過程中疾掰,會遇到很多問題。遇到問題的時候徐紧,一定要多和項目組的人溝通静檬,安卓和iOS集成的原理差不多,和安卓人員溝通可能會給你解決問題帶來思路并级。最主要的還是要在環(huán)信官網(wǎng)上咨詢客服拂檩,因為客服會根據(jù)你的實際情況來幫你解決問題。環(huán)信官網(wǎng)的大部分客服態(tài)度還是挺好的嘲碧,技術(shù)也蠻專業(yè)的稻励,會幫到你很多。在這里向他們表示感謝愈涩。

? ? ? ? 以上就是我在集成環(huán)信移動客服上的大致過程望抽,如果有哪里不對的地方歡迎指出,大家一起學(xué)習(xí)履婉,一起進步煤篙!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市毁腿,隨后出現(xiàn)的幾起案子舰蟆,更是在濱河造成了極大的恐慌,老刑警劉巖狸棍,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異味悄,居然都是意外死亡草戈,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門侍瑟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來唐片,“玉大人,你說我怎么就攤上這事涨颜》丫拢” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵庭瑰,是天一觀的道長星持。 經(jīng)常有香客問我,道長弹灭,這世上最難降的妖魔是什么督暂? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任揪垄,我火速辦了婚禮,結(jié)果婚禮上逻翁,老公的妹妹穿的比我還像新娘饥努。我一直安慰自己,他們只是感情好八回,可當(dāng)我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布酷愧。 她就那樣靜靜地躺著,像睡著了一般缠诅。 火紅的嫁衣襯著肌膚如雪溶浴。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天滴铅,我揣著相機與錄音戳葵,去河邊找鬼。 笑死汉匙,一個胖子當(dāng)著我的面吹牛拱烁,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播噩翠,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼戏自,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了伤锚?” 一聲冷哼從身側(cè)響起擅笔,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎屯援,沒想到半個月后猛们,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡狞洋,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年弯淘,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吉懊。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡庐橙,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出借嗽,到底是詐尸還是另有隱情态鳖,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布恶导,位于F島的核電站浆竭,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜兆蕉,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一羽戒、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧虎韵,春花似錦易稠、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至测萎,卻和暖如春亡电,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背硅瞧。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工份乒, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人腕唧。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓或辖,卻偏偏與公主長得像,于是被迫代替她去往敵國和親枣接。 傳聞我的和親對象是個殘疾皇子颂暇,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,577評論 2 353

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