【iOS】环信客户互动云SDK集成+使用攻略(二)

上一篇文章中我们了解了环信客户互动云的功能,以及集成SDK前需要做的配置工作,接下来我们正式进入项目集成阶段,集成流程摘自环信CEC iOS SDK集成,本文对环信文档做了更加详细的说明,以及一些未指明错误的处理办法,如有不当之处,请各位大神指正.
文末会附上GitHub的demo地址

一、集成

提示 : 请按照以下5步全部操作完毕后再编译,中间步骤执行中如果编译报错了不用管,继续往下执行即可

1.新建项目

首先我们先新建自己的项目,名称起为HuanxinKefu

2.向Build Settings → Linking → Other Linker Flags 中增加-ObjC(注意区分大小写)。
3.复制所需SDK文件夹
  • 打开项目目录,新建一个文件夹HXService,从商城Demo中找HelpDeskUI文件夹,找到后复制进HXService文件夹
    导入HelpDeskUI.png
  • 新建一个文件夹HXFramework,然后将HelpDesk.framework、HyphenateLite.framework(不包含实时语音功能)放在HXFramework文件夹中
    导入环信客户互动云SDK.png
4.导入SDK
  • 将HXService文件夹拖进项目中,勾选 Copy items if needed 和 Create groups,此时不要慌着编译,报错也没事,先不管,继续往下操作
    导入HelpDeskUI.png

注意点 : Xcode 9.0的bug,把文件拖进项目后,这些文件的.m不能自动添加到Compile Source中,导致找不到文件等错误,需要手动添加.m到Compile Source,特别麻烦
解决方案 : 升级Xcode 9.1或9.2

  • 导入SDK,选中项目--General--Embedded Binaries--添加HelpDesk.framework和HyphenateLite.framework
    导入SDK.png
5.在项目中新建一个文件夹HXChat,将商城Demo中的下图中蓝色标注文件或文件夹全部复制进HXChat

HFileViewController : 查看聊天文件控制器(不是发送文件的)
HDChatViewController : 聊天界面控制器(最主要的控制器)
AppDelegate+HelpDesk : 初始化环信SDK,APNs,登录,退出操作,多设备登录功能等
SCLoginManger : 环信SDK管理者(单例)
SVProgressHUD : 蒙版/HUD
LocalDefine : 一些常量的宏定义


所需文件.png
7.在pch文件或全局.h文件中添加如下代码:
//以下两段代码选用一个就好

//包含实时音视频的这样添加
#ifdef __OBJC__
#import <HelpDesk/HelpDesk.h>
#import "HelpDeskUI.h"
#import "SVProgressHUD.h"
#import "LocalDefine.h"
#import "UIImageView+WebCache.h"
#import "UIButton+WebCache.h"
#import "其他头文件"
#endif

//不包含实时音视频的这样添加
#ifdef __OBJC__
#import <HelpDeskLite/HelpDeskLite.h>
#import "HelpDeskUI.h"
#import "SVProgressHUD.h"
#import "LocalDefine.h"
#import "UIImageView+WebCache.h"
#import "UIButton+WebCache.h"
#import "其他头文件"
#endif

注意点:如果你的pch文件中已经导入了其他头文件,务必将其他头文件也写在#ifdef __OBJC__ 和 #endif 之间,不然会报错,因为SDK中包含的有C文件

8.需要修改的细节
  • AppDelegate+HelpDesk.m 文件中注释掉Bugly(如果你需要bugly,在商城demo的Frameworks文件夹中找到Bugly.framework并拖进项目,此步则可以不用执行)
//#import <Bugly/Bugly.h>
//[Bugly startWithAppId:@"b336efe49a"];
  • AppDelegate+HelpDesk.m 文件中,导入该头文件
#import "SCLoginManager.h"
  • HDChatViewController中需要注释掉以下代码:
//第17行导入头文件,注释掉
//#import "HDLeaveMsgViewController.h"
//第77行的留言方法注释掉
// 留言
/*
- (void)moreViewLeaveMessageAction:(HDChatBarMoreView *)moreView
{
    [self stopAudioPlayingWithChangeCategory:YES];
    HDLeaveMsgViewController *leaveMsgVC = [[HDLeaveMsgViewController alloc] init];
    [self.navigationController pushViewController:leaveMsgVC animated:YES];
}
*/
//第211行,跳转留言控制器的方法注释掉
/*
- (void)didPressedLeaveMsgButton {
    HDLeaveMsgViewController *leaveMsgVC = [[HDLeaveMsgViewController alloc] init];
    [self.navigationController pushViewController:leaveMsgVC animated:YES];
}
*/
5.文件重复duplicate报错注意点

如果导入SDK后,编译,报文件重复duplicate的错,那是因为环信HelpDeskUI中的第三方库与你项目中已集成的第三方库重复,所以直接删掉HelpDeskUI--3rdparty中对应的库即可
HelpDeskUI中的第三方库.png
6.此时编译,Success编译成功--文件结构如下
最终文件浏览.png

二、相关配置

1.SDK 暂时不支持bitcode,在Build Settings →Enable Bitcode 改为NO。
image.png
2.去除大量多余的警告,在Build Settings →documentation comments 改为NO
去除大量多余警告.png
3.在工程info.plist文件中,增加隐私权限:

Privacy - Photo Library Usage Description 需要访问您的相册
Privacy - Microphone Usage Description 需要访问您的麦克风
Privacy - Camera Usage Description 需要访问您的摄像机


权限配置.png

三、使用

1.初始化
  • 在AppDelegate.m文件中的导入头文件
#import "AppDelegate+HelpDesk.h"
#import "ViewController.h" //初始界面,登录/注册界面
  • 在AppDelegate.m的- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 方法中调用
   //1.创建窗口
    self.window = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds];
    //2.初始化环信
    [self easemobApplication:application didFinishLaunchingWithOptions:launchOptions];
    //3.添加自定义小表情
    [[HDEmotionEscape sharedInstance] setEaseEmotionEscapePattern:@"\\[[^\\[\\]]{1,3}\\]"];
    [[HDEmotionEscape sharedInstance] setEaseEmotionEscapeDictionary:[HDConvertToCommonEmoticonsHelper emotionsDictionary]];

    //4.设置根控制器
    UIStoryboard *story = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
    ViewController *vc = [story instantiateViewControllerWithIdentifier:@"story"];
    UINavigationController *nav = [[UINavigationController alloc]initWithRootViewController:vc];
    self.window.rootViewController = nav;

    //5.显示窗口
    [self.window makeKeyAndVisible];
    
    return YES;
  • 在初始界面ViewController中进行登录注册
    首先导入头文件
#import "HDChatViewController.h"
#import "SCLoginManager.h"

然后实现注册方法

//注册
- (void)regHuanXin{
    HError *error = [[HChatClient sharedClient] registerWithUsername:self.username.text password:self.password.text];
    
    if (!error) {
        NSLog(@"注册成功");
    }else{
        NSLog(@"注册失败:%@",error.errorDescription);
    }
}

实现登录方法,判断登录成功,则跳转到聊天控制器HDChatViewController

//登录方法
- (void)loginHuanXin{
    HChatClient *client = [HChatClient sharedClient];
    if (client.isLoggedInBefore != YES) {
        HError *error = [client loginWithUsername:self.username.text password:self.password.text];
        if (!error) {
            NSLog(@"登录成功");
            [self joinChat];
        } else {
            NSLog(@"登录失败");
        }
    }else{
        [self joinChat];
    }
}
//跳转到聊天控制器(重点)
- (void)joinChat{
    SCLoginManager *sc = [SCLoginManager shareLoginManager];
    HDChatViewController *chatVC = [[HDChatViewController alloc] initWithConversationChatter:sc.cname]; // 获取地址:kefu.easemob.com,“管理员模式 > 渠道管理 > 手机APP”页面的关联的“IM服务号”
    [self.navigationController pushViewController:chatVC animated:YES];
}
  • 退出登录方法
//退出登录
//如果要更换账号登录,一定要退出登录后再登录
- (IBAction)loginOutAction:(id)sender {
    HError *error = [[HChatClient sharedClient] logout:YES];
    if (error) { //登出出错
        NSLog(@"退出登录出错");
    } else {//登出成功
        NSLog(@"退出登录成功");
    }
}
2.配置环信
  • 找到AppDelegate+HelpDesk.m文件中的initializeCustomerServiceSdk方法,配置推送证书的名称,关于生成推送证书可参考 : https://www.jianshu.com/p/4be5838338eb
    其中的选项可以关闭/开启打印日志

    image.png

  • 在LocalDefine.h文件中,填写与客户互动云后台关联的信息,与后台建立关联关系
    image.png
  • 至此,基本集成工作已全部完毕,我们打开APP尝试聊天

    首先注册账号
    注册.png

    然后点击登录,登录成功跳转到聊天控制器,我们尝试发送一条消息给后台客服
    前台发消息.png

后台接收到消息.png

至此,我们代码使用过程已经全部写完了,表情和语音信息都可以正常使用,目前只能接收和查看文件,如果想要集成发送文件功能,可以参考http://blog.csdn.net/mengmakies/article/details/64122172

3.注意点
  • 远程推送在AppDelegate+HelpDesk中已经集成,本地推送代码可以参考商城Demo
  • 聊天控制器HDChatViewController继承自HelpDeskUI中的HDMessageViewController,HDMessageViewController才是真正的聊天控制器,如果要修改东西,也可以从该控制器中修改
  • 当聊天控制器HDChatViewController没有加载(例如APP刚启动)或已经dealloc,此时是不能接受到后台发的消息的(HDChatViewController有消息监听方法),但是我们使用中往往会有这样的需求,此时,你可以在AppDelegate+HelpDesk(其他不会dealloc的控制器也可以)中也添加消息监听的代理方法,多个接受消息监听的方法互不影响
//添加消息监控,第二个参数是执行代理方法的队列,默认是主队列
[[HChatClient sharedClient].chatManager addDelegate:self delegateQueue:nil];
//移除消息监控
[[HChatClient sharedClient].chatManager removeDelegate:self];

- (void)messagesDidReceive:(NSArray *)aMessages{
     //收到普通消息,格式:<HMessage *>
     //只接收未读消息,每条消息都会调用一次该方法
}
  • 头像和昵称都可以在HelpDeskUI中修改


    修改头像/昵称.png

四、总结

1.更多扩展功能可以查看环信文档,如有需要,我可以将功能加在自己的Demo中
2.如果在集成过程中遇到任何问题,请在下方留言~我们共同交流
3.附github的demo地址 : 自己写的demo
下载后只需导入HelpDeskLite.framework,HyphenateLite.framework即可
4.感谢各位的支持~

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

推荐阅读更多精彩内容