Flutter Android应用切换设备后Firebase Authentication授权失败求助
问题背景
使用Flutter开发的Android应用,原Firebase项目运行正常,更换新笔记本并在测试设备运行后,发送OTP时出现以下错误:
This app is not authorized to use Firebase Authentication. Please verify that the correct package name and SHA-1 are configured in the Firebase Console. [App validation failed]
已完成的配置:
- Firebase控制台添加了正确的包名、SHA-1和SHA-256密钥
- 启用了Phone Authentication登录方式
- 启用了Play Integrity API
- 替换了最新的google-services.json到android/app目录
- 多次核对包名与SHA密钥
补充信息:
- 应用未上架Play Store,仅通过Android Studio测试
- 创建全新Firebase应用并集成Auth后仍出现相同问题
已尝试的排查:
- 反复核对包名和SHA密钥
- 确认google-services.json路径正确
- 更新Firebase依赖
- 清理并重建项目
- 检查Logcat错误日志
额外排查方向与解决步骤
1. 确认本地调试签名密钥与Firebase后台匹配
新笔记本的Android Studio可能使用了不同的默认调试密钥,执行以下命令重新获取当前调试密钥的SHA值,与Firebase后台的记录核对:
keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android
如果使用了自定义调试签名,检查android/app/build.gradle中的signingConfigs配置,确保指定的密钥文件和密码正确,且对应的SHA值已添加到Firebase。
2. 验证Google Services插件配置与文件读取
- 检查
android/build.gradle中是否添加了Google Services插件,且版本为最新:buildscript { dependencies { classpath 'com.google.gms:google-services:4.4.1' } } - 确认
android/app/build.gradle末尾存在插件引用:apply plugin: 'com.google.gms.google-services' - 执行
./gradlew clean清理项目,避免旧的google-services.json缓存残留,然后重新构建。
3. 检查OAuth 2.0客户端ID配置
进入Firebase控制台 -> 项目设置 -> 常规,滚动到"OAuth 2.0 客户端ID"区域,查看Android类型的客户端ID对应的包名和SHA-1是否与当前应用一致。若不一致,删除旧的客户端ID并重新添加SHA密钥,触发客户端ID更新。
4. 确认Play Integrity API的完整配置
- 登录Google Cloud Console,找到对应Firebase项目,检查Play Integrity API是否已启用,且创建的API密钥未设置严格的应用/IP限制(测试阶段可暂时取消限制)。
- 确保Flutter的
firebase_auth依赖版本与Play Integrity兼容,建议使用最新稳定版:firebase_auth: ^4.17.8
5. 更新测试设备的Google Play服务
测试设备上的Google Play服务版本过低可能导致验证失败,打开设备的Google Play商店,更新"Google Play服务"到最新版本后重试。
6. 检查Firebase项目的区域与服务限制
确认Firebase项目的区域设置支持Phone Authentication服务,同时测试设备所在地区未被Firebase Auth服务限制。
7. 临时关闭应用验证(仅测试用)
若以上步骤均无效,可暂时在Firebase控制台的Phone Authentication设置中关闭"应用验证"选项,测试OTP是否能正常发送。此方法仅用于排查问题,生产环境必须开启。
内容的提问来源于stack exchange,提问作者RIZWAN ALI

