Firebase手机号认证无法接收验证码,提示应用未授权
这个问题我经手过很多次,核心原因就是Firebase控制台的应用配置(包名+SHA-1签名)和你真机上运行的应用不匹配,导致认证请求被Firebase拦截了。给你一步步拆解排查方案:
1. 精准核对包名
打开Firebase控制台,进入你的项目 → 「项目设置」→ 找到对应Android应用的配置项,检查包名是否和你代码中build.gradle(Module level)里的applicationId完全一致——注意是完全一致,大小写、标点符号都不能错,哪怕多一个空格都会导致验证失败。
2. 补全/校验SHA-1签名
这是绝大多数人踩坑的地方!真机运行的应用会使用debug签名或发布签名,你需要把这两个签名的SHA-1都添加到Firebase:
- 获取Debug签名SHA-1:在Android Studio的Terminal中执行命令:
在输出结果里找到你目标模块的# Mac/Linux ./gradlew signingReport # Windows gradlew signingReportSHA1值,复制下来。 - 获取发布签名SHA-1:如果你用正式签名文件(.jks/.keystore),执行:
输入签名密码后就能得到SHA-1值。keytool -list -v -keystore 你的签名文件路径 -alias 签名别名 - 把这两个SHA-1都添加到Firebase控制台的「项目设置」→ 对应Android应用的「添加指纹」中。
3. 更新配置文件并重建项目
修改完包名和SHA-1后,一定要重新下载google-services.json文件,替换你项目app目录下的旧文件。然后在Android Studio中执行Clean Project → Rebuild Project,确保新配置完全生效。
4. 确认手机号登录方式已开启
回到Firebase控制台 → 「认证」→ 「登录方式」,检查「电话号码」选项是否处于开启状态,要是被禁用了,直接开启即可。
5. 特殊场景排查
如果你的应用是通过App Bundle发布到Google Play的,别忘了Google会自动生成「应用签名证书」,这个证书的SHA-1也需要添加到Firebase:
- 打开Google Play控制台 → 你的应用 → 「应用签名」→ 复制「应用签名证书」的SHA-1值,添加到Firebase的指纹列表里。
另外,确保你的真机网络稳定,能正常访问Firebase服务,网络环境问题也可能导致验证码无法下发。
com.google.firebase.auth.FirebaseAuthException: 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 ] at com.google.firebase.auth.api.internal.zzce.zzb(Unknown Source:171) at com.google.firebase.auth.api.internal.zzdf.zz...
内容的提问来源于stack exchange,提问作者user9657700

