PAYATHON 2026

支付宝支付SDK读取传感器列表导致应用商店审核被驳回

支付阿杰

结论

调用来自支付宝安全风控组件 APSecuritySdk,并非应用业务代码直接读取传感器列表。通常无法通过删除权限或修改 AndroidManifest.xml 阻止该调用,因为 SensorManager.getSensorList() 一般不需要声明传感器权限。

能否彻底移除这项调用,取决于支付宝 SDK 的版本及其官方配置能力。如果支付宝官方文档没有明确说明,不建议删除相关类、修改 SDK 字节码,或通过混淆规则强行裁剪组件。这些操作可能导致支付风控、签名校验或支付流程异常。

处理审核问题时,需要同时做好两件事:

  1. 升级或更换支付宝当前提供的合规版本,并向支付宝技术支持确认,是否有关闭传感器列表采集的配置,或不包含安全组件的依赖方案。
  2. 在用户同意隐私政策前,不初始化、不预加载、不调用支付宝 SDK。同时在隐私政策和第三方 SDK 清单中如实披露”获取设备传感器列表”的行为。

只补充隐私政策未必能解决驳回。如果检测结果显示 SDK 在用户同意隐私政策前调用了 getSensorList(),应用商店仍可能将其认定为违规采集。

为什么删除权限没有作用

调用栈中的关键路径是:

android.hardware.SensorManager.getSensorList()
com.alipay.apmobilesecuritysdk.face.APSecuritySdk

这表明调用发生在支付宝移动安全组件内部。getSensorList() 获取的是设备支持的传感器清单,例如设备是否配有加速度计、陀螺仪,以及这些传感器的基本属性。它不等同于持续读取传感器的测量值。

在多数 Android 版本中,应用不需要额外申请运行时权限就能查询传感器列表。因此,删除以下权限通常不能阻止这项调用:

<!-- 删除这些权限不能阻止 getSensorList() -->
<uses-permission android:name="android.permission.BODY_SENSORS" />
<uses-permission android:name="android.permission.ACTIVITY_RECOGNITION" />

BODY_SENSORS 等权限控制的是特定传感器数据的访问,并不控制所有传感器清单查询。应用商店的合规检测会关注实际发生的 API 调用,不只检查 Manifest 中声明了哪些权限。

建议的处理步骤

1. 确认实际集成版本和依赖来源

先确认支付宝支付 SDK 是通过 AAR 直接引入,还是通过 Maven 或 Gradle 引入,同时检查项目中是否重复包含旧版安全组件。

dependencies {
    implementation files("libs/alipaysdk.aar")
}

如果使用 Gradle 依赖,可以查看完整的依赖关系:

./gradlew app:dependencies

重点搜索以下包名:

com.alipay.sdk
com.alipay.apmobilesecuritysdk

在无法确认兼容性的情况下,不要自行排除 apmobilesecuritysdk。只有支付宝官方明确说明该组件可以独立排除时,才应按照官方文档调整依赖。

2. 获取并验证支付宝 SDK 的合规版本

联系支付宝开放平台技术支持时,应提供以下信息:

  • 当前 SDK 的准确版本号和下载来源;
  • 完整的检测调用栈;
  • OPPO、小米的审核驳回截图或检测报告;
  • API 调用发生在用户同意隐私政策之前还是之后;
  • 应用启动时是否存在预初始化支付宝 SDK 的代码。

还需要请支付宝明确确认以下问题:

  • 当前版本是否支持关闭传感器列表读取;
  • 是否有更新的隐私合规版本;
  • 相关信息是否会上传、保存或共享;
  • 实际采集的字段、使用目的和处理方式;
  • 官方建议使用的隐私政策披露文本。

不要直接在审核说明中声称”信息仅在本地处理”或”不会上传”。除非支付宝官方材料可以证明,否则这些说法可能与 SDK 的实际行为不符。

3. 将 SDK 调用延迟到用户同意隐私政策之后

检查 Application、ContentProvider、启动页和支付模块的静态代码块,确认其中是否存在提前初始化。支付宝支付最好等到用户主动发起支付时再调用。

下面是一个简化的 Kotlin 示例:

object PrivacyConsentManager {
    fun hasConsent(context: Context): Boolean {
        return context
            .getSharedPreferences("privacy", Context.MODE_PRIVATE)
            .getBoolean("privacy_consent", false)
    }

    fun saveConsent(context: Context) {
        context
            .getSharedPreferences("privacy", Context.MODE_PRIVATE)
            .edit()
            .putBoolean("privacy_consent", true)
            .apply()
    }
}

支付入口应先检查授权状态:

fun startAlipay(activity: Activity, orderInfo: String) {
    if (!PrivacyConsentManager.hasConsent(activity)) {
        showPrivacyDialog(activity)
        return
    }

    Thread {
        val alipay = PayTask(activity)
        val result = alipay.payV2(orderInfo, true)

        activity.runOnUiThread {
            handlePayResult(result)
        }
    }.start()
}

用户明确同意后再继续支付流程:

private fun onPrivacyAccepted(
    activity: Activity,
    orderInfo: String
) {
    PrivacyConsentManager.saveConsent(activity)
    startAlipay(activity, orderInfo)
}

这段代码只演示如何控制调用时机。实际支付代码仍需遵循支付宝 SDK 的接入文档,并确保订单签名在服务端完成。

4. 排查自动初始化组件

部分 SDK 可能通过 ContentProvider 在 Application.onCreate() 之前自动初始化。可以检查合并后的 Manifest:

app/build/intermediates/merged_manifests/

也可以在 Android Studio 中打开 AndroidManifest.xml,切换到 Merged Manifest 查看第三方组件。

如果发现支付宝组件声明了用于自动初始化的 Provider,不要直接删除。应先向支付宝确认是否允许关闭,以及关闭后应通过哪个公开 API 手动初始化。未经确认直接移除,可能导致支付或安全校验异常。

5. 在真实设备上重新检测

完成整改后,至少验证以下场景:

  • 首次安装,尚未展示隐私政策;
  • 已展示隐私政策,但用户尚未同意;
  • 用户拒绝隐私政策;
  • 用户同意后进入首页,但尚未使用支付;
  • 用户主动进入收银台并调用支付宝支付;
  • 支付成功、取消和失败。

理想的检测结果是:用户同意隐私政策前,支付宝 SDK 不会触发传感器查询;用户同意后,相关调用只发生在必要的业务场景中。

隐私政策应如何描述

建议在”第三方 SDK 清单”中单独列出支付宝支付 SDK,不要只用”设备信息”概括其处理内容。

可以参考以下表述,并根据支付宝最新提供的隐私说明进行核对和修改:

支付宝支付 SDK
第三方主体:支付宝(中国)网络技术有限公司
使用目的:为用户提供支付宝支付服务,并用于支付安全保障及风险识别。
处理的信息:设备标识信息、网络信息、设备基础信息,以及设备支持的传感器列表信息。实际处理范围以支付宝支付 SDK 的运行行为及其官方隐私说明为准。
调用场景:用户同意本应用隐私政策后,在用户主动选择支付宝支付或进入相关支付流程时调用。
处理方式:由支付宝支付 SDK 按其隐私政策处理。
隐私政策链接:填写支付宝官方提供的、与当前 SDK 对应的有效链接。

如果已确认 SDK 只查询传感器类型和基本属性,可以补充说明:

传感器列表信息是指设备支持的传感器类型及相关基础属性,不表示应用持续读取加速度、方向或运动轨迹等实时传感器数据。

只有在实际检测或支付宝官方确认后,才能使用这句话。如果 SDK 还调用了 registerListener() 等方法注册传感器监听器,就不能将其描述为”仅查询列表”。

应用商店审核说明示例

提交审核时,可以使用更具体的说明:

检测报告中的 SensorManager.getSensorList() 由应用集成的支付宝支付 SDK 安全风控组件调用,调用栈包含 com.alipay.apmobilesecuritysdk.face.APSecuritySdk。应用自身业务代码未主动读取实时传感器测量数据。

该 SDK 用于向用户提供支付宝支付能力及支付安全风险识别。应用已在隐私政策和第三方 SDK 清单中披露相关信息处理行为,并确保用户同意隐私政策后才进入支付宝 SDK 的调用流程。用户未同意或拒绝隐私政策时,应用不会主动初始化或调用支付宝支付功能。

当前使用版本:填写准确版本号。
触发路径:填写实际页面路径,例如”商品详情 > 提交订单 > 选择支付宝支付”。
隐私政策位置:填写应用内访问路径和网页链接。
SDK 官方隐私说明:填写支付宝提供的有效链接。

提交时最好同时附上:

  • 用户首次启动时的隐私弹窗截图;
  • 第三方 SDK 清单截图;
  • 支付功能触发路径;
  • 当前支付宝 SDK 的版本信息;
  • 整改前后的合规检测报告;
  • 支付宝技术支持对采集范围或关闭能力的回复。

不建议采用的处理方式

不要通过以下方式规避检测:

# 不要仅为通过审核而删除支付宝安全组件
-assumenosideeffects class android.hardware.SensorManager {
    *** getSensorList(...);
}

也不要采取以下做法:

  • 修改支付宝 AAR 内的字节码;
  • 使用 Hook 让 getSensorList() 返回空列表;
  • 删除用途不明确的支付宝类或 Provider;
  • 在隐私政策中只写”可能收集设备信息”;
  • 将 SDK 行为描述为应用完全无法控制;
  • 在没有依据时声称相关信息不会上传或保存。

这些操作既可能破坏支付功能,也可能被认定为刻意规避合规检测。

注意事项

隐私披露、调用时机和最小必要原则都需要满足。建议按以下顺序处理:升级到合规版本,阻止用户同意前调用,准确披露相关信息,重新检测并提交证据。

如果升级后,SDK 的自动初始化组件仍会在用户同意隐私政策前触发调用,应将完整日志和最小复现工程提交给支付宝技术支持。仅修改审核说明通常无法解决这种问题,需要支付宝提供关闭自动初始化的正式方案或修复版本。

备注:内容仅供参考。