应用权限配置

晓葆 SDK 的部分功能需要设备权限。本文说明各权限的用途, 以及何时请求权限可获得最佳用户体验。

权限概述

SDK 仅在相关功能实际被触发时才请求权限,不会在初始化阶段批量申请。 你也可以选择在合适的时机提前申请,以减少功能使用时的等待。

Android 权限清单

权限功能类型
INTERNETAPI 请求、数据上传下载普通权限(自动授予)
ACCESS_NETWORK_STATE检测网络状态,决定离线/在线策略普通权限(自动授予)
CAMERA到站二维码扫描核验危险权限(需运行时申请)
ACCESS_FINE_LOCATION附近健康站查询(精确位置)危险权限(需运行时申请)
ACCESS_COARSE_LOCATION附近健康站查询(模糊位置,精确位置拒绝后降级)危险权限(需运行时申请)

AndroidManifest.xml 中声明:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

iOS 权限清单

Info.plist 中添加权限说明字符串(App Store 审核要求):

Key功能
NSCameraUsageDescription到站二维码扫描
NSLocationWhenInUseUsageDescription查找附近健康站
<!-- Info.plist -->
<key>NSCameraUsageDescription</key>
<string>扫描到站码完成到站核验</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>获取附近的晓葆健康站列表</string>

请求时机建议

权限建议请求时机
相机权限用户点击「到站」/ 「出示到站码」按钮时
位置权限用户进入「附近健康站」页面时,展示权限说明后请求

用户拒绝后的处理

SDK 在权限被拒绝时不会强制跳转设置页,而是展示友好的说明弹窗, 并提供「去设置」按钮引导用户手动开启。

你可以通过主题配置自定义此弹窗的文案,也可以完全接管权限申请逻辑:

// 完全接管权限申请,SDK 不再自动请求
XiaobaoSDK.init(
    ...,
    permissionDelegate = object : XiaobaoPermissionDelegate {
        override fun requestCamera(onResult: (Boolean) -> Unit) {
            // 你的自定义请求逻辑
            myRequestPermission(Manifest.permission.CAMERA) { granted ->
                onResult(granted)
            }
        }
    }
)