2017最新環(huán)信3.2.3集成

先上圖


首頁(yè)圖.png

申請(qǐng)帳號(hào)準(zhǔn)備工作

1.首先在集成環(huán)信的時(shí)候先去查看下環(huán)信官方文檔茁帽,這里要說(shuō)的是因?yàn)榄h(huán)信版本變更,官方文檔的很多東西無(wú)法使用,我們只是需要先了解一下旁壮。

2.然后申請(qǐng)環(huán)信賬號(hào)监嗜,下載對(duì)應(yīng)的sdk文件

3.記得創(chuàng)建推送證書和記錄appkey,這里安裝官方文檔就可以

集成SDK

1.首先要說(shuō)明的是官方給了倆個(gè)版本的SDK

a.不包含實(shí)時(shí)語(yǔ)音版本 SDK(HyphenateLite)抡谐,引用時(shí)#import<HyphenateLite/HyphenateLite.h>

b.包含實(shí)時(shí)語(yǔ)音版本 SDK(Hyphenate)裁奇,引用時(shí) #import<Hyphenate/Hyphenate.h>

這里要說(shuō)的是,因?yàn)榄h(huán)信的demo是基于包含實(shí)時(shí)語(yǔ)音進(jìn)行創(chuàng)建的麦撵,如果選擇不包含的刽肠,在下一步拖入SDK的時(shí)候很多地方需要修改注釋,為了避免這一步免胃,我們選中第二個(gè)音五,因?yàn)楹芏鄷r(shí)候需要修改源碼,所以我們選擇本地拷貝的方式

2.現(xiàn)在打開(kāi)下載好的環(huán)信demo羔沙,將對(duì)應(yīng)的倆個(gè)文件夾添加進(jìn)來(lái)

環(huán)信1.png

這倆個(gè)文件,一個(gè)是環(huán)信自身的邏輯處理扼雏,一個(gè)是環(huán)信已經(jīng)寫好的一些UI界面诞挨,聊天,添加好友那些
a.然后按照官方文檔進(jìn)行添加依賴庫(kù)

SDK 包含實(shí)時(shí)語(yǔ)音依賴庫(kù)有:

CoreMedia.framework

AudioToolbox.framework

AVFoundation.framework

MobileCoreServices.framework

ImageIO.framework

libc++.dylib

libz.dylib

libstdc++.6.0.9.dylib

libsqlite3.dylib

libiconv.dylib

(如果使用的是 xcode7呢蛤,后綴為 tbd惶傻。)

b.SDK 不支持 bitcode,向 Build Settings → Linking → Enable Bitcode 中設(shè)置 NO其障。

3.這里就可以進(jìn)行編譯了银室,以下是我編譯的時(shí)候出現(xiàn)的問(wèn)題

a.找不到uikt 的方法,這點(diǎn)是添加EaseUI是沒(méi)有將對(duì)應(yīng)的.pch文件路徑放對(duì)励翼,一般來(lái)說(shuō)蜈敢,我們項(xiàng)目本身已經(jīng)有.pch文件了,只需要?jiǎng)h除它汽抚,然后在項(xiàng)目文件的.pch文件中添加就好了


環(huán)信3.png

注意抓狭,OBJC千萬(wàn)不要忘。

b.如果項(xiàng)目中已經(jīng)用到了MBProgressHUD和MJRefresh造烁,在編譯的過(guò)程中需要會(huì)進(jìn)行重復(fù)導(dǎo)入報(bào)錯(cuò)否过,將EaseUI文件中的三方庫(kù)刪除掉就好

c.還有一種報(bào)錯(cuò),這點(diǎn)我不知道因?yàn)槭裁床洋赡苁荕WPhotoBrowser 的一些方法與SDWebImage沖突了苗桂,我將報(bào)錯(cuò)的地方注釋掉就好了


環(huán)信4.png

d 這個(gè)錯(cuò)誤官方上沒(méi)有提,但是他給了一個(gè)圖片告组,需要我們自己添加庫(kù)


環(huán)信5.png

在Build Phases 添加


環(huán)信6.png

e 做完這些應(yīng)該可以編譯成功了煤伟,但是官方文檔給了一個(gè)需要修改的地方是關(guān)于app上架的,我這里就抄來(lái)了
集成動(dòng)態(tài)庫(kù)上傳AppStore

由于 iOS 編譯的特殊性,為了方便開(kāi)發(fā)者使用便锨,我們將 i386 x86_64 armv7 arm64 幾個(gè)平臺(tái)都合并到了一起围辙,所以使用動(dòng)態(tài)庫(kù)上傳appstore時(shí)需要將i386 x86_64兩個(gè)平臺(tái)刪除后,才能正常提交審核
在SDK當(dāng)前路徑下執(zhí)行以下命令刪除i386 x86_64兩個(gè)平臺(tái)
實(shí)時(shí)音視頻版本Hyphenate.framework

lipo Hyphenate.framework/Hyphenate -thin armv7 -output Hyphenate_armv7
lipo Hyphenate.framework/Hyphenate -thin arm64 -output Hyphenate_arm64
lipo -create Hyphenate_armv7 Hyphenate_arm64 -output Hyphenate
mv Hyphenate Hyphenate.framework/
不包含實(shí)時(shí)音視頻版本HyphenateLite.framework

lipo HyphenateLite.framework/HyphenateLite -thin armv7 -output HyphenateLite_armv7
lipo HyphenateLite.framework/HyphenateLite -thin arm64 -output HyphenateLite_arm64
lipo -create HyphenateLite_armv7 HyphenateLite_arm64 -output HyphenateLite
mv HyphenateLite HyphenateLite.framework/

現(xiàn)在就是要開(kāi)始代碼方面

先看環(huán)信的demo

1.首先你要明白EaseUI 中已經(jīng)將很大部分的功能全部實(shí)現(xiàn)了放案,沒(méi)有必要在去自己建立UI和控制器酌畜,保存的數(shù)據(jù)也用環(huán)信提供的model,我們要做的是,根據(jù)demo中的邏輯關(guān)系蔓肯,將環(huán)信的初始化寫到我們項(xiàng)目文件中螟够,然后進(jìn)行修改UI蔓彩。主要是環(huán)信AppDelegate 中的方法,以及擴(kuò)展類中的那些注冊(cè)通知和初始化控制器考婴。因?yàn)槲覍?duì)于擴(kuò)展類方面不是很厲害,于是我就將我能夠使用的方法全部在AppDelegate 和對(duì)應(yīng)的根控制器中實(shí)現(xiàn)了
   // 注冊(cè)環(huán)信SDK以及推送證書
   
   [[EaseSDKHelper shareHelper] hyphenateApplication:application
                       didFinishLaunchingWithOptions:launchOptions
                                              appkey:HuanXingAppKey
                                        apnsCertName:HuanXingPush
                                         otherConfig:@{kSDKConfigEnableConsoleLogger:[NSNumber numberWithBool:YES],@"easeSandBox":@NO}];
   
   [EaseSDKHelper shareHelper];// 初始化環(huán)信相關(guān)回調(diào)

   [self easemobApplication:application didReceiveRemoteNotification:launchOptions];
   EMError *error =[[EMClient sharedClient]initializeSDKWithOptions:[EMOptions optionsWithAppkey:HuanXingAppKey]];
   if (!error) {
      NSLog(@"初始化成功");
   }

// APP進(jìn)入后臺(tái)
- (void)applicationDidEnterBackground:(UIApplication *)application
{
    [[EMClient sharedClient] applicationDidEnterBackground:application];
}

// APP將要從后臺(tái)返回
- (void)applicationWillEnterForeground:(UIApplication *)application
{
    [[EMClient sharedClient] applicationWillEnterForeground:application];
}

然后就是按照官方demo中的登錄繼續(xù)在我的登錄界面寫功能

-(void)setHuanxing{
   
   
   //只有開(kāi)放注冊(cè)時(shí)催烘,才可以客戶端注冊(cè)沥阱。開(kāi)放注冊(cè)是為了測(cè)試使用,正式環(huán)境中不推薦使用該方式注冊(cè)環(huán)信賬號(hào)伊群。
   // 授權(quán)注冊(cè)的流程應(yīng)該是您服務(wù)器通過(guò)環(huán)信提供的 REST API 注冊(cè)考杉,之后保存到您的服務(wù)器或返回給客戶端。
#pragma  正式版需要注意的是在用戶登錄之后要在后臺(tái)根據(jù)他的手機(jī)號(hào)進(jìn)行注冊(cè)舰始,然后將注冊(cè)成功的姓名和密碼告訴前端崇棠,前端進(jìn)行環(huán)信登錄
   //   error = [[EMClient sharedClient] registerWithUsername:@"15824326170" password:@"123456"];
   //   if (error==nil) {
   //      NSLog(@"注冊(cè)成功");
   //   }
   //然后進(jìn)行環(huán)信登錄
   
   EMError *error1 = [[EMClient sharedClient] loginWithUsername:@"123123123" password:@"123456"];
   if (!error1) {
       NSLog(@"登錄成功");
       [[ApplyViewController shareController] loadDataSourceFromLocalDB];
   }
   
   //自動(dòng)登錄需要在有接口的時(shí)候進(jìn)行調(diào)試
   EMError*error2 = [[EMClient sharedClient] loginWithUsername:@"123123123" password:@"123456"];
   if (!error2)
   {
       [[EMClient sharedClient].options setIsAutoLogin:YES];
       NSLog(@"登陸成功2");
   }
   //這是退出登錄的時(shí)候,需要跟用戶退出的時(shí)候進(jìn)行同步
   /*
    EMError *error = [[EMClient sharedClient] logout:YES];
    if (!error) {
    NSLog(@"退出成功");
    }
    */
   [self loginWithUsername:@"123123123" password:@"123456"];
   
   
}
//登陸后的操作異步登錄
- (void)loginWithUsername:(NSString *)username password:(NSString *)password{
   
   //異步登陸賬號(hào)
   __weak typeof(self) weakself = self;
   dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
       EMError *error = [[EMClient sharedClient] loginWithUsername:username password:password];
       dispatch_async(dispatch_get_main_queue(), ^{
           [weakself hideHud];
           if (!error) {
               //設(shè)置是否自動(dòng)登錄
               [[EMClient sharedClient].options setIsAutoLogin:YES];
               
               //獲取數(shù)據(jù)庫(kù)中數(shù)據(jù)
               [MBProgressHUD showHUDAddedTo:weakself.view animated:YES];
               dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
                   /** 數(shù)據(jù)庫(kù)操作*/
                   [[EMClient sharedClient] migrateDatabaseToLatestSDK];
                   dispatch_async(dispatch_get_main_queue(), ^{
                       /** 獲取用戶所有群組*/
                       [[ChatDemoHelper shareHelper] asyncGroupFromServer];
                       /** 獲取所有會(huì)話,如果內(nèi)存中不存在會(huì)從DB中加載*/
                       [[ApplyViewController shareController] loadDataSourceFromLocalDB];
                       [[ChatDemoHelper shareHelper] asyncConversationFromDB];
                       //從服務(wù)器獲取推送屬性
                       [[ChatDemoHelper shareHelper] asyncPushOptions];
                       //                        [MBProgressHUD hideAllHUDsForView:weakself.view animated:YES];
                       //發(fā)送自動(dòng)登陸狀態(tài)通知
                       [[NSNotificationCenter defaultCenter] postNotificationName:KNOTIFICATION_LOGINCHANGE object:@([[EMClient sharedClient] isLoggedIn])];
                       
                       //保存最近一次登錄用戶名
                       [weakself saveLastLoginUsername];
                   });
               });
               
           }
       });
   });
}
#pragma  mark - private
- (void)saveLastLoginUsername
{
   NSString *username = [[EMClient sharedClient] currentUsername];
   if (username && username.length > 0) {
       NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
       [ud setObject:username forKey:[NSString stringWithFormat:@"em_lastLogin_username"]];
       [ud synchronize];
   }
}

這里需要說(shuō)一句的是 [[ApplyViewController shareController] loadDataSourceFromLocalDB];這個(gè)方法就是我自己從擴(kuò)展類中添加到這里的丸卷,這個(gè)方法是獲取好友申請(qǐng)列表數(shù)量枕稀,如果沒(méi)有這個(gè)方法,好友數(shù)量在開(kāi)始進(jìn)入app 是顯示為0的谜嫉。

2.然后我們可以觀察官方demo
環(huán)信7.png

a.ChatDemoHelper 這個(gè)類是主要的萎坷,我們必須要看懂這個(gè)類以及里面的方法,我自己標(biāo)記了一下各個(gè)控制對(duì)應(yīng)的頁(yè)面沐兰,然后看這個(gè)單利里面的方法哆档, 它將環(huán)信用到的通知以及回調(diào)方法全部寫好了,自己可以根據(jù)demo多跳轉(zhuǎn)跳轉(zhuǎn)看看
我們需要注意的地方就是 MainViewController 這個(gè)控制器住闯,很多項(xiàng)目已經(jīng)存在根控制器瓜浸,所以需要將它里面的方法放到項(xiàng)目的根控制器中,然后就是所有對(duì)應(yīng)的聊天界面 會(huì)話界面的控制器也會(huì)發(fā)生改變比原,我們只需要改成我們對(duì)應(yīng)的就行斟叼。
這個(gè)時(shí)候可能會(huì)報(bào)錯(cuò),原因是少了一些類以及框架春寿,我這里將紅包和實(shí)時(shí)語(yǔ)音注釋掉后朗涩,又自已一個(gè)一個(gè)進(jìn)行的添加,這得慢慢來(lái)绑改。


環(huán)信9.png

b 這里要說(shuō)的一點(diǎn)就是可以自己寫一個(gè)控制器繼承環(huán)信對(duì)應(yīng)的會(huì)話列表控制器谢床,當(dāng)然也可以用它的兄一,然后進(jìn)行修改就行,這也是需要時(shí)間和細(xì)心识腿,因?yàn)樵谇懊孢M(jìn)行的時(shí)候很可能會(huì)出現(xiàn)一些代碼功能不實(shí)現(xiàn)的狀況出革。


環(huán)信8.png

c .在做這些的時(shí)候,你應(yīng)該會(huì)看到環(huán)信對(duì)應(yīng)的修改頭像和昵稱的方法渡讼,以及修改默認(rèn)頭像的地方骂束,有的默認(rèn)頭像是在EaseUI對(duì)應(yīng)的文件中,需要打開(kāi)進(jìn)行修改成箫,或者你自己定義的一些功能圖片


環(huán)信10.png

d 然后就是修改昵稱和頭像的問(wèn)題展箱,這個(gè)需要在我們后臺(tái)保存好后進(jìn)行存在model里面,個(gè)人還沒(méi)有做蹬昌,但是環(huán)信的model里面已經(jīng)寫了混驰,我覺(jué)得只要我們寫到對(duì)應(yīng)的model里面就可以了
環(huán)信11.png
環(huán)信12.png

存到這個(gè)model 里面就行 我覺(jué)得 UserProfileManager,等我最后優(yōu)化

3.這里還有一個(gè)問(wèn)題就是環(huán)信進(jìn)行了國(guó)際化皂贩,等我寫一個(gè)國(guó)際化的文章哈

我是iOS 小白栖榨,這些都是自己慢慢弄出來(lái)的,很多地方自己也不是很懂明刷,希望大牛指導(dǎo)婴栽,真的希望大牛帶我,馬上混不下去了......

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末辈末,一起剝皮案震驚了整個(gè)濱河市居夹,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌本冲,老刑警劉巖准脂,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異檬洞,居然都是意外死亡狸膏,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門添怔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)湾戳,“玉大人,你說(shuō)我怎么就攤上這事广料±裕” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵艾杏,是天一觀的道長(zhǎng)韧衣。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么畅铭? 我笑而不...
    開(kāi)封第一講書人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任氏淑,我火速辦了婚禮,結(jié)果婚禮上硕噩,老公的妹妹穿的比我還像新娘假残。我一直安慰自己,他們只是感情好炉擅,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布辉懒。 她就那樣靜靜地躺著,像睡著了一般谍失。 火紅的嫁衣襯著肌膚如雪眶俩。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 49,031評(píng)論 1 285
  • 那天袱贮,我揣著相機(jī)與錄音,去河邊找鬼体啰。 笑死攒巍,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的荒勇。 我是一名探鬼主播柒莉,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼沽翔!你這毒婦竟也來(lái)了兢孝?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤仅偎,失蹤者是張志新(化名)和其女友劉穎跨蟹,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體橘沥,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡窗轩,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了座咆。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片痢艺。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖介陶,靈堂內(nèi)的尸體忽然破棺而出堤舒,到底是詐尸還是另有隱情,我是刑警寧澤哺呜,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布舌缤,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏友驮。R本人自食惡果不足惜漂羊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望卸留。 院中可真熱鬧走越,春花似錦、人聲如沸耻瑟。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)喳整。三九已至谆构,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間框都,已是汗流浹背搬素。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留魏保,地道東北人熬尺。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像谓罗,于是被迫代替她去往敵國(guó)和親粱哼。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

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

  • 版權(quán)聲明:本文為博主原創(chuàng)文章檩咱,未經(jīng)博主允許不得轉(zhuǎn)載揭措。 前言 公司最近要求做即時(shí)通訊, 直接用了三方環(huán)信了,今天和大...
    Heaven7th閱讀 9,607評(píng)論 24 30
  • 第一次集成環(huán)信SDK應(yīng)該是在去年吧,那個(gè)時(shí)候還是2.0的版本刻蚯,沒(méi)想到后面做的幾個(gè)APP都用到了環(huán)信的及時(shí)聊天绊含,用過(guò)...
    imGeek閱讀 1,607評(píng)論 4 16
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,504評(píng)論 25 707
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)、插件炊汹、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,024評(píng)論 4 62
  • 也許是人在南方艺挪,天生親水,所以小時(shí)候最喜歡的活動(dòng)就是抓小魚小蝦兵扬。 第一個(gè)方法很傳統(tǒng)麻裳,釣。 那個(gè)時(shí)候大人不讓動(dòng)鋤頭器钟,...
    妖瑤杳閱讀 460評(píng)論 1 1