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;

实现代理中关于生命周期的方法,分别在clientViewWillAppearclientViewWillDisappear添加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 {
}

results matching ""

    No results matching ""

    results matching ""

      No results matching ""