IOS快速集成环信IM - 基于官方的Demo优化,5分钟集成环信IM功能

领导说一天内要集成IM功能,我顿时被吓尿了~~

说明

本项目是基于官方 ChatDemo-UI3.0 (官方Demo源码下载)项目的简化封装,目的是为了让大家更加方便快速地集成环信IM功能。

Git地址:http://git.oschina.net/markies/ChatDemo-UI3.00-Simple​(本项目会保持与环信的SDK同步更新)

奋斗目标

分离第三方依赖库,避免与开发者现有项目的其它类库发生冲突;

抽象开发者可定制化的方法或配置参数;

其它未确定的封装工作,最终目的:高内聚,低耦合;

整理开发者开始集成时反馈的常见性问题,从实际项目考虑优化SDK集成的简易度。

最终成果

1.便于开发者在新项目或现有项目快速集成环信SDK,实现聊天界面和会话列表功能,而且可以灵活地定制化一些基础模块;

2.低耦合,用尽可能少的代码集成环信功能,尽量少污染开发者的项目代码;

如有任何问题,请联系QQ: 364223587

注意: 由于Git不支持上传大于100MB的文件,所以项目源码中不包含 libHyphenateFullSDK.a 文件,需要自行去官网下载http://www.easemob.com/download/im,然后拷贝到目录【/ChatDemo-UI3.0-Sample/ChatDemo-UI3.0/ChatSDK/HyphenateFullSDK/lib】才能正常运行。

本文的简版Demo完整源码可到360网盘下载https://yunpan.cn/cRJKsbAA4qvXt(提取码:2a35)

单独的 libHyphenateFullSDK.a下载地址https://yunpan.cn/cRqx72ByhXRQG(提取码:b553)

经过对ChatUIDemo-UI3.0中的源码进行分析可知,用户初次集成EaseUI时,会遇到如下几个常见问题:

问题1

引用Parse.framework、Bolts.framework时项目容易出错或出现Not found问题,其实这两个库并不是必须的,而且Facebook已经确定在2017年1月份停止提供Parse服务。

解决方案:删除Parse相关类,用 UserCacheManager替代管理用户缓存。

问题2

ChatDemoHelper辅助类集成了很多聊天相关界面的操作方法,开发者一般会直接复用,但是ChatDemoHelper对MainViewController的函数依赖度比较高,比如

[weakself.mainVC setupUnreadMessageCount];[self.mainVC networkChanged:connectionState];

解决方案

(1)将ChatDemoHelper中的mainVC类型更换成UIViewController;

(2).将MainController中的几个方法用通知(NSNotificationCenter)实现;

问题3

聊天相关页面与业务逻辑页面放在同一目录中,对于开发者来说,需要分拣;

解决方案:将环信相关的文件、资源统一放在【ChatUI】和【ChatSDK】目录中,方便开发者直接拖拽这两个文件夹即可快速集成聊天功能。

关于昵称和头像的问题

IOS中如何显示开发者服务器上的昵称和头像http://community.easemob.com/article/825307855

>>>>>>>>接下来,我们就一步步教大家如何快速集成环信IM功能:

1.新建一个IOS项目。打开XCode -> 【File】 -> 【New】 -> 【Project...】-> 【Single View Application】 ,如下图所示:

项目命名为【HxChatDemo】,然后选择路径保存即可:

2.加入环信IM相关的SDK以及界面代码。下载源码http://git.oschina.net/markies/ChatDemo-UI3.00-Simple,将解压后文件夹中的【ChatSDK】和【ChatUI】目录复制到新建项目【HxChatDemo】目录下,下载单独的 libHyphenateFullSDK.a文件(【下载地址https://yunpan.cn/cRqx72ByhXRQG(提取码:b553)】),把 libHyphenateFullSDK.a文件拷贝到【ChatSDK/HyphenateFullSDK/lib/】目录下, 然后将【ChatSDK】和【ChatUI】这两个目录拖入Xcode中:

3.引入SDK的依赖库。在Xcode中为项目新建一个名为【Frameworks】的group,然后依次按照下面的目录添加依赖库:

SDK 包含实时语音依赖库有:

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。)

4.增加预编译头文件pch,保证头文件的全局引用。在【Supporting Files】目录上单机右键 -> 【New File...】 -> 【Other】 -> 【PCH File】 -> 命名为【HxChatDemo-Prefix.pch】,加入如下代码:

#import

#ifndef __IPHONE_3_0

#warning "This project uses features only available in iOS SDK 3.0 and later."

#endif

#define REDPACKET_AVALABLE

#ifdef __OBJC__

#import

#import

#import "EMAlertView.h"

#import "TTGlobalUICommon.h"

#import "EMSDKFull.h"

#import "EaseUI.h"

#import "ChatUIDefine.h"

#define DEMO_CALL 0

#endif

效果如下图:

打开【Build Settings】,在【Apple LLVM7.1- language】组中,将【Precompile Prefix Header】设置为【YES】,将HxChatDemo-Prefix.pch文件拖入【Prefix Header】框中,如下图所示:

OK~编译运行成功!!!大功告成!经过如上几个步骤,环信IM功能所需要的SDK以及EaseUI界面代码都被成功导入项目了。

--------->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

如果需要引入单聊、群聊、联系人列表等界面功能,你就要参考简版Demo项目中的代码一步步操作了,比如:

1.在项目中注册环信APPKEY,参考Appdelegate.m中的代码

2.注册【接收消息】、【好友通知消息】、【网络变化】等回调事件,参考MainViewController.m中的代码

NOTIFY_ADD(setupUntreatedApplyCount, kSetupUntreatedApplyCount);

NOTIFY_ADD(setupUnreadMessageCount, kSetupUnreadMessageCount);

NOTIFY_ADD(networkChanged, kConnectionStateChanged);

------》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

盆友,先别急关掉页面~~~~彩蛋往往都是最后才隆重登场的~~~

不信?那我们就举个例子,一分钟内快速集成单聊功能:

1.在AppDelegate.m加入如下代码:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

[[EaseSDKHelper shareHelper] easemobApplication:application

didFinishLaunchingWithOptions:launchOptions

appkey:@"easemob-demo#chatdemoui"

apnsCertName:nil

otherConfig:nil];

return YES;

}

2.然后,在ViewController.m中添加一个按钮,并加入按钮响应代码,实现环信登录成功后自动打开单聊页面的功能:

// 登录环信并打开单聊界面

- (IBAction)doChat:(id)sender {

NSString *userName = @"martin1234";

NSString *pwd = @"martin1234";

[self showHudInView:self.view hint:@"Loading..."];

[[EMClient sharedClient] asyncLoginWithUsername:userName password:pwd success:^{

dispatch_async(dispatch_get_main_queue(), ^{

[self hideHud];

// 保存用户信息

[UserCacheManager saveInfo:userName imgUrl:@"http://avatar.csdn.net/A/2/1/1 ... ot%3B nickName:userName];

//设置是否自动登录

[[EMClient sharedClient].options setIsAutoLogin:YES];

[[ChatUIHelper shareHelper] asyncGroupFromServer];

[[ChatUIHelper shareHelper] asyncConversationFromDB];

[[ChatUIHelper shareHelper] asyncPushOptions];

//发送自动登陆状态通知

[[NSNotificationCenter defaultCenter] postNotificationName:KNOTIFICATION_LOGINCHANGE object:@([[EMClient sharedClient] isLoggedIn])];

ChatViewController *vc = [[ChatViewController alloc]initWithConversationChatter:@"admin" conversationType:EMConversationTypeChat];

[self presentViewController:vc animated:YES completion:nil];

});

} failure:^(EMError *aError) {

NSLog(@"%@",aError.description);

}];

}

效果图如下:

本文HxChatDemo项目下载地址:http://git.oschina.net/markies/HxChatDemo

本篇文章已同步发表在imgeek社区:文章地址http://www.imgeek.org/article/825307886

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

推荐阅读更多精彩内容