You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firebase App Check仅单设备可用 其余设备解码Token失败问题求助

问题根因及排查解决步骤

  • 依赖版本兼容问题
    你当前使用的firebase-appcheck-safetynet:16.0.0-beta02属于早期测试版本,存在已知的App Check Token生成截断、无效值返回的兼容bug,仅部分系统版本/设备的SafetyNet调用逻辑可以适配。一加8T刚好符合适配条件,其余设备生成的Token不完整,就会触发云函数侧的JWT解码失败错误。
    解决方案:
    升级Firebase BOM到最新稳定版,同时将App Check provider替换为已正式替代SafetyNet的Play Integrity提供商(或至少升级到appcheck-safetynet的正式稳定版),示例依赖配置如下:

    implementation platform('com.google.firebase:firebase-bom:32.7.0')
    implementation 'com.google.firebase:firebase-appcheck-playintegrity'
    implementation 'com.google.firebase:firebase-analytics-ktx'
    implementation 'com.google.firebase:firebase-messaging'
    implementation 'com.google.firebase:firebase-crashlytics-ktx'
    implementation 'com.google.firebase:firebase-functions-ktx'
    implementation 'com.google.firebase:firebase-config-ktx'
    

    对应初始化代码调整为:

    private fun initFirebaseAppCheck() {
        FirebaseApp.initializeApp(this)
        FirebaseAppCheck.getInstance().installAppCheckProviderFactory(
            PlayIntegrityAppCheckProviderFactory.getInstance()
        )
    }
    
  • Google Play服务版本不达标
    App Check的SafetyNet/Play Integrity校验要求设备的Google Play服务版本不低于21.0.0,校验失败的设备大概率Play服务版本过低,无法正常生成有效Token。可在测试设备的设置-应用-Google Play服务中查看版本号,升级到最新版即可验证。

  • 签名配置问题
    如果你开启了Google Play应用签名,需要将Google Play控制台中「应用完整性」页面的SHA-256签名指纹,填写到Firebase控制台App Check的Play Integrity/SafetyNet配置中,仅填写本地打包的keystore指纹会导致只有你本地直接打包安装的设备(比如一加8T)可以通过校验,从Play商店下载的安装包签名和本地不一致,无法生成有效Token。

  • 调试白名单配置问题
    如果你之前在Firebase App Check控制台添加过一加8T的调试Token作为白名单设备,其余测试设备未添加的情况下,早期beta版SDK在未通过正式校验时会返回无效占位Token,而不是抛出明确的校验失败错误,也会触发解码失败问题。

  • 初始化时机问题
    确保initFirebaseAppCheck方法在Application的onCreate生命周期最前端执行,不要做延迟初始化,避免App还未拿到有效App Check Token时就触发云函数调用,此时SDK传递的Token为空或不完整,也会触发解码失败。


内容的提问来源于stack exchange,提问作者Mehul Kanzariya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 15:48:04