Flutter应用Firebase Auth短信验证请求OTP时遇权限错误
问题描述
使用Flutter Firebase Auth发起手机号OTP验证时,每次请求均失败,日志输出如下:
W/LocalRequestInterceptor( 4834): Error getting App Check token; using placeholder token instead. Error: com.google.firebase.FirebaseException: No AppCheckProvider installed.
E/FirebaseAuth( 4834): [SmsRetrieverHelper] SMS verification code request failed: unknown status code: 17028 Invalid app info in play_integrity_token
D/FirebaseAuth( 4834): Invoking original failure callbacks after phone verification failure for +91**********, error - This app is not authorized to use Firebase Authentication. Please verify that the correct package name, SHA-1, and SHA-256 are configured in the Firebase Console. [ Invalid app info in play_integrity_token ]
前置确认:已在Firebase控制台正确配置应用包名、SHA-1及SHA-256密钥。
解决方案
1. 启用Play Integrity API
Firebase Auth当前依赖Play Integrity API完成安全校验,需执行以下操作:
- 进入Google Cloud Console,找到对应项目,搜索并启用Play Integrity API
- 确认项目关联的服务账号拥有该API的访问权限
2. 配置App Check(消除警告并完善验证链路)
日志中的App Check警告可能影响验证流程,需补充配置:
- 在
pubspec.yaml中添加依赖:dependencies: firebase_app_check: ^0.2.1+10 - 在Firebase初始化后添加App Check初始化代码:
await FirebaseAppCheck.instance.activate( androidProvider: AndroidProvider.playIntegrity, // Web端需配置reCAPTCHA密钥,移动端可忽略 // webRecaptchaSiteKey: '你的reCAPTCHA站点密钥', ); - 进入Firebase控制台的App Check页面,为Android应用启用Play Integrity提供者,并关联对应的SHA-256密钥
3. 更新google-services.json文件
即使已确认配置正确,仍需重新下载最新的google-services.json文件,替换到Flutter项目的android/app目录下,确保配置文件同步了最新的密钥与权限信息。
4. 核对应用签名SHA值
- 若使用发布签名密钥,需确保Firebase控制台配置的SHA值为发布密钥的SHA-1/SHA-256,而非debug密钥
- 通过以下命令获取发布密钥的SHA值:
keytool -list -v -keystore 你的发布密钥路径.jks -alias 你的密钥别名 - 若启用了Play App Signing,需从Google Play控制台的应用签名页面获取上传密钥和应用签名密钥的SHA值,并全部添加到Firebase控制台
5. 清除缓存并重建项目
- 清除Flutter项目缓存:
flutter clean - 清除Android构建缓存:
cd android && ./gradlew clean - 重新构建发布包:
flutter build apk --release
内容的提问来源于stack exchange,提问作者Nanday Das

