5.4 启动会话界面

通过简单地添加一个在线咨询按钮即可使用智能客服客户端功能,在按钮点击事件处理中加入启动会话界面的代码:

V5ChatViewController *chatViewController = [V5ClientAgent createChatViewController];
// 不显示底部栏(有底部栏的需加此配置) 
chatViewController.hidesBottomBarWhenPushed = YES;

/* 下面为会话界面配置,非必须,可根据需求自定义配置,均有默认值 */
// 会话界面的代理V5ChatViewDelegate
chatViewController.delegate = self; 
chatViewController.deviceToken = @"设备的deviceToken"; // 也可在config设置deviceToken
// 允许并设置消息铃声SystemSoundID 
chatViewController.allowSound = YES; 
chatViewController.soundID = 1007;
// 允许发送语音
chatViewController.enableVoiceRecord = YES; 
// 允许显示头像
chatViewController.showAvatar = YES;
// 头像圆角(0~20之间)
chatViewController.avatarRadius = 6;
// 每次下拉获取历史消息最大数量,默认10
chatViewController.numOfMessagesOnRefresh = 10;
// 开场显示历史消息数量,默认0(显示历史消息>0则无开场白)
chatViewController.numOfMessagesOnOpen = 10;
// 设置会话界面标题
chatViewController.title = @"V5客服"; // 设置标题,默认@“小五”
// 设置返回按钮标题(默认为前一页面标题)
UIBarButtonItem *myBackItem = [[UIBarButtonItem alloc] init]; 
myBackItem.title = @"返回";
self.navigationItem.backBarButtonItem = myBackItem;
// 设置开场白方式,启动会话前设置,默认ClientOpenModeDefault
// ClientOpenModeQuestion结合后台机器人培训内容可根据使用场景配置不同需求的开场消息
[chatViewController setClientOpenMode:ClientOpenModeDefault withParam:nil];

// 启动会话界面,使用导航模式推出视图
[self.navigationController pushViewController:(UIViewController *)chatViewController animated:YES];

如果SDK使用在iPad里,启动会话界面可采用PopoverViewController方式,以及限制横屏状态的处理方式,具体配置如下:

// 页面呈现方式presentType默认PresentType_Push, PopoverViewController下改为PresentType_Popover
chatViewController.presentType = PresentType_Popover;
chatViewController.view.transform = CGAffineTransformMakeScale(0.7, 0.7);

//使用UIPopoverPresentationController开启对话
chatViewController.modalPresentationStyle = UIModalPresentationPopover;
chatViewController.preferredContentSize = CGSizeMake(400, 500);
UIPopoverPresentationController* popover = chatViewController.popoverPresentationController;
//设置弹出的基准视图
popover.sourceView = self.button;
popover.sourceRect = self.button.bounds;//打开页面的入口按钮的bunds
popover.delegate = self;
[self presentViewController:chatViewController animated:YES completion:nil];

// 或者使用`UIPopoverController`,iOS9.0以后不再建议使用
// UIPopoverController* popover = [[UIPopoverController alloc] initWithContentViewController:chatViewController];
// [popover setBackgroundColor:[UIColor colorWithRed:235.0/255 green:235.0/255 blue:235.0/255 alpha:1]];
// popover.popoverContentSize = CGSizeMake(chatViewController.view.frame.size.width, chatViewController.view.frame.size.height);
// [popover presentPopoverFromRect:CGRectMake(0,618,1024,50) inView:self.view permittedArrowDirections:UIPopoverArrowDirectionDown animated:YES];

/* 需要手动控制屏幕方向时使用,比如iPad横屏情况 */
// 需要**限制横屏**打开时(UIInterfaceOrientationMaskLandscape),为解决发送图片时选择图库打开页面异常问题,需要在AppDelegate做如下处理
- (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window {
    if ([V5ClientAgent shareClient].isPhotoLibrary) { //必须,否则打开图库异常
        return UIInterfaceOrientationMaskAll;
    } else {
        return UIInterfaceOrientationMaskLandscape;//or UIInterfaceOrientationMaskAll 允许全部屏幕方向
    }
}

若开启对话页面非导航模式,则需使用present方式打开

@interface ViewController () {
    // 添加的导航控制器
    UINavigationController *navVC;
}
@end

//......

// 若非导航模式,使用present方式开启,添加导航控制器包裹chatViewController,并加入关闭页面所需的按钮
navVC = [[UINavigationController alloc] initWithRootViewController:chatViewController];
chatViewController.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(closeChat:)];
[self presentViewController:navVC animated:YES completion:nil];

//......

// done按钮点击关闭页面
- (void)closeChat:(id)sender {
    [navVC dismissViewControllerAnimated:YES completion:nil];
}

此外,页面的代理包含的方法如下,有相应需求的可使用,非必须:

@protocol V5ChatViewDelegate <NSObject> @optional
/**
 * 即将打开会话视图
 */
- (void)clientViewWillAppear;

/**
 * 会话视图打开后
 */
- (void)clientViewDidAppear;

/**
 * 即将关闭会话视图
 */
- (void)clientViewWillDisappear;

/**
 * 关闭会话视图后
 */
- (void)clientViewDidDisappear;

/**
 * 用户点击链接,包括普通URL(HTML超链接)、图文链接、电话号码
 * @param url 链接地址
 */
- (void)userClickLink:(NSString *)url linkType:(KV5LinkType)linkType;

/**
 * 用户点击位置消息
 * @param lat 纬度
 * @param lng 经度
 */
- (void)userClickLocationWithLatitude:(double)lat longitude:(double)lng;

/**
 * 用户点击图片消息
 * @param image 图片
 * @param url 图片链接
 */
- (void)userClickImageWithImage:(UIImage *)image picUrl:(NSString *)url;

/**
 * 用户在会话视图中收到消息
 * @param message 消息对象
 */
- (void)clientDidReceiveMessage:(V5Message *)message;

/**
 * 用户将要发送消息(可在此向坐席透传自定义参数,参考Demo)
 * @param message 将要发送的消息(开发者可修改替换发送内容,消息类型和方向不可修改)
 * @return 修改处理过的消息 
 */
- (V5Message *)userWillSendMessage:(V5Message *)message;

/**
 * 客户服务状态改变(可在此相应改变对话页标题,参考Demo)
 *
 * @param status KV5ClientServingStatus,详见V5Defination.h中的定义
 */
- (void)clientViewController:(V5ChatViewController *)chatVC ServingStatusChange:(KV5ClientServingStatus)status;
@end

注: 点击事件有默认执行动作,代理设置后会把默认动作覆盖转而执行代理方法内的动作。

results matching ""

    No results matching ""

    results matching ""

      No results matching ""