Flutter生产环境Firebase短信验证失败,App Check报错求助
解决方案:Flutter Firebase短信验证因App Check失效导致的问题
核心问题定位
从错误日志可明确:
- App Check获取token失败(
Too many attempts),导致短信验证请求被拒绝(错误码17499:Firebase App Check token is invalid) - Firebase Auth自动 fallback 到Recaptcha人机验证流程,但因App Check异常导致该流程无响应,出现浏览器打开后无结果的现象
一、紧急恢复短信验证功能(临时方案)
- 豁免短信验证的App Check限制
- 进入Firebase控制台 → App Check → 对应应用 → 点击「添加豁免」
- 添加路径:
/v1/accounts:sendVerificationCode,允许该路径跳过App Check验证,先恢复核心短信登录功能
二、修复App Check核心问题
1. 解决「Too many attempts」请求超限问题
- 检查配额:Firebase控制台 → App Check → 「配额」,确认是否超出免费版每日10万次请求限制,若超出可升级付费计划或优化token缓存逻辑
- 优化缓存:Firebase App Check SDK默认自动缓存token,检查代码中是否存在不必要的
getToken(true)强制刷新操作,避免频繁请求
2. 修复Android Play Integrity验证失败
- 验证Play Integrity配置:
- 登录Google Play Console → 你的应用 → 应用完整性,确认已启用Play Integrity API,且Firebase项目的服务账号已被授予「Play Integrity API 客户端」权限
- 检查
android/app/build.gradle中minSdkVersion是否≥21(Play Integrity最低要求)
- 添加备用验证方案:修改App Check激活代码,当Play Integrity验证失败时自动切换到SafetyNet
await FirebaseAppCheck.instance.activate( androidProvider: AndroidProvider.playIntegrity, appleProvider: AppleProvider.appAttest, webProvider: ReCaptchaV3Provider('recaptcha-v3-site-key'), androidFallbackProvider: AndroidProvider.safetyNet, // 添加备用验证 );
3. 排查设备兼容性问题
- 查看Firebase控制台 → App Check → 「设备验证」,确认是否有大量旧设备或无Google Play服务的设备验证失败,这类设备可通过备用方案(SafetyNet)覆盖
三、修复Recaptcha fallback流程异常
- 升级依赖包:确保
firebase_auth和firebase_app_check为最新稳定版
flutter pub upgrade firebase_auth firebase_app_check
- 验证ReCaptcha配置:确认Web端ReCaptcha V3密钥已正确配置在Firebase控制台,且域名/包名已添加到ReCaptcha白名单
四、彻底关闭App Check(最后备选方案)
若上述方案均无效,可彻底停用App Check:
- 进入Firebase控制台 → Authentication → 「设置」 → App Check,关闭「强制执行App Check」选项
- 进入Firebase控制台 → App Check → 对应应用,点击「停用」按钮
- 移除代码中
FirebaseAppCheck.instance.activate()的调用,重新打包发布应用
内容的提问来源于stack exchange,提问作者Asylzat
相关产品推荐
相关产品推荐

