iOS 集成環(huán)信(會話列表,聊天搭儒,昵稱頭像設置)

一穷当、環(huán)信SDK的集
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 文件里,你導的頭文件 不是包在 #ifdef OBJC #endif 里面
到此孤钦,如果你是嚴格按照官方文檔的步驟一步不落的集成的話歧斟,應該是不會有什么問題的纯丸,是可以正常編譯運行的。

二静袖、賬號的登錄

1.看你們項目的要求觉鼻,筆者是在自己app登錄的時候,也把環(huán)信賬號登錄(登錄的用戶名和密碼規(guī)則看你們后臺是怎么配置的)队橙。環(huán)信SDK是有自動登錄的功能的坠陈,所以盡管用戶殺死app后,再次啟動app時捐康,不需要再次進入登錄界面再次登錄仇矾。

 BOOL isAutoLogin = [EMClient sharedClient].options.isAutoLogin;
    if (!isAutoLogin) {
        EMError *error = [[EMClient sharedClient] loginWithUsername:HPString(@"%@",[InfoManage getEMLoginname]) password:HPString(@"%@",[InfoManage getEMPwd])];
        if (!error) {
            Dlog(@"環(huán)信登錄成功");
            [[EMClient sharedClient] setApnsNickname:[InfoManage getNickname]];
            
            EMPushOptions *emoptions = [[EMClient sharedClient] pushOptions];
            //設置有消息過來時的顯示方式:1.顯示收到一條消息 2.顯示具體消息內(nèi)容.
            //自己可以測試下
            emoptions.displayStyle = EMPushDisplayStyleSimpleBanner;
            [[EMClient sharedClient] updatePushOptionsToServer];
            
            [[EMClient sharedClient].chatManager addDelegate:self delegateQueue:nil];
            [[EMClient sharedClient].groupManager addDelegate:self delegateQueue:nil];

            
            [self getUnreadMessage];
        } else {
            Dlog(@"【環(huán)信錯誤】%d == %@",error.code,error.errorDescription);
        }
    } else {
        Dlog(@"已自動登錄");
    }

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

三、會話列表

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

2.會話列表實時顯示未讀消息。也就是說在會話列表界面的時候溺蕉,有人發(fā)消息過來了伶丐,發(fā)消息來的那個人的頭像要有一個紅色的數(shù)字,并顯示未讀消息數(shù)量疯特,想要這個功能的話哗魂,就要遵守EMChatManagerDelegate 協(xié)議,并設置代理 [[EMClientsharedClient].chatManageraddDelegate:selfdelegateQueue:nil]; 漓雅,這個時候如果有消息來了录别,就會走消息的回調(diào)方法,在方法里面刷新界面即可邻吞。 下面的 refreshAndSortView 方法是刷新內(nèi)存中的消息

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    Dlog(@"%@",self.dataArray);
    [self.navigationController.navigationBar setBarTintColor:HB_ThemeColor];

    [self tableViewDidTriggerHeaderRefresh];
    
    self.showRefreshHeader = YES;
}

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里面 拷貝以下文件:

1.png

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

2.png

4.會話列表點擊事件:

3.png

四、聊天功能

1.新建一個控制器,繼承 EaseMessageViewController 赵讯,遵守EaseMessageViewControllerDelegate盈咳、EaseMessageViewControllerDataSource協(xié)議,設置delegate和dataSource 即可

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

4.png

當然组底,你也可以自己添加按鈕并設置圖片丈积。甚至可以去掉環(huán)信自帶的更多菜單,添加自己自定義的债鸡。相信大多數(shù)人還是不要自定義的桶癣,這里就不把添加按鈕和設置自定義更多菜單的方法贅述了,需要的可以去官方文檔查看娘锁,那里有詳細的講解牙寞。

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

5.png

到此莫秆,即時通訊的 會話列表和聊天功能就已經(jīng)實現(xiàn)了间雀,就是一些UI 細節(jié)的調(diào)整了,比如镊屎,頭像設置成自己的用戶體系的頭像惹挟,昵稱設置成自己用戶體系的昵稱,下面我們來講講怎么實現(xiàn)頭像和昵稱的設置

五缝驳、昵稱和頭像的設置

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

2.先找到發(fā)消息的方法夏伊,在發(fā)消息方法里面加擴展消息就可以不需要每次都去調(diào)他的發(fā)消息方法把擴展消息附帶出去摇展。所以,在環(huán)信的 EaseMessageViewController 里面的_sendMessage:方法里將發(fā)消息者的昵稱和頭像附帶在擴展消息里面溺忧。 順便提一下:不管是發(fā)送文本消息還是圖片消息咏连,語音消息都是會走該方法的。所以在登錄的時候應該調(diào)你們項目中獲取個人信息的接口鲁森,將昵稱和頭像存儲起來祟滴,并且在跟換頭像和昵稱地方跟新存儲的昵稱和頭像。

6.png

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

7.png

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

修改1.png
修改2.png
修改3.png

到此冠蒋,昵稱和頭像我們就已經(jīng)可以設置完成了。
當然數(shù)據(jù)庫就自己建立就好了,這里就不做講解

六乾胶、自定義聊天Cell

1.新建UITableViewCell文件抖剿,繼承 EaseBaseMessageCell 。為了方便閱讀者閱讀無障礙识窿,筆者就將自定義cell的所有代碼 以截圖的形式講解斩郎。

2.設置緩存cell的標識符,并添加子控件喻频。

添加子控件 ![Uploading 設置緩存cell的標識符_516068.png . . .].png
設置緩存cell的標識符.png

3.設置氣泡和頭像

設置氣泡背景和頭像.png

4.添加子控件

添加子控件.png
添加自定義控件的約束.png

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

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

6.跟新氣泡約束缩宜,設置氣泡的frame

跟新氣泡約束,設置氣泡frame.png

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

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

添加自定義的cell.png

8.設置cell的高度

設置cell的高度.png

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市狰挡,隨后出現(xiàn)的幾起案子捂龄,更是在濱河造成了極大的恐慌,老刑警劉巖加叁,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件倦沧,死亡現(xiàn)場離奇詭異,居然都是意外死亡它匕,警方通過查閱死者的電腦和手機刀脏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來超凳,“玉大人愈污,你說我怎么就攤上這事÷职” “怎么了暂雹?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長创夜。 經(jīng)常有香客問我杭跪,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任涧尿,我火速辦了婚禮系奉,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘姑廉。我一直安慰自己缺亮,他們只是感情好,可當我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布桥言。 她就那樣靜靜地躺著萌踱,像睡著了一般。 火紅的嫁衣襯著肌膚如雪号阿。 梳的紋絲不亂的頭發(fā)上并鸵,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天,我揣著相機與錄音扔涧,去河邊找鬼园担。 笑死,一個胖子當著我的面吹牛枯夜,可吹牛的內(nèi)容都是我干的粉铐。 我是一名探鬼主播,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼卤档,長吁一口氣:“原來是場噩夢啊……” “哼蝙泼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起劝枣,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤汤踏,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后舔腾,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體溪胶,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年稳诚,在試婚紗的時候發(fā)現(xiàn)自己被綠了哗脖。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡扳还,死狀恐怖才避,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情氨距,我是刑警寧澤桑逝,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站俏让,受9級特大地震影響楞遏,放射性物質(zhì)發(fā)生泄漏茬暇。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一寡喝、第九天 我趴在偏房一處隱蔽的房頂上張望糙俗。 院中可真熱鬧,春花似錦预鬓、人聲如沸巧骚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至巨税,卻和暖如春蟋定,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背草添。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工驶兜, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人远寸。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓抄淑,卻偏偏與公主長得像,于是被迫代替她去往敵國和親驰后。 傳聞我的和親對象是個殘疾皇子肆资,可洞房花燭夜當晚...
    茶點故事閱讀 44,979評論 2 355

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