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

Flutter虚拟设备中Firebase短信验证遇SafetyNet完整性验证失败

Firebase电话认证虚拟设备验证失败的解决建议

核心原因是虚拟设备的模拟器环境无法通过SafetyNet/Play Integrity的基本完整性检测,这类检测会识别出模拟器的非真实设备特征,以下是针对性的解决方法:

  • 使用带Google Play服务的官方模拟器
    创建AVD时必须选择带有「Google Play」标记的系统镜像(比如Android 12及以上的稳定版本),这类镜像预装了完整的Google Play服务框架。启动模拟器后,登录你的Google账号,打开Play商店更新到最新的Google Play服务版本,确保服务处于正常激活状态。

  • 添加调试令牌绕过App Check验证(仅开发用)
    在调试阶段,你可以为模拟器添加专属的调试令牌,让Firebase跳过严格的完整性检测:

    1. 运行模拟器后,在Logcat中搜索关键词 AppCheckDebugToken,复制输出的调试令牌字符串
    2. 进入Firebase控制台 → 你的项目 → App Check → 选择对应的Android应用 → 「调试令牌」栏添加复制的令牌
    3. 代码中配置调试模式的App Check提供者:
      if (BuildConfig.DEBUG) {
          FirebaseAppCheck.getInstance().installAppCheckProviderFactory(
              DebugAppCheckProviderFactory.getInstance()
          )
      } else {
          FirebaseAppCheck.getInstance().installAppCheckProviderFactory(
              PlayIntegrityAppCheckProviderFactory.getInstance()
          )
      }
      

    ⚠️ 注意:此方法仅用于本地开发测试,绝对不能在生产环境中使用。

  • 调整模拟器配置

    • 在AVD的高级设置中,确保「Rooted」选项设置为「No」,Root状态会直接触发完整性检测失败
    • 避免使用预览版API的模拟器镜像,优先选择稳定版系统镜像
    • 确保模拟器的硬件配置不要过于特殊,保持默认的设备参数
  • 切换到Play Integrity替代SafetyNet
    SafetyNet已逐步被Play Integrity替代,确认你已完成以下配置:

    1. 在Google Cloud控制台启用Play Integrity API
    2. 应用级build.gradle中添加依赖:implementation "com.google.android.play:integrity:1.2.0"
    3. 在Firebase控制台的App Check设置中,将Android应用的验证提供者切换为「Play Integrity」

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 15:31:04