升级Firebase付费计划后Phone Auth报错forcerecaptchaflow=false求助
解决Firebase Phone Authentication升级付费计划后
forcerecaptchaflow相关错误 错误核心原因
你遇到的forcerecaptchaflow from phoneauthoptions = false, forcerecaptchaflow from firebasesettings = false错误,本质是Firebase无法触发自动验证流程(原Android Device Verification API已弃用,现在依赖Play Integrity API),同时你又禁用了reCAPTCHA fallback流程,导致验证卡住。
分步解决方案
1. 启用Play Integrity API
原Android Device Verification API已被Google弃用,付费Firebase项目强制要求使用Play Integrity API完成设备验证:
- 打开Google Cloud控制台,找到你的Firebase关联项目
- 搜索并启用Play Integrity API
- 确保项目的计费账户状态正常(无欠费)
2. 修正Firebase控制台电话认证配置
- 进入Firebase控制台 → 认证 → 登录方法 → 电话认证
- 勾选启用reCAPTCHA验证(确保
forcerecaptchaflow from firebasesettings变为true) - 确认自动验证选项已开启,Firebase会自动关联Play Integrity API
3. 重新配置SHA密钥并更新配置文件
- 再次确认你的Android应用的SHA1、SHA256指纹已正确添加到Firebase项目设置 → 应用 → 安卓应用的「签名证书指纹」中
- 添加完成后,重新下载
google-services.json文件,替换Flutter项目android/app目录下的旧文件 - 执行以下命令清理缓存并重新编译:
flutter clean flutter pub get flutter run
4. 调整Flutter代码中的PhoneAuth配置
检查你的PhoneAuth调用代码,如果手动设置了forceRecaptchaFlow: false,需要移除该参数或改为true,让Firebase自动适配验证流程:
// 修正后的示例代码 PhoneAuthProvider.verifyPhoneNumber( phoneNumber: "+1234567890", verificationCompleted: (PhoneAuthCredential credential) async { // 自动验证通过后的逻辑,比如直接登录 await FirebaseAuth.instance.signInWithCredential(credential); }, verificationFailed: (FirebaseAuthException e) { // 处理验证失败,比如提示用户 print("Verification failed: ${e.message}"); }, codeSent: (String verificationId, int? resendToken) { // 保存verificationId,用于后续提交验证码 // 比如跳转输入验证码页面 }, codeAutoRetrievalTimeout: (String verificationId) { // 处理超时逻辑 }, // 移除forceRecaptchaFlow: false,或设置为true以强制reCAPTCHA流程 // forceRecaptchaFlow: true, );
5. 测试设备兼容检查
- 自动验证仅支持安装Google Play服务、且通过Play认证的真机;模拟器无法触发自动验证,需强制开启reCAPTCHA流程
- 如果测试设备是模拟器,确保代码中
forceRecaptchaFlow: true,避免流程卡住
内容的提问来源于stack exchange,提问作者Softon Tech Solution
相关产品推荐
相关产品推荐

