Appearance
Are you an LLM? You can read better optimized documentation at /channels/app/permissions.md for this page in Markdown format
权限说明与应用市场审核
客户要按住说话、要拍张照片发给客服,APP 得先拿到麦克风和相机权限。
SDK 只会申请这两个权限
麦克风(发语音消息)和相机(直接拍摄发给客服),没有第三个。通知、定位、蓝牙、存储,SDK 一概不申请 —— 选照片和文件走系统选择器,任何 Android 版本都不需要存储权限。应用市场要求申报第三方 SDK 的权限清单时,按这两条填。
两个权限都只在客户主动点了对应功能、且尚未授权时才申请;客户不用语音和拍摄,SDK 从头到尾不发起任何权限申请。
你要做什么
iOS:在 Info.plist 里填好两条用途说明,见装进 iOS。系统的权限弹窗会把你写的说明显示出来,苹果会审核这句话写得够不够具体。
Android:不用做任何事,SDK 已经内置。下面说的是它内置了什么,以及你想改的话怎么改。
Android 上 SDK 做了什么
安卓系统的权限弹窗只说要什么权限,不说用来做什么。而应用市场要求申请敏感权限时同步告知用途 —— 这一条写在四部委《App 违法违规收集使用个人信息行为认定方法》里,华为、小米等应用市场的审核规则也各自明确要求。
所以 SDK 在调用系统权限申请之前,先弹一层说明,写清楚这次要麦克风还是相机、用来做什么:

客户点继续才走系统弹窗:

这层说明只在客户主动点了发语音、拍照这类功能时出现,不会在 APP 启动时弹,也不会反复弹。
想改说明文案
默认不用配,SDK 自带的话术是按上述要求写的。
只想换措辞,在配置里覆盖 permissionRationaleText,按权限分别写:
kotlin
HecongChatConfig("你的渠道ID").apply {
permissionRationaleText["microphone"] = "发送语音消息需要使用麦克风权限,用于录制您的语音内容。"
permissionRationaleText["camera"] = "拍摄照片或视频发送给客服需要使用相机权限。"
}只覆盖其中一个的话,另一个仍用 SDK 内置的话术。
想用自己的弹窗样式,接管整层:
kotlin
override fun onShowPermissionRationale(
kind: String,
callback: HecongPermissionRationaleCallback
): Boolean {
// kind 是 "microphone" 或 "camera"
// 用你自己的对话框展示说明,用户点确定调 callback.proceed(),点取消调 callback.cancel()
return true // 返回 true 表示你接管了,SDK 不再弹自己的层
}返回 false 时 SDK 继续弹内置的说明层。接管之后说明文案和交互全在你手里,要保证说明里写清了权限用途,这是审核要看的东西。
客户拒绝了权限会怎样
不会崩,也不会卡住。发语音、拍摄用不了,打字、发相册照片和文件照常。
拒绝之后再点同一个功能,说明层会再出现 —— 每次都由客户主动点击触发,不属于审核意义上的反复申请。客户如果在系统弹窗上选了「不再询问」,之后点继续不会再有系统弹窗:发语音会提示权限未开启,拍摄入口则没有反应。这时只能由客户自己去系统设置里打开,SDK 不会代跳设置页。
下一步
- 隐私合规与信息公示 —— 上架前还要在隐私政策里公示 SDK
- 装进 Android
- 装进 iOS