Android应用Firebase Auth登录失败:密钥限制致服务器拒绝请求
嘿,我之前开发Android应用时也碰到过一模一样的Firebase Auth登录被拒的问题,折腾了好一阵才找到根源,给你分享几个我亲测有效的排查方向:
核对SHA指纹配置:这是Google登录最容易踩的坑!你得确保Firebase控制台的项目设置里,已经添加了当前调试/发布版本的SHA-1和SHA-256指纹。调试版指纹可以用这个命令生成:
keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android生成后去Firebase控制台「项目设置」→「你的Android应用」→「添加指纹」里填上,别漏了发布版的指纹哦。
更新google-services.json文件:每次在Firebase控制台修改配置(比如加指纹、开启登录方式)后,一定要重新下载最新的google-services.json,替换掉项目里的旧文件。本地配置和云端不匹配是很多登录失败的元凶。
检查Cloud Console的API状态:有时候Firebase控制台显示登录方式已启用,但对应的API(比如「Google Identity Toolkit API」)在Google Cloud Console里是关闭状态。去Cloud Console搜索对应的API,确认它的状态是「已启用」。
排查代码配置细节:以Google登录为例,要确保
GoogleSignInOptions正确配置了requestIdToken,并且用的是google-services.json里的default_web_client_id:val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestIdToken(getString(R.string.default_web_client_id)) .requestEmail() .build() val googleSignInClient = GoogleSignIn.getClient(this, gso)邮箱/密码登录的话,要确认调用
signInWithEmailAndPassword时参数没有传错,比如邮箱格式是否正确、密码是否符合规则。测试网络环境:代理、VPN或者公司/学校的防火墙可能会拦截Firebase的请求。试试切换到手机流量,或者关闭代理后再尝试登录,排除网络层面的问题。
获取详细错误日志:Logcat里的简略异常信息可能不够定位问题,建议在登录回调里打印完整的错误详情:
firebaseAuth.signInWithCredential(credential) .addOnCompleteListener(this) { task -> if (!task.isSuccessful) { Log.e("FirebaseAuthError", "登录失败详情:", task.exception) } }比如如果是
API_NOT_ENABLED错误,就直接指向Cloud Console的API配置问题;如果是INVALID_CREDENTIAL,可能是指纹或者client_id配置错了。
如果试过这些还是解决不了,把详细的错误日志贴出来,咱们再进一步分析!
内容的提问来源于stack exchange,提问作者Ted Hopp

