android - 在 Android 上进行 One Tap 登录和注册时出现“16:找不到匹配的凭据”
问题描述
我一直遵循在 Android 上设置 One Tap 登录和注册的指南,并使用示例代码设置 One Tap 客户端,但每次我打电话时都会oneTapClient.beginSignIn(signInRequest)
收到一个回调OnFailureListener
:onFailure()
com.google.android.gms.common.api.ApiException: 16: Cannot find a matching credential.
at com.google.android.gms.common.api.internal.TaskUtil.setResultOrApiException(com.google.android.gms:play-services-base@@17.2.1:6)
at com.google.android.gms.internal.auth-api.zzaj.zzc(com.google.android.gms:play-services-auth@@18.0.0:2)
at com.google.android.gms.internal.auth-api.zzaa.dispatchTransaction(com.google.android.gms:play-services-auth@@18.0.0:6)
at com.google.android.gms.internal.auth-api.zzc.onTransact(com.google.android.gms:play-services-auth@@18.0.0:13)
at android.os.Binder.execTransactInternal(Binder.java:1021)
at android.os.Binder.execTransact(Binder.java:994)
这是什么意思?为什么我会得到这个?我确定我一定在设置中遗漏了一些东西。
解决方案
实际上有几种不同的情况,您会给出相同的错误消息
情况1
我确定我已经上传了调试证书的 SHA-1 签名,但事实并非如此。
文档说明了这一点:
在 Credentials 页面上,为您的应用程序创建一个 Android 客户端 ID(如果您还没有)。您需要指定应用的包名称和 SHA-1 签名。
在实践中,您需要转到提到的页面并创建一个OAuth Client ID
并获得具有良好旧的 SHA-1 keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android
。
案例#2
setFilterByAuthorizedAccounts(true)
出于某种原因,如果您指定并且您作为用户没有任何已被授权登录您的应用程序的 Google 帐户,那么也会使用相同的错误代码和错误消息。
如问题中链接的文档中所述,您可以首先使用它setFilterByAuthorizedAccounts(true)
来帮助用户选择与上次相同的帐户,然后setFilterByAuthorizedAccounts(false)
才能为应用程序创建新用户。
案例#3
用户未使用设备上的任何 Google 帐户登录。
推荐阅读
- android - 将 Jetpack Compose 升级到 1.0.0-beta07 后的 java.lang.NoSuchMethodError startRestartGroup
- ruby-on-rails - ROR Form_with 不断给我一个 NoMethodError
- c# - 尝试使用 c# 从 Siemens PLC 下载 .csv 文件
- python - 如何使用 Beautifulsoup 在 Xpath 之间进行迭代?
- python - 如何在pygame中进行双跳?
- jmeter - 在请求中使用 Jmeter 函数值作为变量
- php - Gmail ,获取没有历史记录的电子邮件
- angular - ngx-bootstrap datepicker 本地化月份是小写的
- java - 警告:发生了非法反射访问操作
- javascript - 使用云函数中的循环将 json 数据渲染到 DOCX 表中