環(huán)信 3.x 簡單集成和升級第三方依賴庫

環(huán)信及時通訊云 3.x 以后双泪,SDK 名字都不一樣了,囧备韧。

3.x SDK 叫 Hyphenate 了。不清楚這個單詞是什么含義痪枫,Google 翻譯上說是“斷字”织堂。

自從上次集成環(huán)信以后,已經(jīng)快一年多沒碰了奶陈。當(dāng)時沒有 CocoaPods 易阳,集成的時候,那是欲仙欲死吃粒。還好當(dāng)時的客服大哥是個善解人意的棒小伙潦俺,幫忙解決了各種問題。

最近又打算撿起環(huán)信了。公司項目里用到環(huán)信黑竞,當(dāng)然還是手動集成的方式捕发,作為一個 CocoaPods 強迫癥患者,總想著改成 CocoaPods 集成很魂。

翻看了下扎酷,官方的集成文檔,變了好多遏匆。之后法挨,都是 "即時通訊云 3.x " (一定要帶上名字,沒準(zhǔn)哪天官方把名字又改了) 的集成問題幅聘。

因為沒有客制化 UI凡纳,所以 SDK 和 UI 都是用的環(huán)信提供的庫。

CocoaPods 集成環(huán)信 SDK 和 UI 庫

即時通訊云3.x文檔

隨意新建一個 iOS 工程帝蒿,該目錄下:pod init

集成 SDK

注意事項

  • HyphenateLite 支持 iOS 8.0 及以上的版本荐糜。關(guān)于支持版本,并沒有明說案鸪暴氏!還是在 Podfile 里加 platform :ios, '7.0' 試出來的,雖然默認(rèn)的規(guī)則是向上支持2個版本绣张,但是總有些特殊情況答渔,說多了都是淚。還要支持 IOS 7侥涵。
  • HyphenateLite 并沒有存放到 github 上沼撕。從 homepage 看,應(yīng)該是做國際化了芜飘。

按需务豺,在 Podfile 里,添加如下內(nèi)容

#Lite版本
pod 'HyphenateLite'
#Full版本 - 我沒有用到
#pod 'Hyphenate'

然而并不簡單燃箭,我這里只是用到 Lite 版本冲呢。然后 pod install

運行工程沒有報錯即可招狸。

集成 UI 庫

繼承 Lite 版 UI

//集成環(huán)信EaseUI
pod 'EaseUILite', :git =>'https://github.com/easemob/easeui-ios-hyphenate-cocoapods.git', :tag => '3.3.2'

你去 pod search 'HyphenateLite' 是搜索不到的,因為這個源就沒有推送到 CocoaPods Specs 里邻薯,它是單獨的存放到 github repo 里裙戏,通過 :git 來獲取的。因為是個人的 repo 厕诡,又沒法像之前那樣指定版本號累榜,所以就通過 tag 來當(dāng)版本號使用了。

安裝完后,運行工程沒有報錯即可壹罚。

簡單集成葛作,實現(xiàn)單聊

配置權(quán)限

設(shè)置 info.plist 允許 http 訪問。

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

添加訪問相冊權(quán)限 NSPhotoLibraryUsageDescription

<key>NSPhotoLibraryUsageDescription</key>
<string>環(huán)信要訪問你的相冊了</string>

預(yù)備信息

// APPKEY
#define APPKEY @"easemob-demo#chatdemoui"
// 推送證書隨便起的猖凛,bu
#define APNSNAME @"easemobuidemoAnpsName"
// 登錄用戶名 
8001
// 登錄密碼
111111

設(shè)置

創(chuàng)建一個 AppDelegate 的分類赂蠢,用來初始化環(huán)信SDK。

#import "AppDelegate.h"
interface AppDelegate (Hyphenate)
- (void)setupHyphenateWihtApplication:(UIApplication *)application options:(NSDictionary *)launchOptions;
end

#import "AppDelegate+Hyphenate.h"
#import "EaseUI.h"

#define APPKEY @"easemob-demo#chatdemoui"
#define APNSNAME @"easemobuidemoAnpsName"

implementation AppDelegate (Hyphenate)

- (void)setupHyphenateWihtApplication:(UIApplication *)application options:(NSDictionary *)launchOptions {
    // 初始化sdk
    EMOptions *options = [EMOptions optionsWithAppkey:APPKEY];
    options.apnsCertName = APNSNAME;
    [[EMClient sharedClient] initializeSDKWithOptions:options];
    // 注冊3.xSDK辨泳,注冊遠(yuǎn)程通知
    [[EaseSDKHelper shareHelper] hyphenateApplication:application
                        didFinishLaunchingWithOptions:launchOptions
                                               appkey:APPKEY
                                         apnsCertName:APNSNAME
                                          otherConfig:@{kSDKConfigEnableConsoleLogger:[NSNumber numberWithBool:YES]}];
    
}
// APP進入后臺
- (void)applicationDidEnterBackground:(UIApplication *)application
{
    [[EMClient sharedClient] applicationDidEnterBackground:application];
}

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

AppDelegate didFinishLaunchingWithOptions 里調(diào)用初始化函數(shù)

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    [self setupHyphenateWihtApplication:application options:launchOptions];       
   return YES;
}

ViewController.m 里

// 引入頭文件
#import "EaseUI.h"

// 登錄賬號
- (void)viewDidLoad {
    [super viewDidLoad];
    [[EMClient sharedClient] loginWithUsername:@"8001"
                                      password:@"111111"
                                    completion:^(NSString *aUsername, EMError *aError) {
                                        if (!aError) {
                                            NSLog(@"登錄成功");
                                        } else {
                                            NSLog(@"登錄失敗");
                                        }
                                    }];
}

// 點擊按鈕跳轉(zhuǎn)
- (IBAction)pushToEaseMessageViewController:(id)sender {
    //環(huán)信ID:@"8001"
    //聊天類型:EMConversationTypeChat
    EaseMessageViewController *chatController = [[EaseMessageViewController alloc] initWithConversationChatter:@"8001" conversationType:EMConversationTypeChat];
    [self.navigationController pushViewController:chatController animated:YES];
}

簡單集成后虱岂,來看看結(jié)果:

單聊

自此,環(huán)信單聊功能已經(jīng)集成完了菠红。相比之前手動集成第岖,方便多了,CocoaPods 管理方便也不易出錯试溯。按照官方文檔蔑滓,一步步來就能很容易的上手。

Demo : UnofficalEaseMobUIDemo

升級第三方依賴庫

需要 fork 一份 easeui-ios-hyphenate-cocoapods 進行修改遇绞。這里是我已經(jīng)改好的烫饼。

下面是安裝 EaseUILite 時的截圖:

install

安裝 EaseUILite (3.3.2)庫的時候,如上圖试读,需要這些依賴庫:

  • HyphenateLite (= 3.3.2)
  • MJRefresh (~>3.1.12)
  • MWPhotoBrowser (~> 2.1.1):
    • DACircularProgress (~> 2.3)
    • MBProgressHUD (~> 0.9)
    • SDWebImage (!= 3.7.2, ~> 3.7)

其中杠纵,HyphenateLite 和 MJRefresh 不包含依賴,已經(jīng)是當(dāng)前最新版本不需要更改钩骇。MWPhotoBrowser 包含依賴比藻,并依賴3個第三方庫。能夠發(fā)現(xiàn)它依賴的第三方庫已經(jīng)不是最新的了倘屹。

我們首先查出當(dāng)前庫的最新版本號是多少:

  • DACircularProgress:2.3.1
  • MBProgressHUD: 1.0.0
  • SDWebImage : 4.0.0

其中 SDWebImage 升的版本還是比較多的银亲。4.0的接口比3.7的借口還是更改了不少。

MWPhotoBrowser 這個作者已經(jīng)很久不更新了纽匙,我們也沒辦法讓其更改依賴版本了务蝠。那怎么辦?沒有辦法烛缔,只能fork后馏段,自己更新依賴庫。

MWPhotoBrowser 這個是我已經(jīng) fork 后践瓷,更新好依賴庫的 repo. 集成的時候院喜,需要在 Podfile 里指定我的私有Specs 源。

#指定源
source 'https://github.com/EvoIos/Specs.git'
source 'https://github.com/CocoaPods/Specs.git'

pod 'MWPhotoBrowser', '~> 2.1.2-0.1.1'

然后晕翠,修改 EaseUILite.podspec 喷舀。

主要修改該四處地方:

  • spec.version ,更改版本號。
  • spec.homepage硫麻,更改源主頁爸邢,因為我們是 fork 后修改的。所以這里要填入我們 fork 后的主頁
  • spec.source拿愧,更改源位置杠河,同上
  • spec.dependency,修改依賴赶掖。提升 MJRefresh 的依賴版本和更改 MWPhotoBrowser 的依賴

如下:

Pod::Spec.new do |spec|
  spec.name         = 'EaseUILite'
  spec.version      = '3.3.2-0.1.0'
  spec.license       = { :type => 'Copyright', :text => 'EaseMob Inc. 2017' }
  spec.summary      = 'EaseMob UI Kit'
  spec.homepage     = 'https://github.com/EvoIos/easeui-ios-hyphenate-cocoapods'
  spec.author       = {'EaseMob Inc.' => 'admin@easemob.com'}
  spec.source       =  {:git => 'https://github.com/EvoIos/easeui-ios-hyphenate-cocoapods.git', :tag => spec.version.to_s }
  spec.source_files = 'EaseUI/**/*.{h,m,mm}'
  spec.public_header_files = '**/*.{h}'
  spec.private_header_files = ['EaseUI/EMUIKit/3rdparty/DeviceHelper/VoiceConvert/amrwapper/wav.h','EaseUI/EMUIKit/3rdparty/DeviceHelper/VoiceConvert/amrwapper/amrFileCodec.h','EaseUI/EMUIKit/3rdparty/DeviceHelper/VoiceConvert/opencore-amrnb/*.h','EaseUI/EMUIKit/3rdparty/DeviceHelper/VoiceConvert/opencore-amrwb/*.h']
  spec.prefix_header_contents = '#import "UIImage+Resource.h"'
  spec.platform     = :ios, '7.0'
  spec.vendored_libraries = ['EaseUI/EMUIKit/3rdparty/DeviceHelper/VoiceConvert/opencore-amrnb/libopencore-amrnb.a','EaseUI/EMUIKit/3rdparty/DeviceHelper/VoiceConvert/opencore-amrwb/libopencore-amrwb.a']
  spec.requires_arc = true
  spec.frameworks = 'Foundation', 'UIKit'
  spec.libraries    = 'stdc++'
  spec.resource     = 'EaseUI/resources/EaseUIResource.bundle'
  spec.xcconfig     = {'OTHER_LDFLAGS' => '-ObjC', 'GCC_PREPROCESSOR_DEFINITIONS' => 'ENABLE_LITE=1'}
  spec.dependency 'MWPhotoBrowser', '~> 2.1.2-0.1.1'    
  spec.dependency 'MJRefresh', '~> 3.1.0'
  spec.dependency 'HyphenateLite', '= 3.3.2'
end

然后創(chuàng)建 Example 工程 pod 集成感猛,運行。

會在 [UIImage sd_animatedGIFNamed:emotion.emotionOriginal] 這里報錯奢赂,因為升級到 SDWebImage 4.0 后陪白,沒有這個方法了。我找到了之前的環(huán)信版本 UIImage+EMGIF 分類膳灶,修改咱士,然后拖拽進去。再次運行轧钓,可以了序厉。

驗證 podspec 是否通過,因為 MWPhotoBrowser 也被我們修改了毕箍,所以驗證的時候需要制定 sources弛房。

    pod spec lint EaseUILite.podspec  --sources=https://github.com/EvoIos/Specs.git,https://github.com/CocoaPods/Specs.git  

驗證成功之后,就可以在工程里集成了而柑。

source 'https://github.com/EvoIos/Specs.git'
source 'https://github.com/CocoaPods/Specs.git'

platform :ios, '8.0'

target 'UnofficalEaseMobUIDemo' do
  # Uncomment the next line if you're using Swift or would like to use dynamic frameworks
  # use_frameworks!
 pod 'HyphenateLite', '~> 3.3.2'
 pod 'EaseUILite', :git =>'git@github.com:EvoIos/easeui-ios-hyphenate-cocoapods.git', :tag => '3.3.2-0.1.0'

end

Demo :

git clone -b updateDependecyLibrary https://gitlab.com/zlanchun/UnofficalEaseMobUIDemo.git
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末文捶,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子媒咳,更是在濱河造成了極大的恐慌粹排,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件涩澡,死亡現(xiàn)場離奇詭異顽耳,居然都是意外死亡,警方通過查閱死者的電腦和手機妙同,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進店門射富,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人渐溶,你說我怎么就攤上這事辉浦。” “怎么了茎辐?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我拖陆,道長弛槐,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任依啰,我火速辦了婚禮乎串,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘速警。我一直安慰自己叹誉,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布闷旧。 她就那樣靜靜地躺著长豁,像睡著了一般荔睹。 火紅的嫁衣襯著肌膚如雪亿柑。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天脱柱,我揣著相機與錄音该园,去河邊找鬼酸舍。 笑死,一個胖子當(dāng)著我的面吹牛里初,可吹牛的內(nèi)容都是我干的啃勉。 我是一名探鬼主播,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼双妨,長吁一口氣:“原來是場噩夢啊……” “哼淮阐!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起斥难,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤枝嘶,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后哑诊,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體群扶,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年镀裤,在試婚紗的時候發(fā)現(xiàn)自己被綠了竞阐。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡暑劝,死狀恐怖骆莹,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情担猛,我是刑警寧澤幕垦,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布丢氢,位于F島的核電站,受9級特大地震影響先改,放射性物質(zhì)發(fā)生泄漏疚察。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一仇奶、第九天 我趴在偏房一處隱蔽的房頂上張望貌嫡。 院中可真熱鬧,春花似錦该溯、人聲如沸岛抄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽夫椭。三九已至,卻和暖如春论皆,著一層夾襖步出監(jiān)牢的瞬間益楼,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工点晴, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留感凤,地道東北人。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓粒督,卻偏偏與公主長得像陪竿,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子屠橄,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,722評論 2 345

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