环信 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

注意事项

按需,在 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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容