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

如何在Flutter中禁用Firebase手机认证(OTP)的验证码?

解决Firebase手机认证无法移除reCaptcha的问题

关键排查步骤

Firebase手机认证移除reCaptcha的核心是确保Play Integrity API验证完全通过,以下是你可能遗漏的细节:

1. 确认Play Integrity API的配置

  • 检查Google Cloud控制台,确保你的Firebase项目所有关联账号都启用了Play Integrity API,别漏了共享权限的账号。
  • 限制API密钥:把项目的API密钥设置为仅允许Play Integrity API和Firebase Authentication调用,同时绑定你的应用包名、SHA-1和SHA-256指纹。

2. 同步Firebase应用配置

  • 重新下载google-services.json替换项目里的旧文件,配置更新后本地文件经常没同步最新的Play Integrity关联信息。
  • 打开google-services.json确认里面有play_integrity字段,且对应的api_key是你刚配置好限制的密钥。

3. 代码依赖与适配

  • 升级Firebase Auth依赖到22.0.0版本以上,这个版本开始全面用Play Integrity替代SafetyNet,旧版本可能不兼容。
  • 移除所有手动指定SafetyNet的代码,比如:
    // 删掉这类旧代码
    val options = PhoneAuthOptions.newBuilder(auth)
        ...
        .setVerificationCompleted(SafetyNetVerificationProvider())
        .build()
    
    Firebase会自动适配Play Integrity,不需要额外指定。

4. 测试环境的特殊要求

  • 模拟器:必须用带完整Google Play服务的系统镜像(选带"Google Play"标识的镜像,不是纯Android或仅Google Play Services的版本),否则Play Integrity验证过不了。
  • 真机:确保设备的Google Play服务是最新版,而且测试用的APK/AAB是用Firebase配置里对应SHA指纹的签名文件打包的(Debug签名也可以,只要指纹匹配)。

5. 主动验证Play Integrity状态

加一段测试代码,确认你的应用能正常通过Play Integrity验证,方便定位问题:

val integrityManager = IntegrityManagerFactory.create(context)
val request = IntegrityTokenRequest.builder().build()
integrityManager.requestIntegrityToken(request)
    .addOnSuccessListener { tokenResponse ->
        Log.d("PlayIntegrity", "验证通过,Token: ${tokenResponse.token()}")
    }
    .addOnFailureListener { e ->
        Log.e("PlayIntegrity", "验证失败", e)
        // 这里的错误信息会直接告诉你原因,比如指纹不匹配、API没启用等
    }

6. 检查Firebase Auth的安全设置

登录Firebase控制台,进入Authentication > 设置 > 手机认证,在"安全设置"里确认风险评估是"使用Play Integrity API进行设备验证",别开强制reCaptcha的选项。


内容的提问来源于stack exchange,提问作者Mohammad Khan Awan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 20:48:21