iOS 集成環(huán)信(會話列表,聊天昂拂,昵稱頭像設(shè)置受神,自定義cell)

一、環(huán)信SDK的集成

0.先附一張項目聊天界面的截圖格侯,昵稱和頭像鼻听,還有自定義cell都有,會話列表就不貼圖了联四,跟平時我們用QQ 撑碴、微信差不多

1.去環(huán)信官網(wǎng)下載iOS版的SDK ,下載地址:環(huán)信iOS_SDK下載地址 ?朝墩,接口文檔地址:環(huán)信iOS_SDK集成文檔

2.按照接口文檔一步一步將環(huán)信SDK集成到項目中醉拓,制作證書、添加依賴... 這些就不贅述了,官網(wǎng)的文檔十分詳細亿卤,這里我就講一些注意點

集成環(huán)信SDK過程可能遇到的一些情況和解決辦法:

(1)環(huán)信用到的第三方框架有:MWPhotoBrowser愤兵、MJRefresh、MBProgressHUD排吴、SDWebImage(環(huán)信是自己在SDWebImage里面加一些功能并命名為:EMSDWebImage)秆乳,所以你需要把跟你項目相同的框架刪除一個,可以刪除自己的或者刪除環(huán)信的傍念。其中SDWebImage矫夷,個人建議刪除環(huán)信的EMSDWebImage葛闷,然后編譯憋槐,這個時候肯定是編譯失敗,出現(xiàn)失敗的原因是:少了一些sd里面的頭文件和一些方法找不到淑趾,你直接將頭文件刪除阳仔,換成SDWebImage的,方法也是替換成SDWebImage的就行了

(2)可能遇到的情況 :編譯的時候報 "could not build module 'UIKit'" 或者是“could not build module 'Foundation'”扣泊,這種情況就是 你的pch 文件里近范,你導(dǎo)的頭文件 不是包在 ?#ifdef __OBJC__ ? ?#endif ?里面

到此,如果你是嚴格按照官方文檔的步驟一步不落的集成的話延蟹,應(yīng)該是不會有什么問題的评矩,是可以正常編譯運行的。

二阱飘、賬號的登錄

1.看你們項目的要求斥杜,筆者是在自己app登錄的時候,也把環(huán)信賬號登錄(登錄的用戶名和密碼規(guī)則看你們后臺是怎么配置的)沥匈。環(huán)信SDK是有自動登錄的功能的蔗喂,所以盡管用戶殺死app后,再次啟動app時高帖,不需要再次進入登錄界面再次登錄缰儿。

環(huán)信賬號登錄

2.賬號登錄的異常情況,比如說這個環(huán)信賬號在別的地方登錄了散址,那么就會出現(xiàn)登錄失效乖阵,鏈接不到服務(wù)器的情況。這個時候環(huán)信提供了方法和屬性來判斷预麸。 這屬性和方法的回調(diào)是在EMClientDelegate協(xié)議里面的义起,在你的控制器里面遵守協(xié)議就可以

通過屬性來判斷登錄狀態(tài)

這是環(huán)信賬號在你其他地方登錄的時候的回調(diào)方法:

賬號在其他地方登錄

三、會話列表

1.集成會話列表功能也十分簡單的师崎,首先新建一個控制器繼承 EaseConversationListViewController默终,在viewDidLoad里面 設(shè)置delegate和dataSource遵守EaseConversationListViewControllerDelegate、EaseConversationListViewControllerDataSource協(xié)議,并加上 [self ?tableViewDidTriggerHeaderRefresh]; 這句代碼(首次進入刷新數(shù)據(jù))齐蔽。

2.會話列表實時顯示未讀消息两疚。也就是說在會話列表界面的時候,有人發(fā)消息過來了含滴,發(fā)消息來的那個人的頭像要有一個紅色的數(shù)字诱渤,并顯示未讀消息數(shù)量,想要這個功能的話谈况,就要遵守EMChatManagerDelegate 協(xié)議勺美,并設(shè)置代理 [[EMClientsharedClient].chatManageraddDelegate:selfdelegateQueue:nil]; ,這個時候如果有消息來了碑韵,就會走消息的回調(diào)方法赡茸,在方法里面刷新界面即可。 下面的 refreshAndSortView 方法是刷新內(nèi)存中的消息

收到消息的回調(diào)祝闻,刷新界面

3.最后一條消息的顯示格式:在你的控制器里面添加下面代碼 :

- (NSAttributedString*)conversationListViewController:(EaseConversationListViewController*)conversationListViewController

latestMessageTitleForConversationModel:(id)conversationModel

{

NSString*latestMessageTitle =@"";

EMMessage*lastMessage = [conversationModel.conversationlatestMessage];

if(lastMessage) {

EMMessageBody*messageBody = lastMessage.body;

switch(messageBody.type) {

caseEMMessageBodyTypeImage:{

latestMessageTitle =@"[圖片]";

}break;

caseEMMessageBodyTypeText:{

//表情映射占卧。

NSString*didReceiveText = [EaseConvertToCommonEmoticonsHelper

convertToSystemEmoticons:((EMTextMessageBody*)messageBody).text];

latestMessageTitle = didReceiveText;

if([lastMessage.extobjectForKey:MESSAGE_ATTR_IS_BIG_EXPRESSION]) {

latestMessageTitle =@"[動畫表情]";

}

}break;

caseEMMessageBodyTypeVoice:{

latestMessageTitle =@"[音頻]";

}break;

caseEMMessageBodyTypeLocation: {

latestMessageTitle =@"[位置]";

}break;

caseEMMessageBodyTypeVideo: {

latestMessageTitle =@"[視頻]";

}break;

caseEMMessageBodyTypeFile: {

latestMessageTitle =@"[文件]";

}break;

default: {

}break;

}

}

NSMutableAttributedString*attStr = [[NSMutableAttributedStringalloc]initWithString:latestMessageTitle];

returnattStr;

}

3.如果需要加搜索功能的話,就去官方的demo里面 拷貝以下文件:


搜索功能需要的文件

在控制器里面遵守 EMSearchControllerDelegate協(xié)議联喘,把demo里面的這三個方法里面的東西拷貝過來华蜒,刪減掉一些不需要的代碼就行了

搜索功能需要添加的方法

4.會話列表點擊事件:

會話列表點擊事件跳轉(zhuǎn)到聊天界面

四、聊天功能

1.新建一個控制器豁遭,繼承 EaseMessageViewController 叭喜,遵守EaseMessageViewControllerDelegate、EaseMessageViewControllerDataSource協(xié)議蓖谢,設(shè)置delegate和dataSource 即可

2.刪除底部更多菜單按鈕捂蕴,如果你不需要里面的視頻通話、語音通話等功能的話蜈抓,可以刪除按鈕

刪除底部更多菜單的按鈕

當然启绰,你也可以自己添加按鈕并設(shè)置圖片。甚至可以去掉環(huán)信自帶的更多菜單沟使,添加自己自定義的委可。相信大多數(shù)人還是不要自定義的,這里就不把添加按鈕和設(shè)置自定義更多菜單的方法贅述了腊嗡,需要的可以去官方文檔查看着倾,那里有詳細的講解。

3.如果在聊天界面點擊頭像需要跳轉(zhuǎn)到該用戶的個人信息界面或者其他界面的話燕少,實現(xiàn)下面的方法添加跳轉(zhuǎn)的方法即可:

點擊頭像跳轉(zhuǎn)到個人信息界面

到此卡者,即時通訊的 會話列表和聊天功能就已經(jīng)實現(xiàn)了,就是一些UI 細節(jié)的調(diào)整了客们,比如崇决,頭像設(shè)置成自己的用戶體系的頭像材诽,昵稱設(shè)置成自己用戶體系的昵稱,下面我們來講講怎么實現(xiàn)頭像和昵稱的設(shè)置

五恒傻、昵稱和頭像的設(shè)置

1.先簡述下設(shè)置昵稱和頭像功能的實現(xiàn)方式:在用戶發(fā)送消息的時候脸侥,在消息里面添加一些擴展消息,以此將消息發(fā)送者的昵稱和頭像附帶在消息里面發(fā)送過去盈厘,接受消息的人睁枕,通過消息里面的擴展消息(也就是昵稱和頭像)來將昵稱和頭像設(shè)置到界面上

2.先找到發(fā)消息的方法沸手,在發(fā)消息方法里面加擴展消息就可以不需要每次都去調(diào)他的發(fā)消息方法把擴展消息附帶出去外遇。所以,在環(huán)信的 EaseMessageViewController 里面的_sendMessage:方法里將發(fā)消息者的昵稱和頭像附帶在擴展消息里面契吉。 順便提一下:不管是發(fā)送文本消息還是圖片消息跳仿,語音消息都是會走該方法的。所以在登錄的時候應(yīng)該調(diào)你們項目中獲取個人信息的接口栅隐,將昵稱和頭像存儲起來塔嬉,并且在跟換頭像和昵稱地方跟新存儲的昵稱和頭像玩徊。

在發(fā)送消息方法里面將用戶自己的頭像和昵稱附帶在消息擴展里面

3.然后再聊天控制器里面實現(xiàn)下面的方法租悄,將昵稱和頭像顯示出來

設(shè)置昵稱和頭像

4.會話列表設(shè)置昵稱和頭像,需要注意的是恩袱,在用戶第一次和某個人聊天發(fā)消息的時候泣棋,在會話列表是無法從消息擴展里面拿到發(fā)給消息的那個人的昵稱和頭像的,所以你需要存儲聊天對象的昵稱和頭像畔塔,在你點擊進入聊天頁面的時候潭辈。

會話列表設(shè)置昵稱和頭像

到此,昵稱和頭像我們就已經(jīng)可以設(shè)置完成了。

六、自定義聊天Cell

1.新建UITableViewCell文件蛔垢,繼承 EaseBaseMessageCell 闹啦。為了方便閱讀者閱讀無障礙,筆者就將自定義cell的所有代碼 以截圖的形式講解远舅。

2.設(shè)置緩存cell的標識符,并添加子控件。

添加子控件


設(shè)置緩存cell的標識符

3.設(shè)置氣泡和頭像

設(shè)置氣泡背景和頭像

4.添加子控件

添加子控件


添加自定義控件的約束

5.在氣泡里面添加label 以顯示消息

在氣泡里面添加label以顯示消息

6.跟新氣泡約束柏副,設(shè)置氣泡的frmae

跟新氣泡約束,設(shè)置氣泡frame

到此蚣录,自定義cell 就已經(jīng)全部完成了割择。下面是在聊天控制器里面添加自定義cell和計算高度

7.添加自定義的cell,如果是部分顯示自定義的cell,部分是不需要顯示自定的cell的時候萎河,可以根據(jù)擴展消息來判斷

添加自定義的cell

8.設(shè)置cell的高度

設(shè)置cell的高度

到此荔泳,自定義cell并顯示自定義cell的功能已完成

七蕉饼、遠程推送和本地通知

1.首先需要知道的是:只有在app殺死的時候才會走遠程推送,其他時候走本地通知玛歌。也就是說椎椰,app在后臺的時候是走本地通知的,app在被用戶殺死的時候才會走遠程推送沾鳄。

2.遠程推送(這里就講一些細節(jié)注意點慨飘,代碼的話,可以去拷貝官方demo译荞,不管是遠程推送還是本地通知都寫的很清晰明了):

(1)app在沒有被殺死的時候瓤的,收到遠程推送,在- (void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary*)userInfo有回調(diào)吞歼,如果app被殺死了用戶是點擊了通知啟動程序的是不會走上面的 didReceiveRemote......方法的而是走- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions圈膏,所以你需要在該方法里面根據(jù)launchOptions里面是否有UIApplicationLaunchOptionsRemoteNotificationKey 這個key來判斷是不是收到了遠程推送點擊通知啟動程序的,然后在里面添加跳轉(zhuǎn)代碼篙骡,如:

根據(jù)key來判斷是不是點擊通知啟動程序的

(2)遠程推送APNs需要配置推送證書稽坤,可以參考官方文檔來配置,制作推送證書文檔地址:制作推送證書

2.本地推送

(1)注冊本地通知:在application didFinishLaunchingWithOptions方法里面注冊本地通知糯俗,iOS 8以后需要自己注冊本地通知

(2)使用UNUserNotificationCenter發(fā)送本地通知需要注意這個方法是iOS 10 才有的方法尿褪,所以需要適配判斷,否則iOS 10以下系統(tǒng)的用戶會閃退得湘。

(3)關(guān)于接受到通知杖玲,用戶點擊通知啟動程序的回調(diào)看下面的截圖

關(guān)于用戶點擊通知啟動程序的回調(diào)方法解析

如果文章中有什么錯誤或者更好的實現(xiàn)方式,歡迎各位留言指點淘正,謝謝~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末摆马,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子鸿吆,更是在濱河造成了極大的恐慌囤采,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件惩淳,死亡現(xiàn)場離奇詭異蕉毯,居然都是意外死亡,警方通過查閱死者的電腦和手機黎泣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進店門恕刘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人抒倚,你說我怎么就攤上這事褐着。” “怎么了托呕?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵含蓉,是天一觀的道長频敛。 經(jīng)常有香客問我,道長馅扣,這世上最難降的妖魔是什么斟赚? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮差油,結(jié)果婚禮上拗军,老公的妹妹穿的比我還像新娘。我一直安慰自己蓄喇,他們只是感情好发侵,可當我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著妆偏,像睡著了一般刃鳄。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上钱骂,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天叔锐,我揣著相機與錄音,去河邊找鬼见秽。 笑死愉烙,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的张吉。 我是一名探鬼主播齿梁,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼催植,長吁一口氣:“原來是場噩夢啊……” “哼肮蛹!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起创南,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤伦忠,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后稿辙,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體昆码,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年邻储,在試婚紗的時候發(fā)現(xiàn)自己被綠了赋咽。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡吨娜,死狀恐怖脓匿,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情宦赠,我是刑警寧澤陪毡,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布米母,位于F島的核電站,受9級特大地震影響毡琉,放射性物質(zhì)發(fā)生泄漏铁瞒。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一桅滋、第九天 我趴在偏房一處隱蔽的房頂上張望慧耍。 院中可真熱鬧,春花似錦丐谋、人聲如沸蜂绎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽师枣。三九已至,卻和暖如春萧落,著一層夾襖步出監(jiān)牢的瞬間践美,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工找岖, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留陨倡,地道東北人。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓许布,卻偏偏與公主長得像兴革,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子蜜唾,可洞房花燭夜當晚...
    茶點故事閱讀 42,762評論 2 345

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