5.6 对话界面代理
@protocol V5ChatViewDelegate <NSObject> @optional
/**
* 即将打开会话视图
*/
- (void)clientViewWillAppear;
/**
* 会话视图打开后 */
- (void)clientViewDidAppear;
/**
* 即将关闭会话视图 */
- (void)clientViewWillDisappear;
/**
* 关闭会话视图后 */
- (void)clientViewDidDisappear;
/**
* 客户端会话连接成功 */
- (void)onClientViewConnect;
/**
* 用户点击链接,包括普通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;
/**
* 用户将要发送消息 *
* @param message 将要发送的消息(开发者可修改替换发送内容,消息类型和方向不可修改) *
* @return 修改处理过的消息 */
- (V5Message *)userWillSendMessage:(V5Message *)message;
/**
* 服务状态改变(正在排队、机器人服务、人工服务) *
* @param status KV5ClientServingStatus */
- (void)clientViewController:(V5ChatViewController *)chatVC ServingStatusChange:(KV5ClientServingStatus)status;
/**
* 点击底部功能按钮
*
* @param tag 点击按钮的标签,包括(可到VClient.bundle/v5_menu_function.plist自定义增减):
* HOT_QUESTION //常见问题
* RELATIVE_QUESTION //相关问题
* PICTURE //图片
* CAMERA //拍照
* TRANSFER_WORKER //人工客服
*
* @return 返回是否消费此事件(返回YES则不响应默认点击效果,由此回调处理)
*/
- (BOOL)clientViewController:(V5ChatViewController * _Nonnull)chatVC selectMoreFunctionOfTag:(NSString * _Nonnull)tag;
@end
使用以上代理可以实现更多自定义功能,比如:
1.为消息添加自定义参数
用户即将发送的消息可以通过
V5ChatViewDelegate
协议中实现方法:- (V5Message *)userWillSendMessage:(V5Message *)message
获取到即将发送的消息,并为消息加 上自定义参数,例如:
- (V5Message *)userWillSendMessage:(V5Message *)message {
if (userViewSomething) { //用户浏览某商品的标识
message.customContent = @{@"用户等级": @"VIP",
@"用户积分": @"300",
@"商品名称": @"牛仔裤",
@"商品价格": @"¥168.00"};
userViewSomething = NO; //标识置为NO,单条消息有效
}
return message; //必须返回此消息对象
}
- 2.根据客户服务状态改变界面标题
/**
* 客户服务状态改变(可在此相应改变对话页标题)
* @param status KV5ClientServingStatus
*/
- (void)clientViewController:(V5ChatViewController *)chatVC
ServingStatusChange:(KV5ClientServingStatus)status {
switch (status) {
case ServingStatus_queue: // 正在排队等待人工,当前为机器人服务
case ServingStatus_robot: // 机器人服务中
chatVC.title = @"机器人服务中";
break;
case ServingStatus_worker:
chatVC.title = [NSString stringWithFormat:@"%@为您服务",
[V5ClientAgent shareClient].config.workerName];
break;
case ServingStatus_inTrust:
chatVC.title = @"机器人托管中";
break;
default:
break;
}
}
- 3.解决第三方输入框兼容问题
使用了IQKeyboardManager
的App在接入本SDK后,对话界面弹出软键盘时会有异常,这时只需要关闭IQKeyboardManager的功能即可,具体方法如下:
开启会话节面前需要设置V5ChatViewDelegate
代理:
// 会话界面的代理V5ChatViewDelegate
chatViewController.delegate = self;
实现代理中关于生命周期的方法,分别在clientViewWillAppear
和clientViewWillDisappear
添加IQKeyboardManager
的关闭和开启的代码:
#pragma mark - V5ChatViewDelegate -
/**
* 即将打开会话视图
*/
- (void)clientViewWillAppear {
//取消输入键盘插件
[IQKeyboardManager sharedManager].enable = NO;
[IQKeyboardManager sharedManager].enableAutoToolbar = NO;
}
/**
* 会话视图打开后
*/
- (void)clientViewDidAppear {
}
/**
* 即将关闭会话视图
*/
- (void)clientViewWillDisappear {
//开启输入键盘插件
[IQKeyboardManager sharedManager].enable = YES;
[IQKeyboardManager sharedManager].enableAutoToolbar = YES;
}
/**
* 关闭会话视图后
*/
- (void)clientViewDidDisappear {
}
/**
* 会话连接成功
*/
- (void)onClientViewConnect {
}