環信 3.x 簡單集成和升級第三方依賴庫

環信及時通訊云 3.x 以后,SDK 名字都不一樣了,囧。

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

自從上次集成環信以后,已經快一年多沒碰了。當時沒有 CocoaPods ,集成的時候,那是欲仙欲死。還好當時的客服大哥是個善解人意的棒小伙,幫忙解決了各種問題。

最近又打算撿起環信了。公司項目里用到環信,當然還是手動集成的方式,作為一個 CocoaPods 強迫癥患者,總想著改成 CocoaPods 集成。

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

因為沒有客制化 UI,所以 SDK 和 UI 都是用的環信提供的庫。

CocoaPods 集成環信 SDK 和 UI 庫

即時通訊云3.x文檔

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

集成 SDK

注意事項

  • HyphenateLite 支持 iOS 8.0 及以上的版本。關于支持版本,并沒有明說?。∵€是在 Podfile 里加 platform :ios, '7.0' 試出來的,雖然默認的規則是向上支持2個版本,但是總有些特殊情況,說多了都是淚。還要支持 IOS 7。
  • HyphenateLite 并沒有存放到 github 上。從 homepage 看,應該是做國際化了。

按需,在 Podfile 里,添加如下內容

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

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

運行工程沒有報錯即可。

集成 UI 庫

繼承 Lite 版 UI

//集成環信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 來當版本號使用了。

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

簡單集成,實現單聊

配置權限

設置 info.plist 允許 http 訪問。

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

添加訪問相冊權限 NSPhotoLibraryUsageDescription

<key>NSPhotoLibraryUsageDescription</key>
<string>環信要訪問你的相冊了</string>

預備信息

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

設置

創建一個 AppDelegate 的分類,用來初始化環信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,注冊遠程通知
    [[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 里調用初始化函數

- (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(@"登錄失敗");
                                        }
                                    }];
}

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

簡單集成后,來看看結果:

單聊

自此,環信單聊功能已經集成完了。相比之前手動集成,方便多了,CocoaPods 管理方便也不易出錯。按照官方文檔,一步步來就能很容易的上手。

Demo : UnofficalEaseMobUIDemo

升級第三方依賴庫

需要 fork 一份 easeui-ios-hyphenate-cocoapods 進行修改。這里是我已經改好的。

下面是安裝 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 不包含依賴,已經是當前最新版本不需要更改。MWPhotoBrowser 包含依賴,并依賴3個第三方庫。能夠發現它依賴的第三方庫已經不是最新的了。

我們首先查出當前庫的最新版本號是多少:

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

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

MWPhotoBrowser 這個作者已經很久不更新了,我們也沒辦法讓其更改依賴版本了。那怎么辦?沒有辦法,只能fork后,自己更新依賴庫。

MWPhotoBrowser 這個是我已經 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

然后創建 Example 工程 pod 集成,運行。

會在 [UIImage sd_animatedGIFNamed:emotion.emotionOriginal] 這里報錯,因為升級到 SDWebImage 4.0 后,沒有這個方法了。我找到了之前的環信版本 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
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容