Appearance
装进 Android
加一行依赖、写两行代码,APP 里就有了客服入口。
开始之前
- 一个渠道 ID,工作台 App 渠道的 SDK 接入 页把它嵌在初始化代码里,也可以在 开发者 页的 接入参数 卡单独复制,见创建 App 渠道
- APP 的
minSdk不低于 21(Android 5.0) - 工程能从 Maven Central 拉依赖
动手之前可以先跑一遍示范 App:扫码装上,填进你的渠道 ID 就连到你的工作台。先确认渠道和账号这一侧是通的,之后自己集成再出问题,范围就缩小到你的工程配置。
操作步骤
1. 确认仓库里有 Maven Central
合从的 SDK 发布在 Maven Central。用 Android Gradle Plugin 7.0 及以上的工程,仓库声明在 settings.gradle.kts 的 dependencyResolutionManagement 里;更早的工程在根 build.gradle 的 allprojects 里。两处都是同一件事:确保 mavenCentral() 在列表中。
新建的 Android 工程默认就有,多数情况下这一步不用改动。
2. 加依赖
在 APP 模块的 build.gradle.kts 里加一行:
kotlin
dependencies {
implementation("com.aihecong:hecong-chat-sdk:0.6.4")
}用 Groovy DSL 的工程写成 implementation 'com.aihecong:hecong-chat-sdk:0.6.4'。
已发布的版本都列在 Maven Central 制品页。
同步 Gradle,依赖就位。
3. 登记渠道 ID
在 APP 启动流程里调一次 configure,把渠道 ID 交给 SDK:
kotlin
HecongChat.configure(this, HecongChatConfig("你的渠道ID"))这一步只登记参数,不产生任何网络请求,也不收集任何信息。
放在用户同意隐私政策之后
虽然这一步本身零联网,仍建议放在用户同意隐私政策之后再调用。国内应用市场审核会检查 SDK 初始化的时机,把所有第三方 SDK 的初始化统一放在同意之后,是通过审核最省事的做法。
想让客户第一次点开客服更快,configure 之后可以再调一次 HecongChat.prewarm(this),SDK 会提前把聊天页的首屏文件下到缓存。这一步会联网,必须放在用户同意隐私政策之后;不调也能正常用,只是第一次打开要多等一下。
4. 打开客服
在「联系客服」的点击事件里:
kotlin
HecongChatActivity.start(this, HecongChatConfig("你的渠道ID"))到这里就能用了。聊天页整页打开,顶部一条标题栏写着「在线客服」,左上角是返回 —— 标题可以改成你自己的,配置项见聊天页的四种形态。
你不需要在 AndroidManifest.xml 里声明这个页面,也不需要配 windowSoftInputMode,SDK 的 manifest 里已经声明好,合并到你的 APP 时自动生效。选文件、拍照、实体返回键、前后台切换这些系统回调,这一档全部内置,你不用转发。
打开客服还有另外三种方式:半屏弹层、嵌进自己的 Tab、整屏沉浸。调用方法各不相同,效果对比见聊天页的四种形态 —— 四档共用同一套配置,换档不影响你已经接好的东西。
5. 声明要用到的权限
权限需要你在自己的 AndroidManifest.xml 里声明,SDK 自身不声明任何权限:
xml
<!-- 要让客户按住说话发语音,这两条必须一起声明 -->
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<!-- 要让客户直接拍照或拍视频发给客服 -->
<uses-permission android:name="android.permission.CAMERA" />按功能声明,用到哪个声明哪个。只让客户打字、发相册照片和文件的话,一条都不用声明:选照片走系统选择器,不需要存储权限。漏声明不会崩,症状是对应入口失效:没声明相机,拍摄入口点了没反应;没声明麦克风,发语音会提示权限未开启。
语音那两条要成对声明
MODIFY_AUDIO_SETTINGS 不能省。系统挑录音设备时会同时看这两条,少一条就当作没有可用的麦克风,而表现很容易看岔:客户点了 允许,界面仍然提示麦克风被占用,重试、重启 APP 都没用。缺的是安装包里的声明,运行时怎么操作都补不回来。
它是安卓的普通权限,装上就有,不弹窗、也不采集任何东西。
国内应用市场对权限审核得很严,这一块 SDK 已经按审核要求做好,你不用写代码:
- 申请前先弹用途说明:审核要求申请敏感权限时同步告知用途,SDK 在系统弹窗之前先弹一层说明,写清这次要什么权限、用来做什么
- 只在客户点了功能时申请:不在启动时弹,被拒后也不自动重试
- SDK 自身清单里零权限声明:不会往你的 APP 里带进任何多余权限
审核如果要求说明弹窗用你自己的文案或样式,可以改,见权限说明与应用市场审核。
多进程 APP 要先做一步
你的 APP 如果是多进程架构,需要在任何 WebView 创建之前给非主进程设数据目录后缀,否则会直接崩溃。做法见兼容性核对。
验证接入成功
把 APP 装到手机或模拟器上,点开客服,你应该看到一个带欢迎语的对话界面。发一条消息,在客服工作台的对话列表里能看到它。
App 渠道的会话不能在浏览器里验证,原因见 APP 接入概述。
用 Java 写
SDK 的公共接口都可以从 Java 直接调用:
java
import com.hecong.chatsdk.HecongChat;
import com.hecong.chatsdk.HecongChatActivity;
import com.hecong.chatsdk.HecongChatConfig;
// APP 启动时
HecongChatConfig config = new HecongChatConfig("你的渠道ID");
HecongChat.configure(this, config);
// 打开客服
HecongChatActivity.start(this, config);常见问题
编译时找不到 com.aihecong:hecong-chat-sdk
症状:Gradle 同步报 Could not find com.aihecong:hecong-chat-sdk:0.6.4。
成因:仓库列表里没有 mavenCentral(),或者用了国内镜像、公司内部代理而对方还没同步到这个版本。
解决:先按步骤 1 确认 mavenCentral() 在列表里。用镜像或内部代理的工程,按报错里 Searched in the following locations 列的地址分辨具体是哪一种,见接入问题排查。
点开客服是一片空白
症状:客服页面打开了,但里面什么都没有。
成因:多数是网络问题,设备连不上合从的服务,或者被 APP 里的网络拦截库挡住了。
解决:确认设备网络正常,检查 APP 里有没有对 WebView 请求做拦截或代理。断网时 SDK 会显示一张带重试的提示页,看到那张页面说明 SDK 本身正常。
客户在 APP 里退出登录后,下一个人看到了上一个人的记录
症状:同一台设备上换个账号登录,客服对话里还是上一位的历史消息。
成因:退出登录时没有通知 SDK 解绑身份。
解决:在退出登录的流程里调 HecongChat.resetUser(),见传客户资料与退出登录。
上线前对照一遍
装通了只是第一步,下面这些漏掉的症状都比较隐蔽,上线前逐条确认:
- [ ] 退出登录时调了
resetUser()。不调的话,下一个在同一台设备登录的人会看到上一位的聊天记录(做法) - [ ] 多进程 APP 设了 WebView 数据目录后缀,不设会直接崩溃(做法)
- [ ] 真机切到后台,工作台里这位客户变成离线。不变说明前后台事件没接,离线推送一条都不会发(做法)
- [ ] 配了离线消息通知的话,服务端真收到过一次回调(怎么自测)
- [ ] 要做未读红点的话,调了
startUnreadTracking()(做法) - [ ] 用到语音或拍照的话,
AndroidManifest.xml里声明了对应权限(做法) - [ ] 提交应用市场前,按隐私合规与信息公示把 SDK 公示信息填进你的隐私政策 —— 漏了会被打回
下一步
- 传客户资料与退出登录 —— 让客服知道来的是哪位会员
- 未读消息与红点 —— 在 APP 入口上显示未读数
- 接口速查 —— 全部配置项与回调
- 接入问题排查 —— 装不上、点开空白、红点不亮时对照这一页
- 隐私合规与信息公示 —— 上架前要在自己的隐私政策里公示什么