iOS SDK 接入
一. 注册智齿账号
请先确保已注册智齿客服账号(www.sobot.com)。
1. 获取appKey
<管理后台-设置-支持渠道-APP>
二. 下载智齿SDK
点击下载最新最新SDK包。
三. 快速集成
一. 将SDK添加到项目(必须)
1. CocoaPods集成
在 Podfile 文件中加入:
pod 'SobotKit'
如果搜索不到最新版本,请运行以下命令更新CocoPods仓库
pod repo update --verbose
2. 手动集成
解压[iOS_SDK],添加必要文件SobotKit.framework、ZCEmojiExpression.bundle和SobotKit.bundle到你的工程里。智齿iOS_SDK 的实现,依赖了一些系统的框架,在开发应用时需要在工程里加入这些框架。开发者首先点击工程右边的工程名,然后在工程名右边依次选择TARGETS -> BuiLd Phases -> Link Binary With Libraries,展开 LinkBinary With Libraries后点击展开后下面的+来添加下面的依赖项:
- AVFoundation.framework
- AssetsLibrary.framework
- AudioToolbox.framework
- SystemConfiguration.framework
- MobileCoreServices.framework
- libz.1.2.5.tbd( dylib)
3. 文件介绍
SDK包含(SobotKit.framework、ZCEmojiExpression.bundle和SobotKit.bundle)、SobotDemo、SobotLocalizable语言文件和相关说明文档。
文件名 | 说明 |
---|---|
SobotKit.framework | 智齿SDK核心代码库 |
SobotKit.bundle | 图片资源文件 |
ZCEmojiExpression.bundle | 表情资源文件 |
ZCLibInitInfo.h | 实体类:基础参数类(自定义用户配置信息) |
ZCKitInfo.h | 实体类:基础参数(UI自定义) |
ZCSobot.h | 连接客户端到智齿客服,该文件提供接入功能 |
SobotKit.h | 该文件引用所有SDK需要的文件 |
ZCUIBaseController | UI界面父类,定义顶部View |
ZCUIChatController | 主要UI界面,如果需要自己实现跳转,可直接引用实现 |
SobotLocalizable.strings | 国际化语言文件 |
ZCLibClient.h | 全局配置类 |
二. 初始化SDK(必须)
初始化参数和调用方式:初始化信息和UI自定义分为2个模型,使用ZCLibInitInfo存储初始化属性,ZCKitInfo设置相关UI属性,一起传递给初始化方法,详情见Demo调用代码;
主要调用代码如下(详细见Demo):
1. 启动
// 启动
ZCLibInitInfo *initInfo = [ZCLibInitInfo new];
// 企业编号 必填
initInfo.appKey = @"Your appKey";
// 用户id,用于标识用户,建议填写 (注意:userId不要写死,否则获取的历史记录相同)
initInfo.userId = @"Your userId";
//配置UI
ZCKitInfo *uiInfo=[ZCKitInfo new];
// 是否显示转人工按钮
uiInfo.isShowTransfer = YES;
//设置启动参数
[[ZCLibClient getZCLibClient] setLibInitInfo:initInfo];
// 智齿SDK初始化启动事例
[ZCSobot startZCChatView:uiInfo with:self pageBlock:^(ZCUIChatController *objec
t, ZCPageBlockType type) {
// 点击返回
if(type==ZCPageBlockGoBack){
NSLog(@"点击了返回按钮");
}
// 页面UI初始化完成,可以获取UIView,自定义UI
if(type==ZCPageBlockLoadFinish){
// banner 返回按钮
// [object.backButton setTitle:@" 返回" forState:UIControlStateNormal];
// banner 标题
// [object.titleLabel setFont:[UIFont systemFontOfSize:30]];
// banner 底部View
// [object.topView setBackgroundColor:[UIColor greenColor]];
// 输入框
// UITextView *tv=[object getChatTextView];
// [tv setBackgroundColor:[UIColor redColor]];
}
} messageLinkClick:nil];
// messageLinkClick: // 如果为nil,SDK内部处理理消息中的链接,如果用户自己实现了这个方法,SDK内部
点击链接的事件不在执行,需要用户自己去实现,^(NSString *link)中link为点击的链接。
2. 离线消息
// 初始化智齿客服,会建立长连接通道,监听服务端消息(建议启动应用时调用,没有发起过咨询不会浪费资源,至少转一次人工才有效果)
[[ZCLibClient getZCLibClient] initZCIMCaht];
// ReceivedMessageBlock 未读消息数, obj 当前消息 unRead 未读消息数
[ZCLibClient getZCLibClient].receivedBlock=^(id obj,int unRead){
NSLog(@"未读消息数量:\n%d,%@",unRead,obj);
}];
// 关闭通道,清理内存,退出智齿客户
说明:调用此方法后将不能接收到离线消息,除非再次进入智齿SDK重新激活
isClosePush:YES ,是关闭push;NO离线用户,但是可以收到push推送+(void) closeAndoutZCServer:(BOOL) isClosePush;
[ZCLibClient closeAndoutZCServer:YES];
注:如果你需要SDK推送的功能请参考以下消息通知、注册推送的相关代码,如果您的项目不需要请略过。
3. 消息通知
在ZCLibClient.h中
/**
推送的token
每次启动应用都需要重新设置
*/
@property (nonatomic,strong) NSData *token;
/**
测试模式,
根据此设置调用的推送证书,默认NO
NO ,调用生产环境
YES,测试环境
*/
@property (nonatomic,assign) BOOL isDebugMode;
/**
自动提醒消息
说明:如果开启自动提醒消息,当没有在智齿聊天页面的时候,都会主动把消息作为本地通知展示
*/
@property (nonatomic,assign) BOOL autoNotification;
/**
获取未读消息数
@return 未读消息数(进入智齿聊天页面会清空)
*/
-(int) getUnReadMessage;
/**
移除消息推送
退出账号时,切记移除消息推送
uid,根据传入的userId生成的唯一标识,token,当前推送的token,error退出错误
error为nil说明成功(如果token和uid都是空不会调用)
*/
-(void)removePush:(void (^)(NSString *uid, NSData *token,NSError *error))result
Block;
a. 注册推送
在AppDelegate.m 文件中注册推送。
b. 导入头文件
#import <SobotKit/SobotKit.h>
#import <UserNotifications/UserNotifications.h>
#define SYSTEM_VERSION_GRATERTHAN_OR_EQUALTO(v) ([[[UIDevice currentDevice] systemVersion] compare:v
options:NSNumericSearch] != NSOrderedAscending)
c. 服从协议
<UIApplicationDelegate,UNUserNotificationCenterDelegate>
d. 注册
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDic
tionary *)launchOptions {
// Override point for customization after application launch.
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone];
if (SYSTEM_VERSION_GRATERTHAN_OR_EQUALTO(@"10")) {
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
center.delegate = self;
[center requestAuthorizationWithOptions:(UNAuthorizationOptionSound | UNAuthorizationOptionAlert |UNAut
horizationOptionBadge) completionHandler:^(BOOL granted, NSError * _Nullable error) {
if (!error) {
[[UIApplication sharedApplication] registerForRemoteNotifications];
}
}];
}else{
[self registerPush:application];
}
[[ZCLibClient getZCLibClient].libInitInfo setAppKey:@"your appKey"];
// 设置推送是否是测试环境,测试环境将使用开发证书
[[ZCLibClient getZCLibClient] setIsDebugMode:YES];
// 错误日志收集
[ZCLibClient setZCLibUncaughtExceptionHandler];
return YES;
}
-(void)registerPush:(UIApplication *)application{
// ios8后,需要添加这个注册,才能得到授权
if ([[UIApplication sharedApplication] respondsToSelector:@selector(registerUserNotificationSettings:)]) {
//IOS8
//创建UIUserNotificationSettings,并设置消息的显示类类型
UIUserNotificationSettings *notiSettings = [UIUserNotificationSettings settingsForTypes:(UIUserNotification
TypeBadge | UIUserNotificationTypeAlert | UIRemoteNotificationTypeSound) categories:nil];
[application registerUserNotificationSettings:notiSettings];
} else{ // ios7
[application registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge|UIRemoteNotificationTypeSou
nd|UIRemoteNotificationTypeAlert)];
}
}
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)pToken{
NSLog(@"---Token--%@", pToken);
// 注册token
[[ZCLibClient getZCLibClient] setToken:pToken];
}
e. APNS消息推送及提醒
// 是否自动提醒
[[ZCLibClient getZCLibClient] setAutoNotification:YES];
// 设置推送环境
[[ZCLibClient getZCLibClient] setIsDebugMode:NO];
// 关闭推送
[[ZCLibClient getZCLibClient] removePush:^(NSString *uid, NSData *token, NSError *error) {
if((uid==nil && token==nil) || error!=nil){
// 移除失败,可设置uid或token(uid可不设置)后再调用
}else{
// 移除成功
}
}];
4. ios10权限设置
<key>NSCameraUsageDescription</key>
<string>访问相机</string>
<key>NSLocalizedDescription</key>
<string>使用推送服务</string>
<key>NSMicrophoneUsageDescription</key>
<string>访问麦克风</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>访问相册</string>
三. 自定义设置(可选)
用户会话页面支持UI自定义
- 在导航栏区域,我们支持自定义导航栏区域的颜色及其字体颜色;
- 在会话页面区域,我们支持自定义会话区域的背景颜色、会话气泡颜色、会话字体颜色、提示气泡颜色、提示字体颜色、时间文字颜色;
- 在底部区域,我们支持自定义底部bottom背景颜色及输入框线条背景颜色;
- 其它部分,我们支持自定义相册导航栏的背景颜色及文字颜色、评价弹框中的文字颜色及按钮颜色、录音控件中的文字、商品详情展示中文字颜色(标题、详情、标签、发送);
注:代码未涉及到的自定义UI,可以通过替换SobotKit.bundle中的图片,达到你想要的效果
1. ZCKitInfo类说明(UI相关配置)
属性名称 | Y/N | 数据类型 | 说明 | 备注 |
---|---|---|---|---|
isOpenEvaluation | 可选 | BOOL | 点击返回时是否开启满意度评价 | 默认为NO 未开启 |
isCloseAfterEvaluation | 可选 | BOOL | 评价完人工是否关闭会话 | 默认为NO,未开启 |
isShowTansfer | 可选 | BOOL | 机器人优先模式,是否直接显示转人工按钮(值为NO时,会在人工无法回答时显示转人工按钮) | 默认为YES显示转人工按钮 |
unWordsCount | 可选 | NSString | 机器人优先模式,通过记录机器人未知说辞的次数设置是否直接显示转人工按钮 | 默认不设置 |
isOpenRecord | 可选 | BOOL | 是否开启语音功能 | 默认YES,开启 |
isShowNickName | 可选 | BOOL | 留言页面是否显示昵称输入框 | 默认NO不显示 |
isAddNickName | 可选 | BOOL | 非必须输入,留言时是否必须输入昵称 | 默认为NO |
titleFont | 可选 | UIFont | 顶部标题的font | |
listTitleFont | 可选 | UIFont | 页面返回按钮,输入框,评价提交按钮。Toast 提示语font | |
listDetailFont | 可选 | UIFont | 网络提醒font | |
customlistDetailFont | 可选 | UIFont | 评价页面中“是否有以下情况” font | |
listTimeFont | 可选 | UIFont | 消息提醒(转人工。客服接待等) font | |
chatFont | 可选 | UIFont | 聊天气泡中文字 font | |
voiceButtonFont | 可选 | UIFont | 录音按钮的文字 font | |
goodsTitle | 可选 | UIFont | 商品详情cell 中title的文字 font | |
goodsDetFont | 可选 | UIFont | 商品详情cell中摘要的文字 font | |
goodSendBtnColor | 可选 | UIColor | 商品详情cell中btn的背景色 | |
backgroundColor | 可选 | UIColor | 对话页面背景色 | |
customBannerColor | 可选 | UIColor | 自定义风格颜色:导航 | |
imagePickerColor | 可选 | UIColor | 相册导航栏的颜色 | |
imagePickerTitleColor | 可选 | UIColor | 相册导航栏的标题颜色 | |
leftChatColor | 可选 | UIColor | 左边聊天气泡的颜色 | |
rightChatColor | 可选 | UIColor | 右边聊天气泡的颜色 | |
leftChatSelectedColor | 可选 | UIColor | 左边气泡复制选中的颜色 | |
rightChatSelectedColor | 可选 | UIColor | 右边气泡复制选中的颜色 | |
backgroudBottomColor | 可选 | UIColor | 底部bottom的背景颜色 | |
commentoTherButtonBgColor | 可选 | UIColor | 评价普通按钮选中背景颜色和边框颜色 | |
commentCommitButtonColor | 可选 | UIColor | 评价(立即结束、取消)按钮文字颜色 | |
BgTipAirBubblesColor | 可选 | UIColor | 提示气泡的背景颜色 | |
videoCellBgSelColor | 可选 | UIColor | 语音cell选中的背景色 | |
LineRichColor | 可选 | UIColor | 富文本中线条颜色 | |
submitEvaluationColor | 可选 | UIColor | 提交评价按钮的文字颜色 | |
topViewTextColor | 可选 | UIColor | 顶部文字颜色 | |
leftChatTextColor | 可选 | UIColor | 左边气泡文字颜色 | |
rightChatTextColor | 可选 | UIColor | 右边气泡文字颜色 | |
timeTextColor | 可选 | UIColor | 时间文字的颜色 | |
tipLayerTextColor | 可选 | UIColor | 提示气泡的颜色 | |
serviceNameTextColor | 可选 | UIColor | 客服昵称颜色 | |
nickNameTextColor | 可选 | UIColor | 提示cell中客服昵称的文字颜色 | |
chatLeftLinkColor | 可选 | UIColor | 左边气泡中的链接颜色 | |
chatRightLinkColor | 可选 | UIColor | 右边气泡中链接颜色 | |
goodsTitleTextColor | 可选 | UIColor | 商品cell中title的文字颜色 | |
goodsTipTextColor | 可选 | UIColor | 商品cell中标签的文字颜色 | |
goodsDetTextColor | 可选 | UIColor | 商品cell中摘要的文字颜色 | |
goodsSendTextColor | 可选 | UIColor | 商品详情cell中发送的文字颜色 | |
isSetPhotoLibraryBgImage | 可选 | BOOL | 是否设置相册背景图片 | |
goodSendBtnColor | 可选 | UIColor | 商品发送按钮的背景色 | |
socketStatusButtonBgColor | 可选 | UIColor | 导航栏中“连接中”的背景色 | |
socketStatusButtonTitleColor | 可选 | UIColor | 导航栏中“连接中”的文字颜色 | |
notificationTopViewLabelFont | 可选 | UIFont | 通告标题的字体 | |
notificationTopViewLabelColor | 可选 | UIColor | 通告标题文字颜色 | |
notificationTopViewBgColor | 可选 | UIColor | 通告栏背景色 |
2. ZCLibInitInfo类说明
属性名称 | Y/N | 数据类型 | 说明 | 备注 |
---|---|---|---|---|
customInfo | 可选 | NSMutableDictionary | 自定义属性 | 以KEY-VALUE键值对存储 |
tel | 可选 | NSString | 用户手机号码 | 默认为空,用于客服工作台显示。该字段为可选择字段。 |
realname | 可选 | NSString | 用户姓名 | 默认为空,用于客服工作台显示,该字段为可选字段。 |
可选 | NSString | 用户邮箱 | 默认为空,用于客服工作台显示,该字段为可选字段。 | |
nickName | 可选 | NSString | 用户昵称 | 默认为空,用于客服工作台显示,该字段为可选字段。 |
weiChat | 可选 | NSString | 用户微信号码 | 默认为空,用于客服工作台显示,该字段为可选字段。 |
可选 | NSString | 用户微博号码 | 默认为空,用于客服工作台显示,该字段为可选字段。 | |
userSex | 可选 | NSString | 用户手机号码 | 默认为空,用于客服工作台显示。该字段为可选择字段。 |
userBirthday | 可选 | NSString | 用户的生日 | 默认为空,用于客服工作台显示,该字段为可选字段。传入格式:20170323 如果不是这个格式,初始化接口会给过滤掉 |
userRemark | 可选 | NSString | 备注 | 默认为空,用于客服工作台显示,该字段为可选字段。 |
face | 可选 | NSString | 用户的头像Url | 不设置,取默认值(SDK图片资源包中的用户默认头像)用于聊天页面中用户头像的,该字段为可选字段。 |
qqNumber | 可选 | NSString | 用户的QQ号码 | 用于客服工作台显示,该字段为可选字段。 |
avatarUrl | 可选 | NSString | 接入来源页Url | 标记用户从哪个浏览页面进入SDK,改字段为可选字段。 |
sourceTitle | 可选 | NSString | 接入来源页标题 | 标记用户浏览页面标题,该字段为可选字段。 |
sourceURL | 可选 | NSString | 接入来源页url | 该字段为可选字段。 |
自定义字段 | 可选 | NSString | 自定义字段名 | 以key/value的方式传入,用户可以自己命名参数名(参见示例)。 |
appKey | 必选 | NSString | App唯一标识 | 必须设置,不设置初始化不成功。 |
receptionistId | 可选 | NSString | 指定客服ID | 设置指定客服ID,客户可以在转人工的操作中直接转到指定的客服,不设置按默认的转人工流程执行。 |
tranReceptionistFlag | 可选 | int | 是否必须转入指定客服 | 转指定客服不在线,是否可以再转到其他客服(0 可转入其他客服 1 必须转入指定客服)。 |
userId | 可选 | NSString | 用户标识 | 对接用户可靠身份,不建议为null |
robotId | 可选 | NSString | 对接机器人ID | 可以对接指定机器人 |
skillSetId | 可选 | NSString | 对接技能组ID | 设置技能组ID之后,转人工不在弹技能组弹框,直接转到该技能组中的客服,不设置此字段按默认的转人工流程执行。 |
skillSetName | 可选 | NSString | 对接技能组名称 | 和对接的技能组ID要匹配,设置技能组昵称之后,转人工不在弹技能组弹框,直接转到该技能组中的客服,不设置此字段按默认的转人工流程执行。 |
serviceModdel | 可选 | NSString | 自定义接入模式 | 0 默认跟随系统设置 1仅机器人 2仅人工 3机器人优先 4人工优先 |
titleType | 可选 | NSString | 聊天页顶部标题自定义方式 | (0 默认 1企业名称 2.自定义字段) |
customTitle | 可选 | NSString | 聊天页顶部标题 | 自定义字段(如果传入优先使用该字段) |
scopeTime | 可选 | NSString | 历史记录时间范围 | 单位分钟(可设置有效范围:10分钟~48小时之间) |
customAdminHelloWord | 可选 | NSString | 自定义客服欢迎语 | 默认为空 |
customRobotHelloWord | 可选 | NSString | 自定义机器人欢迎语 | 默认为空 |
customUserTipWord | 可选 | NSString | 自定义用户超时提示语 | 默认为空 |
customAdminNonelineTitle | 可选 | NSString | 自定义客服不在线的说辞 | 默认为空 |
customAdminTipWord | 可选 | NSString | 自定义客服超时提示语 | 默认为空 |
customUserOutWord | 可选 | NSString | 自定义用户超时下线提示语 | 默认为空 |
isShowNotifitionTopView | 可选 | BOOL | 是否显示通告栏 | 默认不显示 |
isDismissNotifitionTopView | 可选 | BOOL | 点击通告栏是否隐藏通告 | 默认不隐藏 |
notifitionTitle | 可选 | NSString | 通告标题 | 如果传入的标题为空,不显示通告栏 |
notifitionIconUrl | 可选 | NSString | 通告icon的URL | 默认取SDK本地资源图片 |
notifitionaddressUrl | 可选 | NSString | 通告链接的URL地址 | 默认为空 |
3. 对接指定技能组
获取技能组编号
// 外部直接定义技能组(可选,如果传入技能组ID那么SDK内部转人工之后不在弹技能组的选择框,直接跳转到传入ID所对应的技能组中。)
// 如果选择传入技能组,根据传递的值转接到对应的技能组,不传不起作用
uiInfo.skillSetId = @"技能组ID";
4. 商品页咨询信息
// 商品的自定义类 ZCProductInfo 如果选择添加商品信息,请添加以下信息,其中标题"title"和页面地址url"link"是必
填字段,如果没有添加页面中是不会显示的。
ZCProductInfo *productInfo = [ZCProductInfo new];
//thumbUrl 缩略图地址
productInfo.thumbUrl = @"缩略图的Url";
// title 标题 (必填)
productInfo.title = @"标题";
// desc 摘要
productInfo.desc = @"摘要";
// label 标签
productInfo.label = @"标签";
// 页面地址url(必填)
productInfo.link = @"发送商品链接";
uiInfo.productInfo = productInfo;
5. 留言页面用户信息项自定义配置
您可在留言页中设置用户联系方式的各显示字段(显示和添加,可选)。
// 留言页面中是否显示昵称
uiInfo.isShowNickName = YES;
// 提交留言时,在选择显示昵称之后,选择昵称是否是必填项,如果是必填,昵称提交时不能为空。
uiInfo.isAddNickName = NO;
6. 获取未读消息数
//直接获取未读消息数
[[ZCLibClientgetZCLibClient]getUnReadMessage];
7. 对接机器人
获取机器人编号:
// 对接机器人ID(指定对接的机器人,如果不设置,取默认)
uiInfo.robotFlag = @"机器人ID";
8. 对接指定客服
获取指定客服ID
// 指定客服ID(指定对接的客服,如果不设置,取默认)
uiInfo.receptionistId = @"客服ID";
// 设置指定客服之后是否必须转入指定客服 (0可转入其他客服1必须转入指定客服 注意:如果设置为1,
当指定的客服不在线,不能再转接到其他客服)
uiInfo.tranReceptionistFlag = @"0";
附:智齿 iOS_SDK Git下载地址:https://github.com/ZCSDK/SobotKit