史上最详细的环信移动客服APP快速集成秘籍


项目需要集成环信客服系统,这两天的摸爬滚打和客服沟通后整理一篇文章,以作备份

环信的客服真的真的真的很赞

撰稿时间:2017.03.07晚

相关文档:
环信开发文档
移动客服 iOS SDK 集成
移动客服 iOS SDK API
移动客服:商城”demo源码和EaseUI源码(iOS)
移动客服 Android SDK 集成
移动客服 Android SDK API
移动客服:商城”demo源码和EaseUI源码(Android)

后台:
移动客服后台
环信管理后台

详细步骤如下:

SDK方面
  1. 先把 移动客服:商城”demo源码和EaseUI源码(iOS) 下载下来,该SDK基于IM SDK 3.x,如同时使用环信IM功能(非音视频),需使用此文档中的初始化、登录、登出操作,不需要添加IM的SDK,其IMSDK-API正常使用。
  2. 打开下载好的demo,架构如下图

    将红色框框里面的两个文件夹,在Finder中复制到自己的项目的适当路径中(这个地方有个坑,稍后下午详细说明),然后拖拽到项目时选择 Create groups
  3. Build Phases ---> Link Binary With Libraries 中添加依赖库
AudioToolbox.framework
AVFoundation.framework
libc++.dylib
libz.dylib
libstdc++.6.0.9.dylib
libsqlite3.dylib
// Xcode 7 及以上版本 . dylib 为 .tbd

如下图:


  1. Build Settings ---> Linking ---> Other Linker Flags 中增加 -ObjC。
  2. SDK 不支持 bitcode,在 Build Settings ---> Build Options ---> Enable Bitcode 中设置 NO。


    步骤4、步骤5
  3. 在工程info.plist文件中 增加隐私权限



    此处相关的权限:

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

详细的权限设置,请 点我点我

  1. 在 .pch 中 或者 全局的 .h 中添加如下代码:
 #ifdef __OBJC__
 #import "helpdesk_sdk.h"
 #import "HelpDeskUI.h"
 #endif

如果项目中没有 .pch,如下步骤创建:
a. command + N ---> PCH File ---> Next


b. 可以修改名字 ---> Create

c. 如下图配置,搜索 prefix 即可

创建APP关联

上面的步骤依据文档 可以轻松完成,但是APP相关关联,就比较坑了,如果没有集成过环信聊天的经历的话很容易码入误区,下面请紧跟随笔者步骤:

  1. 需要申请两个账号:移动客服后台环信管理后台,如果已经有了请下一步。
  2. 先在 环信管理后台 创建应用

    点击应用显示应用的信息(** AppKeyClient IDClient Secret** 这几个要记着)
  3. 环信管理后台 注册IM用户(名称要记着)
  4. 移至 环信管理后台 创建APP关联( 官方文档,官方文档介绍有些不全面,而且有点不全面 )
    在后台右上角选择 管理员模式 ---> 渠道管理 ---> 手机APP ---> 添加APP关联 ---> 去关联IM账号

  5. 输入关联的应用的信息,下图方框中为所关联应用创建的IM用户



    输入完毕,保存即可如下图


  6. 记下 tenantId 租户ID,下文用到:设置 ---> 企业信息
  7. 上面步骤完成后,官方文档中没有提及的一步: 设置--->会话分配规则

    至此APP关联结束,可以切回 客服模式
代码部分
  1. 入口类中 didFinishLaunchingWithOptions,初始化环信客服
    HOptions *option = [[HOptions alloc] init];
    option.appkey = @"***";
    option.tenantId = @"***"; // 上文提到的 设置 ---> 企业信息
    //推送证书名字
#if DEBUG
    option.apnsCertName = @"开发环境推送证书名称";
#else
    option.apnsCertName = @"正式环境推送证书名称";
#endif
    //Kefu SDK 初始化,初始化失败后将不能使用 SDK
    HError *initError = [[HChatClient sharedClient] initializeSDKWithOptions:option];
    if (initError) { // 初始化错误
        UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"" message:@"客服系统初始化错误" delegate:nil cancelButtonTitle:@"知道了" otherButtonTitles:nil, nil];
        [alertView show];
    }

    [[HChatClient sharedClient] addDelegate:self delegateQueue:nil];
  1. 入口类遵循 HChatClientDelegate
  2. 入口类实现协议
 //  环信客服连接服务器的状态变化时会接收到该回调, 有以下几种情况, 会引起该方法的调用:  1. 登录成功后, 手机无法上网时, 会调用该回调  2. 登录成功后, 网络状态变化时, 会调用该回调
//  @param aConnectionState 当前状态
 - (void)connectionStateDidChange:(HConnectionState)aConnectionState {
        NSLog(@"\n-----> %@", aConnectionState == HConnectionConnected ? @"已连接" : @"未连接");
 }
  1. 实现下面方法
 - (void)applicationWillEnterForeground:(UIApplication *)application  {
       [[HChatClient sharedClient] applicationWillEnterForeground:self];
}

 - (void)applicationDidEnterBackground:(UIApplication *)application  {
       [[HChatClient sharedClient] applicationDidEnterBackground:self];
}
  1. 快速集成可以如下操作:
    找到下载的demo中如下 .h 和 .m (如下图)复制到自己的项目中,并拖拽到项目中:

    由于 HDChatViewController 继承自 HDMessageViewController(在 HelpDeskUI 中),可以直接套用demo里面的相关逻辑,移入后编译 修改 由于缺乏相关引用文件报错,即可作为聊天页面。
  2. 在监听进入聊天页面的func,可以进行如下操作
    注册:经验证这里注册的账号,会出现在 环信管理后台 该应用的 IM用户列表
  HChatClient *client = [HChatClient sharedClient];
// registerWithUsername:password:  注册用户,同步方法,会阻塞当前线程. 不推荐使用,建议后台通过REST注册,快速
// 这里 注册的用户 相当于使用app联系客服的用户,可以依照一定的规则来创建,规则如下
  HError *error = [[HChatClient sharedClient] registerWithUsername:@"fengfengAppUser" password:@"123456"];
if (error &&  error.code != HErrorUserAlreadyExist) {
      // HErrorNetworkUnavailable 网络不可用
      // HErrorUserAlreadyExist 用户已存在
      // HErrorUserAuthenticationFailed 无开放注册权限(后台管理界面设置[开放|授权])
      // HErrorUserIllegalArgument 用户名非法
      NSLog(@"注册失败;error code:%d,error description :%@",error.code,error.errorDescription);
  }

环信 ID 规则
登录:

//  由于HChatClient有一个isLoggedInBefore(BOOL),登录操作前可以先做个判断
if (client.isLoggedInBefore != YES) {
       //这里登录的账号是上面注册的账号,或者是从服务端获取的账号,也即是使用app联系客服的用户的账号
       HError *error2 = [client loginWithUsername:@"fengfengAppUser" password:@"123456"];
       if (!error2) { //登录成功
           // 这里 的 @"fengfeng01"参数,一定是上文 中 在 环信客服后台 关联的IM账号
           HDChatViewController *chatVC = [[HDChatViewController alloc] initWithConversationChatter:@"fengfeng01"];
           [weakSelf.navigationController pushViewController:chatVC animated:YES];
      } else { //登录失败
           [weakSelf showTextHud:error.errorDescription];
           return;
      }
 } else { //已经成功登录
       // 这里 的 @"fengfeng01"参数,一定是上文 中 在 环信客服后台 关联的IM账号
       HDChatViewController *chatVC = [[HDChatViewController alloc] initWithConversationChatter:@"fengfeng01"];
       [weakSelf.navigationController pushViewController:chatVC animated:YES];
  }

这里比较重要 ,单独再次列出来:

// 这里 的 @"fengfeng01"参数,一定是上文 中 在 环信客服后台 关联的IM账号,也就是 关联的什么账号,这里参数传入什么
 HDChatViewController *chatVC = [[HDChatViewController alloc] initWithConversationChatter:@"fengfeng01"];
消息发送完成回调block

当如上正确配置后,发送消息可以在回调block中看到如下信息
在如下图 .m 中:


在 HDMessageViewController.m 中,如下func中断点:

控制台如下:

关键字段在方框中:
_conversationId_to :指的是在 环信客服后台 关联APP 的时候绑定的 IM账号
_from :指的是 上文 注册登录 的账号。
error:当聊天异常的时候,查看 error 中的信息是个不错的选择。

至此:环信客服聊天系统 简单的集成完毕,如果一切顺利的话可以在环信客服后台收到如下信息:如下图
环信客服后台 ---> 管理员模式 ---> 会话


集成过程遇到的问题:(集成过程遇到新的问题随时更新)

  1. 导入SDK后重复导入编译报错:如图



    解决办法:
    由于环信客服SDK集成了一些常用的第三方的库,如果项目本身也存在这些第三方的库,就 会引起冲突,删除掉,然后把报错的地方修改成正常的调用即可


  2. 和客服沟通后对一些疑问的整理:

Q:在APP中集成了客服系统后 客户 和 客服 之间的关系如何协调?
A:IM服务号就是 IM用户,你新注册一个IM用户 然后用于绑定IM服务号的,然后客户端登录的用户 都与这个绑定的IM服务号聊天,客服系统将与这个IM服务号聊天的会话分配给客服

Q:注册的IM用户 相当于 客服和用户之前的 枢纽么
M:可以这么理解

Q:为什么 这个账号可以在服务端注册,也可以在后台管理系统手动添加啊
M:其实都是一个接口操作的,服务器端的rest接口

Q:是不是 服务端返回的用于登陆的IM账号不同 APP用户关联的客服也不同了呐?
M:未必,移动客服那边绑定一个IM服务号就够用了,客户端登录的其他IM用户(服务端返回的或者注册的)都给这个移动客服绑定的IM服务号发消息,环信的客服系统就能收到客户端发送过来的消息了


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

推荐阅读更多精彩内容

  • 作为一名常年混迹imGeek开发者社区的程序猿,本着响应社区号召的“我为人人,人人为我”口号,赠人玫瑰,手留余香。...
    imGeek阅读 1,667评论 0 3
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,033评论 25 707
  • 1)项目里面不需要环信SDK的太多功能,只是想要聊天和好友功能,其他都不用,那SDK一定要总是跟着更新么? a.环...
    DefaultYuan阅读 26,555评论 17 59
  • 版权声明:本文为博主原创文章,未经博主允许不得转载。 前言 公司最近要求做即时通讯, 直接用了三方环信了,今天和大...
    Heaven7th阅读 9,622评论 24 30
  • 一直有一个想法 自己去从头写一款游戏,真正能根据自己想法增加游戏趣味性 但一直没有这种机会 也是对前后端技术不能全...
    zebei阅读 542评论 0 1