我正在尝试设置 Google 的 One-Tap,但使用新的一体化凭据管理器。
然而,在浏览了(写得很糟糕的)文档后,我停了下来。在“使用 Google 登录”后,一切都很好,直到我收到“NoCredentialException:没有可用的凭据”,这是有道理的。
但是……我如何创建凭证?
Google 提供了为 passwords 和 passkeys 创建凭据的示例,但我找不到有关为“使用 Google 登录”按钮(互联网上的任何位置)创建凭据的任何信息。
“凭据管理器通过最新的 Google ID 帮助程序库支持“使用 Google 登录”按钮”
所以,我使用
<CredentialManager>.createCredentialAsync()
,因为这就是 Google 在他们提供的示例中使用的。
但是,Android 的 createCredentialAsync 需要
Create...Request
,并且它只接受三种类型:“CreatePasswordRequest”、“CreatePublicKeyCredentialRequest”和“CreateCustomCredentialRequest”。
这就是上面引用中提到的“Google 的 ID 帮助程序库”应该派上用场的地方。图书馆有课 GetGoogleIdOption 和 GetSignInWithGoogleOption 都是 GetCustomCredentialOption 的子类。
现在的问题是我应该如何为我的
CreateCustomCredentialRequest
方法获得一个<CredentialManager>.createCredentialAsync()
类(或其子类)。
我找到了来自Android的示例代码,其中包含正是用于此目的的伪代码:
ExampleCustomCredential customCred = ExampleCustomCredential.createFrom(customCredential.getData());
但是...
Google 的“最新 ID 帮助器库”不提供:
CreateSignInWithGoogleRequest
类(或
CreateGoogleIdRequest
类),它是
CreateCustomCredentialRequest
类的子类。
CreateCustomCredentialRequest
,我不知道如何允许我的用户使用Google注册,因此使用Google登录......总的来说,我也不确定我应该如何“将凭据管理器与通过 Google 登录集成”。 在结束之前,我想澄清一些事情。在
“通过 Google 注册”部分,它说:
如果在实例化 GetGoogleIdOption 请求并传递给 GetCredentialsRequest 时将 setFilterByAuthorizedAccounts 设置为 true 后没有返回结果,则表明没有授权帐户可以登录。此时,您应该设置 setFilterByAuthorizedAccounts(false) 并这对我没有帮助,因为:调用 Sign up与谷歌。
GetGoogleIdOption
,而不参考
GetSignInWithGoogleOption
。
实例化 Google 注册请求后,启动身份验证流程,与“使用 Google 登录”部分中提到的类似。应该有
GetGoogleSignUpRequest
班吗?我有什么遗漏的吗?我在某个地方犯了一个愚蠢的错误吗?任何对此的帮助都会很棒!
为了获得额外的上下文,我在这里提供了完整的代码:
我发现了
这堆代码是 Google 自己为他们的 Google Play 服务找到的,他们似乎也遇到了类似的问题。
他们的解决方案是使用 Android 版 Google Sign-in 的旧方法中简要提到的Identity API,然后使用 SignInCredential 手动创建 GoogleIdTokenCredential 来构建 GetCredentialResponse,而无需 <CredentialManager>.getCredentialAsync
或
.createCredentialAsync
完全没有。就我而言,我会使用 One Tap(照常),而不是简单提到的超级弃用的 API,它也会在某个时候获得 SignInCredential,我可以将其转换为
GetCredentialResponse
。我现在将使用这种方法,但 Google 明确表示 CredentialManager 将取代 One Tap,甚至弃用 One Tap。所以,我不满意仍然必须使用 One Tap 来完成这项工作。
我确定我错过了什么......