第1步:快速创建APP关联

移动客服系统的“APP关联”对应即时通讯云(IM)后台的应用。在移动客服系统创建关联后,可直接登录IM后台管理该关联对应的应用。

  • 如果您还没有环信即时通讯云的账号,可以打开环信移动客服,进入“管理员模式 > 渠道管理 > 手机APP”,快速创建一个“APP关联”;
  • 如果您已有环信即时通讯云的账号,并创建了应用,可以登录环信移动客服,进入“管理员模式 > 渠道管理 > 手机APP”,关联您的IM账号。

关于快速创建APP关联的分步骤演示,请参考:快速创建APP关联。

第2步:环境准备

开发工具:Xcode。

集成移动客服iOS SDK时,可参考“商城”demo源码和EaseUI源码。

下载地址:https://github.com/easemob/helpdeskdemo-ios

KefuSDK基于IM SDK 3.x,如同时使用环信IM功能(非音视频),需使用此文档中的初始化、登录、登出操作,不需要添加IM的SDK,其IMSDK-API正常使用。

第3步:集成基础功能

完成该步骤可以实现用户注册、登录、退出,向移动客服系统发送文本、语音、图片、文件消息功能。

准备工作

1、在工程中导入 HelpDeskSDK 和 HelpDeskUI 文件夹。两种方式:

  • 选择“File > Add Files to”,从本地选择上述文件夹,点击“Options”,勾选“Create groups”,并点击“Add”;
  • 或者,直接将上述文件夹拖入工程,在弹出对话框中勾选“Create groups”,并点击“Finish”。

2、向Build Settings → Linking → Other Linker Flags 中增加-ObjC.

3、向Build Phases → Link Binary With Libraries 中添加依赖库

  • CoreMedia.framework
  • MobileCoreServices.framework
  • ImageIO.framework
  • AudioToolbox.framework
  • AVFoundation.framework
  • libc++.dylib
  • libz.dylib
  • libstdc++.6.0.9.dylib
  • libsqlite3.dylib
  • (Xcode 7 及以上版本,后缀为tbd)

4、SDK 不支持 bitcode,在 Build Settings → Build Options → Enable Bitcode 中设置 NO。

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

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

6、在pch文件或全局.h文件中添加如下代码

#ifdef __OBJC__#import "helpdesk_sdk.h"#import "HelpDeskUI.h"#endif

注:如果工程中没有pch文件,需要新建一个,并在Build Settings中设置Prefix Header为该pch文件,例如:HelloiOS/PrefixHeader.pch。

注意:由于环信客服端SDK不支持cocoPods 导入,只能进行手动导入。demo内有两个SDK文件夹,其中HelpDeskSDKFull支持实时语音,另外一个不支持实时语音

7、拿到环信客服SDK的appKey

8、初始化sdk

 HOptions *option = [[HOptions alloc] init];option.appkey = HXKF_APP_KEY; // 必填项,appkey获取地址:kefu.easemob.com,“管理员模式 > 渠道管理 > 手机APP”页面的关联的“AppKey”option.tenantId = @"32583";// 必填项,tenantId获取地址:kefu.easemob.com,“管理员模式 > 设置 > 企业信息”页面的“租户ID”//推送证书名字option.apnsCertName = @"your apnsCerName";//(集成离线推送必填)//Kefu SDK 初始化,初始化失败后将不能使用Kefu SDKHError *initError = [[HChatClient sharedClient] initializeSDKWithOptions:option];if (initError) { // 初始化错误NSLog(@"DADADSADASDSAD");}

9. 进入会话列表页面

     // 进入会话页面HDMessageViewController *chatVC = [[HDMessageViewController alloc] initWithConversationChatter:@"kefuchannelimid_750310"]; // 获取地址:kefu.easemob.com,“管理员模式 > 渠道管理 > 手机APP”页面的关联的“IM服务号”[self.navigationController pushViewController:chatVC animated:YES];

10.修改客服头像(一般得到客服的头像和用户名实在接收到消息的方法内获取到的,红色是经过修改的代码)

#pragma mark - public - (NSArray *)formatMessages:(NSArray *)messages
{NSMutableArray *formattedArray = [[NSMutableArray alloc] init];if ([messages count] == 0) {return formattedArray;}for (HMessage *message in messages) {//Calculate time intervalCGFloat interval = (self.messageTimeIntervalTag - message.timestamp) / 1000;if (self.messageTimeIntervalTag < 0 || interval > 60 || interval < -60) {NSDate *messageDate = [NSDate dateWithTimeIntervalInMilliSecondSince1970:(NSTimeInterval)message.timestamp];NSString *timeStr = @"";if (_dataSource && [_dataSource respondsToSelector:@selector(messageViewController:stringForDate:)]) {timeStr = [_dataSource messageViewController:self stringForDate:messageDate];}else{timeStr = [messageDate formattedTime];}[formattedArray addObject:timeStr];self.messageTimeIntervalTag = message.timestamp;}//Construct message modelid<HDIMessageModel> model = nil;//接收的消息不能设置头像BOOL isSender = message.direction == HMessageDirectionSend;if (isSender && _dataSource && [_dataSource respondsToSelector:@selector(messageViewController:modelForMessage:)]) {model = [_dataSource messageViewController:self modelForMessage:message];}else{model = [[HDMessageModel alloc] initWithMessage:message];NSDictionary *weichat = [NSDictionary dictionary];if ([message.ext objectForKey:@"weichat"]) {weichat = [message.ext valueForKey:@"weichat"];}NSDictionary *agent = [NSDictionary dictionary];if ([weichat objectForKey:@"agent"]) {agent = [weichat valueForKey:@"agent"];}if ([[agent allKeys] containsObject:@"avatar"]) {NSString *url = [agent valueForKey:@"avatar"];if (![url isKindOfClass:[NSNull class]]) {if ([url hasPrefix:@"http"]) {model.avatarURLPath = [agent valueForKey:@"avatar"];} else {//设置客服头像
                        model.avatarURLPath = [[@"https:" stringByAppendingString:[agent valueForKey:@"avatar"]] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
                    }}}model.avatarImage = [UIImage imageNamed:@"HelpDeskUIResource.bundle/user"];model.failImageName = @"imageDownloadFail";}if (model) {[formattedArray addObject:model];}}return formattedArray;
}

10.更改自己的头像

是在HDBaseMessageCell.m文件内进行赋值的  修改对方头像也可以在这里修改

#pragma mark - setter- (void)setModel:(id<HDIMessageModel>)model
{[super setModel:model];if (model.avatarURLPath) {[self.avatarView sd_setImageWithURL:[NSURL URLWithString:model.avatarURLPath] placeholderImage:model.avatarImage];} else {self.avatarView.image = model.avatarImage;}if (![model.nickname isKindOfClass:[NSNull class]]) {_nameLabel.text = model.nickname;}if (self.model.isSender) {_hasRead.hidden = YES;switch (self.model.messageStatus) {case HMessageStatusPending:{_statusButton.hidden = YES;[_activity setHidden:NO];[_activity startAnimating];}break;case HMessageStatusDelivering:{_statusButton.hidden = YES;[_activity setHidden:NO];[_activity startAnimating];}break;case HMessageStatusSuccessed:{_statusButton.hidden = YES;[_activity stopAnimating];if (self.model.isMessageRead) {_hasRead.hidden = NO;}}break;case HMessageStatusFailed:{[_activity stopAnimating];[_activity setHidden:YES];_statusButton.hidden = NO;}break;default:break;}        // 自己的 昵称 头像[self.avatarView sd_setImageWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://pic35.nipic.com/20131121/2531170_145358633000_2.jpg"]] placeholderImage:[UIImage imageNamed:@""]];self.nameLabel.text = @"我的名字";}else{// 对方的昵称 头像}
}

11.进行指定客服聊天

#pragma mark - Hyphenate#pragma mark - HChatDelegate
#pragma mark -- 获取客服的名字和头像- (void)messagesDidReceive:(NSArray *)aMessages {for (HMessage *message in aMessages) {//获取客服的头像和名称NSLog(@"%@",message.ext[@"weichat"][@"agent"]);NSLog(@"头像 ----- url  %@",message.ext[@"weichat"][@"agent"][@"avatar"]);NSLog(@"昵称 ----- %@",message.ext[@"weichat"][@"agent"][@"userNickname"]);self.title = message.ext[@"weichat"][@"agent"][@"userNickname"];if ([self.conversation.conversationId isEqualToString:message.conversationId]) {[self addMessageToDataSource:message progress:nil];}}
}- (void)cmdMessagesDidReceive:(NSArray *)aCmdMessages {for (HMessage *message in aCmdMessages) {if ([self.conversation.conversationId isEqualToString:message.conversationId]) {[self showHint:NSEaseLocalizedString(@"receiveCmd", @"receive cmd message")];break;}}
}

今天第一次接触环信客服SDK 有不足之处希望指正  联系方式QQ: 497108685

环信客服SDK接入-----(一)相关推荐

  1. uni-app接入环信客服云 easemobim

    需求:点击商品详情里的客服按钮,跳转(注意:不是拉起)页面,页面为客服窗口 尝试: uni-app webview直接集成网页链接(https://106280.kefu.easemob.com/we ...

  2. android 环信客服修改自己的头像

    因为自己项目目中遇到到了,有自己的需求,所以就修改了环信自己的头像,客服的头像也修改了,好了废话不多说了上干活 首先找到easeui中的类EaseUserUtils       不过我把图片都保存到本 ...

  3. android 环信客服 自动登出,Android环信聊天头像昵称显示解决方案

    从消息扩展中获取昵称和头像 昵称和头像的获取:把用户基本的昵称和头像的URL放到消息的扩展中,通过消息传递给接收方,当收到一条消息时,则能通过消息的扩展得到发送者的昵称和头像URL,然后保存到本地数据 ...

  4. 环信 即时通讯sdk实现客服功能

    仅适用于已经集成环信 即时通讯sdk,又需求实现客服功能,而不更换sdk. 下面的api环信 即时通讯并没有在文档中暴露,是我咨询了环信客服后知道的 核心就是 给 Message对象  setAttr ...

  5. 环信im Flutter sdk使用帮助

    文章主要讲解环信im Flutter sdk如何使用. 环信官网 IMGeek问题反馈 环信iOS集成文档 环信Android集成文档 flutter sdk源码地址: Github 任何问题可以通过 ...

  6. 小程序统一服务消息_小程序客服消息接入微信教程

    很多商家在咨询小程序,都会咨询手机上能不能接待客户,当然可以,但需要开通客服助手小程序,下面就和大家分享一下小程序客服消息接入微信教程? 基本流程:客服入口-添加绑定客服微信号-用绑定客服微信号扫码- ...

  7. vue2集成声网-环信即时通讯SDK,建议实现两人聊天

    1.注册登陆环信并创建用户 步骤:注册 => 登录 => 创建应用 => 创建应用用户 登录注册:环信登陆注册页面(https://console.easemob.com/user/ ...

  8. 公众号客服怎么接入客户-微信公众号使用教程23

    在微信公众号后台, 把客服人员的微信添加设置好后, 就可以对顾客的咨询进行回复了. 当有人在公众号后台回复文字咨询时, 客服的接入流程是: 1.在电脑端登录客服 2.选择要接入的顾客 3.点击接入按钮 ...

  9. mui初级入门教程(五)— 聊聊即时通讯(IM),基于环信 web im SDK

    文章来源:小青年原创 发布时间:2016-06-15 关键词:mui,环信 web im,html5+,im,页面传值,缓存 转载需标注本文原始地址: http://zhaomenghuan.gith ...

最新文章

  1. 一篇文看懂Hadoop
  2. mysql右下角托盘中的图标_MFC下托盘图标的实现和托盘菜单。
  3. QTcreator 多线程(生产者消费者)
  4. 关于Unity中NGUI的Pivot和锚点
  5. 台式计算机usb口不识别鼠标,usb鼠标不能识别怎么办解决教程
  6. 使用Oracle 11g新特性 Active Database Duplication 搭建Dataguard环境
  7. JUnit5 @BeforeAll注解示例
  8. 在Eclipse上使用egit插件通过ssh协议方式上传项目代码的具体步骤
  9. Office 2016 简体中文批量授权版镜像下载
  10. 【VS】Installer Projects生成英文安装包
  11. Android自定义View-View的绘制流程
  12. 输出100以内的所有素数
  13. 无线网络经常掉线的原因以及网络的设置
  14. plotyy函数_matlab中plotyy函数加入双y轴说明的方法
  15. 《阳光下》 ——【传递正反馈】
  16. Nodejs内存溢出原因
  17. 滴滴夜莺:从监控告警系统向运维平台演化
  18. 高效办公之超好用的流程图工具
  19. Windows Server 2008 R2 安装SP1补丁出错(0x800f0818)
  20. 原根的存在性 几道例题

热门文章

  1. Python之基础详解(八):必备,以制作交易收盘价走趋图为例,来可视化处理json格式的文件
  2. MySQL索引优化(二)索引失效
  3. 量子纠缠的超距作用,超光速是假象
  4. 和Leo一起做爱线段树的好孩子HDU5238 Calculator
  5. python人工智能方向面试准备_人工智能入门学习路线及就业面试
  6. MySQL必做练习题33道(员工信息,工资等级,部门信息)
  7. java html转pdf的几种方式_java 有关word,excel,pdf转换成html 有几种方式
  8. 3.Timing Constraints
  9. 动态管理电源功能 计算机 中标,东北石油大学省创新基地奖励金设备仪器采购第四标段:黑龙江省油气田控制与动态监测实验室中标公告2020-11-11...
  10. COLLATE LOCALIZED ASC