環(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 庫
隨意新建一個 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 管理方便也不易出錯试溯。按照官方文檔蔑滓,一步步來就能很容易的上手。
升級第三方依賴庫
需要 fork 一份 easeui-ios-hyphenate-cocoapods 進行修改遇绞。這里是我已經(jīng)改好的烫饼。
下面是安裝 EaseUILite 時的截圖:
安裝 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