Firebase Google One Tap登录报错:Cannot find a matching credential 求助
核对SHA1指纹的准确性
别凭记忆复制SHA1,直接用Android Studio生成的为准:打开Gradle面板,找到项目根目录下的Tasks > android > signingReport,运行后复制对应build变种的SHA1值,分别去Firebase控制台(项目设置>应用>添加指纹)和Google Cloud控制台(API和服务>凭据>OAuth 2.0客户端ID>安卓客户端)核对,确保指纹完全一致,没有大小写错误或多余空格。检查OAuth客户端ID的配置细节
在Google Cloud控制台的「凭据」页面,找到对应安卓应用的OAuth 2.0客户端ID,确认:- 签名证书指纹(SHA1)和你当前使用的完全匹配
- 应用包名和
build.gradle里的applicationId完全一致(包括大小写和后缀)
另外,Firebase配置里的Web Client ID是正确的(用于requestIdToken),但要确保这个Web Client ID所在的OAuth项目和你的Firebase项目是关联的。
重新下载并替换google-services.json
修改Firebase或Google Cloud的配置后,必须重新下载最新的google-services.json,替换到项目app目录下,然后执行「Clean Project」和「Rebuild Project」,避免旧配置残留。排查代码逻辑漏洞
确保GoogleSignInOptions和登录流程的代码没有问题:// 初始化GoogleSignInOptions val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestIdToken(getString(R.string.default_web_client_id)) // 这里用Firebase提供的Web Client ID .requestEmail() .setFilterByAuthorizedAccounts(false) .build() // 获取GoogleSignInClient val googleSignInClient = GoogleSignIn.getClient(this, gso) // 登录按钮点击事件 signInButton.setOnClickListener { val signInIntent = googleSignInClient.signInIntent startActivityForResult(signInIntent, RC_SIGN_IN) } // 处理登录结果 override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) if (requestCode == RC_SIGN_IN) { val task = GoogleSignIn.getSignedInAccountFromIntent(data) try { val account = task.getResult(ApiException::class.java) // 获取Firebase认证凭据 val credential = GoogleAuthProvider.getCredential(account.idToken, null) FirebaseAuth.getInstance().signInWithCredential(credential) .addOnCompleteListener(this) { task -> if (task.isSuccessful) { // 登录成功逻辑 } else { // 登录失败处理 } } } catch (e: ApiException) { // 处理异常 } } }重点检查:
requestIdToken是否正确传入Web Client ID,account.idToken是否不为空,setFilterByAuthorizedAccounts(false)是否已在gso中配置。清除应用缓存和账号状态
到手机设置里找到你的应用,清除数据和缓存;然后进入Google账号设置,移除测试用的Google账号,重新登录后再测试应用的登录功能,避免旧的认证缓存干扰。确认Firebase项目关联正常
在Firebase控制台的「项目设置>应用」中,确认你的安卓应用已正确添加,且SHA1指纹已显示在列表中,没有重复或错误的指纹条目。
内容的提问来源于stack exchange,提问作者Edziu Kowalski

