Appearance
Are you an LLM? You can read better optimized documentation at /channels/app/embed.md for this page in Markdown format
把聊天嵌进自己的页面
想让客服对话带上你自己的标题栏,或者和别的内容放在同一屏,用这一档。
什么时候需要这一档
这是四种形态里最底层的一档:SDK 只给你一个视图,容器、标题栏、生命周期都由你安排。适合对话只占屏幕一部分、旁边还有别的内容的场景。
先确认你真的需要它。 只是想把客服做成一个 Tab、或者带上自己的标题栏,Android 用 HecongChatFragment、iOS 直接摆 HecongChatViewController 就够了,选文件、权限、返回键这些 SDK 内部已经处理好,做法见聊天页的四种形态。
自己摆 HecongChatView 的代价是有几个宿主回调要你转发。漏掉哪个的症状都比较隐蔽,下面逐条列出来。
Android
把 HecongChatView 放进你的布局,然后转发四件事。
转发选择文件的结果
kotlin
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
chatView.onActivityResult(requestCode, resultCode, data)
}不转发的症状:客户点发图片完全没反应,选完照片回来什么也没发生。
转发权限申请的结果
kotlin
override fun onRequestPermissionsResult(
requestCode: Int, permissions: Array<String>, grantResults: IntArray
) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
chatView.onRequestPermissionsResult(requestCode, permissions, grantResults)
}不转发的症状:客户在权限弹窗上点了允许,录音还是用不了。
前后台联动
kotlin
override fun onStart() { super.onStart(); chatView.onHostStart() }
override fun onStop() { super.onStop(); chatView.onHostStop() }不转发的症状最隐蔽:合从会一直认为这位客户在线,离线推送一条都不发,工作台里他的在线状态长亮。原因是 WebView 里的心跳在后台照常应答,合从没法凭连接判断人还在不在看屏幕。
必须用 onStop,不要用 onPause
分屏、盖弹窗、下拉通知栏都会触发 onPause,而那时客户还看着屏幕。在 onPause 里断开等于人没走却被判成离开。
释放
kotlin
override fun onDestroy() { chatView.destroy(); super.onDestroy() }键盘不用你管
SDK 会在视图挂载时把当前 Activity 的软键盘模式设成 adjustResize,离开时还原成你原来的值。你不需要改 AndroidManifest.xml,也不用担心影响 APP 里的其他页面。
iOS
iOS 用 HecongChatViewController,自己嵌进容器或者做成子控制器。前后台切换由 SDK 内部处理,你不需要转发任何东西。
键盘避让和安全区适配同样在 SDK 内部完成。
标题栏不会重复
SDK 默认不画自己的标题栏,因为它假设你的页面已经有导航栏了。所以你在自己的布局里加标题栏,不用做任何设置,也不会出现上下两条。

反过来,如果嵌入的位置没有导航栏、你希望客服界面自己画一条,在配置里传:
kotlin
config.extraQuery["hh"] = "0"标题栏上显示的昵称头像会随会话变化(会话前是渠道身份,客服接起后变成客服本人),自己画的话这些数据从回调里拿,见接口速查。
用了自己的返回按钮就要接一下
你自己画的标题栏上的返回按钮,点击时先问一下 SDK:
kotlin
if (!chatView.handleBackPressed()) {
finish() // SDK 说没有可关的层,才真的退出
}swift
if !chat.handleBackPressed() {
navigationController?.popViewController(animated: true)
}返回 true 表示 SDK 关掉了自己内部的一层(比如客户正开着图片预览),这时你不要再退出页面。
Android 的实体返回键同理,在 onBackPressed 里先转发。
不接的症状:客户正在看客服发来的大图,点返回直接被踢出整个客服页面。
下一步
- 客户不在 APP 时的消息推送 —— 前后台联动接好之后才能用
- 接口速查