第一次集成環(huán)信SDK應(yīng)該是在去年吧,那個(gè)時(shí)候還是2.0的版本焙蹭,沒想到后面做的幾個(gè)APP都用到了環(huán)信的及時(shí)聊天晒杈,用過2.0、3.0孔厉、3.1的拯钻,現(xiàn)在到了3.2的版本了。這篇博客水平并不是很深撰豺,只是作為剛接觸環(huán)信的小伙伴一個(gè)參考的文章而已粪般,讓你們少走點(diǎn)彎路,但是該跳的坑還是需要自己親自去跳污桦。
前言
1亩歹、本教程對(duì)應(yīng)環(huán)信即時(shí)聊天?iOS?SDK V3.2.0 (2016-10-15)
2、請(qǐng)自行注冊(cè)好環(huán)信APP_ID和APP_KEY
3凡橱、請(qǐng)自行下載好環(huán)信即時(shí)聊天SDK對(duì)應(yīng)的版本(iOS SDK V3.2.0)
一小作、集成環(huán)信SDK
1、導(dǎo)入SDK
下載SDK到本地稼钩,進(jìn)行解壓顾稀,包含以下幾個(gè)文件。
如果你的項(xiàng)目中需要用到語音電話和語音視頻請(qǐng)把HyphenateFullSDK拖入你的工程变抽;
如果你的項(xiàng)目中只不需要語音電話和語音視頻請(qǐng)把HyphenateSDK拖入你的工程础拨;
這個(gè)兩個(gè)只需要拖入一個(gè),區(qū)別就是一個(gè)包含語音電話绍载、視頻诡宗,一個(gè)不不含,其他的都是一樣的击儡。
2塔沃、添加對(duì)應(yīng)的依賴庫
(1) 在 Build Phases -> Link Binary With Libraries 添加以下依賴庫:
CoreMedia.framework
AudioToolbox.framework
AVFoundation.framework
MobileCoreServices.framework
ImageIO.framework
libc++.tbd
libz.tbd
libstdc++.6.0.9.tbd
libsqlite3.tbd
libiconv.tbd
如果你選擇的是不包含語音電話、視頻的SDK阳谍,最后一個(gè)依賴庫(libiconv.tbd)不需添加蛀柴。
(2) SDK 不支持 bitcode,向 Build Settings → Linking → Enable Bitcode 中設(shè)置 NO矫夯。
3鸽疾、登錄環(huán)信
在AppDelegate.m 中添加歡喜初始化和登錄的代碼,如果編譯成功,則說明你導(dǎo)入SDK成功了膏萧。
#define EaseMob_Appkey? ? @"1101#testnickname"? //環(huán)信AppKey#import "AppDelegate.h"#import "EMSDK.h"@interface AppDelegate ()@end@implementation AppDelegate- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {? ? //AppKey:注冊(cè)的AppKey,詳細(xì)見下面注釋勇蝙。? ? //apnsCertName:推送證書名(不需要加后綴)豺鼻,詳細(xì)見下面注釋综液。? ? EMOptions *options =[EMOptions optionsWithAppkey:EaseMob_Appkey];? ? options.apnsCertName = @"";[[EMClient sharedClient] initializeSDKWithOptions:options];? ? EMError *error =[[EMClient sharedClient] loginWithUsername:@"yuancan001" password:@"123456"];? ? if (!error) {? ? ? ? NSLog(@"登錄成功");? ? }? ? return YES;}
提醒:記得在plist文件中設(shè)置https請(qǐng)求喔
4、添加EaseUI文件 要想實(shí)現(xiàn)環(huán)信的及時(shí)聊天儒飒,只加入SDK是不夠的谬莹,還需要添加其他的一些相關(guān)的文件∽耍回到我們之前下載環(huán)信SDK的文件中附帽,有一個(gè)EaseUI的文件,把這個(gè)文件加入你的工程中圣猎。
這個(gè)文件夾中包含了一些與聊天相關(guān)的類士葫,比如說聊天的界面、聊天的鍵盤等送悔,總之是為了幫助開發(fā)者快速實(shí)現(xiàn)聊天功能慢显。 編譯一下,結(jié)果編譯失敗欠啤,因?yàn)檫€需要做一步操作荚藻,添加pch文件的路徑。
EaseUI目錄下有一個(gè)pch文件洁段,你把它的路徑添加到Prefix Header中应狱。怎么添加呢?最簡單的辦法祠丝,就是先選擇EaseUI-Prefix.pch文件疾呻,然后按住它,把它拖過去写半。不過這個(gè)要看人品岸蜗,人品好一次就可以拖成功,如果沒有拖成功叠蝇,就多試幾次璃岳。要是人品太差,就只能手動(dòng)添加了
$(SRCROOT)/EaseMob3.2/EaseMob/EaseUI/EaseUI-Prefix.pch
$(SRCROOT):這是一個(gè)宏悔捶,代表你這個(gè)項(xiàng)目文件的相對(duì)路徑铃慷;
EaseMob3.2:這個(gè)是我的工程名,需要替換成你自己的工程名蜕该;
EaseMob/EaseUI/EaseUI-Prefix.pch:這個(gè)是pch文件在工程中的相對(duì)路徑犁柜,需要替換成你自己對(duì)應(yīng)的.
再編譯一下,就可以成功了堂淡。
二馋缅、實(shí)現(xiàn)單聊
集成環(huán)信SDK坛怪,我們已經(jīng)完成了第一步工作,接著我們來實(shí)現(xiàn)一下聊天的功能股囊。
1、添加與聊天相關(guān)的文件
環(huán)信官方提供的Demo中集成了所有的功能更啄,對(duì)于開發(fā)者來說既是一件好事也是一件壞事稚疹。之所以說是好事是因?yàn)樗泄δ芏加校哉f壞事是因?yàn)楣δ芴嗉牢瘢茧s糅在一起内狗,對(duì)于新手來說卻是感覺無從下手。下面义锥,就隨我一起慢慢來深入了解環(huán)信柳沙。
實(shí)現(xiàn)單聊還需要添加一些文件,這些文件我們可以從官方的Demo中拷貝過來拌倍。我們需要添加的文件叫做 Chat赂鲤,Chat目錄下包含兩個(gè)文件夾。ChatList里面的東西是與回話列表相關(guān)的柱恤,ChatView里面的東西是與聊天界面相關(guān)的 数初, 把Chat整個(gè)文件夾都拖入工程中。編譯之后梗顺,你會(huì)發(fā)現(xiàn)會(huì)出現(xiàn)很多報(bào)錯(cuò)的泡孩,不要懷疑你自己,這是正常的寺谤。因?yàn)檫@些文件是從環(huán)信官方Demo中拷貝過來仑鸥,里面用了很多其他的文件,但是我們不需要那些文件变屁,沒有添加到我們的工程中眼俊,所以會(huì)報(bào)錯(cuò)。其實(shí)敞贡,這幾個(gè)步驟很關(guān)鍵泵琳,但是官方文檔卻沒有說明,估計(jì)把新手坑死了誊役,幸虧有小編來拯救你們获列,哈哈。這里好心的小編提供一個(gè)已經(jīng)處理好的下載Chat文件蛔垢,下載可以直接使用击孩。不然,你就需要自己手動(dòng)去注釋一些報(bào)錯(cuò)的地方鹏漆,知道編譯成功巩梢。
2创泄、修改pch文件
在我們之前用的那個(gè)EaseUI-Prefix.pch中添加一些頭文件:
#ifdef __OBJC__
#import
#import
//#import "ChatDemoUIDefine.h"
//#import "EMAlertView.h"
//#import "TTGlobalUICommon.h"
#import "EMSDKFull.h"
#import "EaseUI.h"
#endif
3、測試單聊
(1) 在AppDelegate.m 中創(chuàng)建一個(gè)UINavigationController :
#define EaseMob_Appkey? ? @"1101#testnickname"? //環(huán)信AppKey#import "AppDelegate.h"#import "EMSDK.h"#import "ViewController.h"@interface AppDelegate ()@end@implementation AppDelegate- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {? ? //AppKey:注冊(cè)的AppKey括蝠,詳細(xì)見下面注釋鞠抑。? ? //apnsCertName:推送證書名(不需要加后綴),詳細(xì)見下面注釋忌警。? ? EMOptions *options =[EMOptions optionsWithAppkey:EaseMob_Appkey];? ? options.apnsCertName = @"";[[EMClient sharedClient] initializeSDKWithOptions:options];? ? EMError *error =[[EMClient sharedClient] loginWithUsername:@"yuancan001" password:@"123456"];? ? if (!error) {? ? ? ? NSLog(@"登錄成功");? ? }? ? ViewController *vc =[[ViewController alloc] init];? ? UINavigationController *navigation =[[UINavigationController alloc] initWithRootViewController:vc];? ? self.window.rootViewController = navigation;? ? self.window.backgroundColor =[UIColor whiteColor];? ? return YES;}
OK搁拙,完了,到點(diǎn)了吃中飯去了法绵。