iOS SDK 接入

一. 注册智齿账号

请先确保已注册智齿客服账号(www.sobot.com)。

1. 获取appKey

<管理后台-设置-支持渠道-APP>

二. 下载智齿SDK

点击下载最新最新SDK包。

<iOS SDK V2.2.2>

<安卓SDK V2.2.2>

三. 快速集成

一. 将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 用户姓名 默认为空,用于客服工作台显示,该字段为可选字段。
email 可选 NSString 用户邮箱 默认为空,用于客服工作台显示,该字段为可选字段。
nickName 可选 NSString 用户昵称 默认为空,用于客服工作台显示,该字段为可选字段。
weiChat 可选 NSString 用户微信号码 默认为空,用于客服工作台显示,该字段为可选字段。
weiBo 可选 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

results matching ""

    No results matching ""