Flutter集成Firebase手机号认证:生产环境reCAPTCHA配置问题
Firebase手机号认证reCAPTCHA初始化错误修复
核心错误分析
从日志可定位三个关键问题:
No Recaptcha Enterprise siteKey configured:Firebase项目未绑定有效的reCAPTCHA Enterprise站点密钥18002 Invalid PlayIntegrity token:Play Integrity验证失败,应用身份未被Google Play识别Requests from this Android client application <empty> are blocked:客户端身份校验不通过,和签名、密钥绑定配置有关
1. 已发布至Google Play的Flutter应用配置reCAPTCHA的正确步骤
- 启用Firebase手机号认证的reCAPTCHA Enterprise模式:
进入Firebase控制台「Authentication」>「Sign-in method」>「Phone」,确认reCAPTCHA类型选择reCAPTCHA Enterprise(而非普通reCAPTCHA) - 绑定发布版签名指纹到reCAPTCHA密钥:
- 从Google Play控制台「应用签名」页面获取发布签名证书SHA-256指纹(注意是Play托管的签名,不是本地调试签名)
- 在GCP控制台「reCAPTCHA Enterprise」>「你的站点密钥」>「设置」>「Android应用」中,添加应用包名和该SHA-256指纹
- 修正App Check初始化逻辑:
你当前代码的kIsWeb判断逻辑颠倒,导致Android发布版误用debug provider,修正后代码:
if (foundation.kIsWeb) { await FirebaseAppCheck.instance.activate( webProvider: ReCaptchaV3Provider(kWebRecaptchaSiteKey), ); } else { await FirebaseAppCheck.instance.activate( androidProvider: AndroidProvider.playIntegrity, appleProvider: AppleProvider.appAttest, ); }
- 确保应用通过Google Play签名发布:
必须使用Play控制台的应用签名机制上传AAB/APK,禁止用本地签名包直接发布,否则Play Integrity无法验证应用身份
2. 设置reCAPTCHA Enterprise时遗漏的关键步骤
- 启用reCAPTCHA Enterprise API:
登录GCP控制台,搜索「reCAPTCHA Enterprise API」,确认API已启用(Firebase不会自动为所有项目启用该API) - 创建并关联Android类型的reCAPTCHA密钥:
- 在GCP控制台创建reCAPTCHA Enterprise站点密钥,类型选择Android
- 返回Firebase控制台「Authentication」>「Phone」设置页,选择「使用reCAPTCHA Enterprise」并关联刚创建的密钥
- 验证App Check的Play Integrity配置:
进入Firebase控制台「App Check」>「Android应用」,确认Play Integrity提供者已启用,且应用包名、签名指纹与Play控制台一致
3. 根据日志调整siteKey的特定配置
- 检查reCAPTCHA密钥的允许列表:
确保站点密钥的「Android应用」列表中,同时包含应用包名和发布版SHA-256指纹,缺一不可 - 确认密钥类型匹配:
Android环境必须使用Android类型的reCAPTCHA Enterprise密钥,你代码中的kWebRecaptchaSiteKey仅用于Web端,Android无需配置该密钥 - 多租户项目额外检查:
如果你的Firebase项目使用了多租户,需为每个租户单独配置对应的reCAPTCHA Enterprise站点密钥
验证步骤
- 将修正后的应用打包成AAB,上传至Google Play内部测试轨道
- 使用真实设备安装测试版应用(模拟器无法通过Play Integrity验证)
- 查看Firebase控制台「Authentication」>「Logs」和「App Check」>「Logs」,确认错误是否消除
内容的提问来源于stack exchange,提问作者Dilshod Sh
相关产品推荐
相关产品推荐

