Flutter集成Firebase手机号OTP验证时遇「Verification Failed: This app is not authorized to use Firebase Authentication」错误求助
兄弟,我之前也踩过类似的坑,结合你描述的情况(已经核对SHA1/SHA256、添加调试令牌、开启Auth和App Check、启用Play Integrity API,仅测试号码可用),给你几个针对性的排查方向,你可以逐一尝试:
重点排查App Check的端到端配置:
虽然你已经开启了App Check,但要确认Flutter代码里的初始化是否正确,尤其是使用Play Integrity Provider的场景。确保在main函数里有类似这样的初始化代码:await Firebase.initializeApp(); await FirebaseAppCheck.instance.activate( androidProvider: AndroidProvider.playIntegrity, );另外,重新核对Firebase控制台里的App Check调试令牌——有时候复制粘贴时会不小心带入空格或遗漏字符,建议重新生成调试令牌,更新到控制台后,彻底卸载模拟器上的APP再重新运行测试。
验证Play Integrity API的关联有效性:
确认你的Firebase项目和对应的GCP项目是完全绑定的,并且Play Integrity API的权限是正确配置给当前Firebase项目的。另外,注意Debug包的Play Integrity验证限制:如果是本地Debug测试,除了添加调试令牌,还要确保你的Debug签名证书的SHA1/SHA256已经完整添加到Firebase控制台,没有任何拼写错误。临时调整Firebase Auth的App Check强制策略:
进入Firebase控制台的「Authentication」→「登录方法」→「电话」,找到「App Check 强制执行」选项,临时改成「允许无需App Check的请求」。如果这时候能正常发送OTP了,那问题100%出在App Check的配置上,再回头重点排查App Check的细节;如果还是报错,再往下看其他方向。清理缓存并重新构建项目:
有时候Android Studio或Flutter的缓存会导致签名信息不匹配,试试这些操作:- 执行Flutter命令清理缓存:
flutter clean→flutter pub get - 清空Android Studio缓存:点击「File」→「Invalidate Caches...」→「Invalidate and Restart」
- 卸载模拟器上的现有APP,重新编译运行
- 执行Flutter命令清理缓存:
升级Firebase相关插件版本:
旧版本的firebase_auth、firebase_app_check插件可能存在兼容性问题,导致和最新的Firebase服务验证逻辑不匹配。建议把pubspec.yaml里的相关Firebase插件升级到最新稳定版,然后重新构建项目。
备注:内容来源于stack exchange,提问作者Hasinthaka Tharindu

