凭证管理器 - 如何创建“SignInWithGoogle”凭证?

问题描述 投票:0回答:1

我正在尝试设置 Google 的 One-Tap,但使用新的一体化凭据管理器。

然而,在浏览了(写得很糟糕的)文档后,我停了下来。在“使用 Google 登录”后,一切都很好,直到我收到“NoCredentialException:没有可用的凭据”,这是有道理的。

但是……我如何创建凭证?

Google 提供了为 passwordspasskeys 创建凭据的示例,但我找不到有关为“使用 Google 登录”按钮(互联网上的任何位置)创建凭据的任何信息。

“凭据管理器通过最新的 Google ID 帮助程序库支持“使用 Google 登录”按钮”

如Android所述

所以,我使用

<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 帮助器库”不提供:

  1. CustomCredential 的子类,它是 SignInWithGoogle 的构建器(它适用于 GoogleIdToken)
  2. 一个非常长的
  3. CreateSignInWithGoogleRequest
     类(或 
    CreateGoogleIdRequest
     类),它是 
    CreateCustomCredentialRequest
     类的子类。
因此,我一直坚持如何得到这个

CreateCustomCredentialRequest

,我不知道如何允许我的用户使用Google注册,因此使用Google登录......总的来说,我也不确定我应该如何
“将凭据管理器与通过 Google 登录集成”

在结束之前,我想澄清一些事情。在

“通过 Google 注册”部分,它说:

如果在实例化 GetGoogleIdOption 请求并传递给 GetCredentialsRequest 时将 setFilterByAuthorizedAccounts 设置为 true 后没有返回结果,则表明没有授权帐户可以登录。此时,您应该设置 setFilterByAuthorizedAccounts(false) 并

调用 Sign up与谷歌

这对我没有帮助,因为:

    这仅参考
  1. GetGoogleIdOption
    ,而不参考
    GetSignInWithGoogleOption
  2. 没有解释如何“调用 Google 注册”。
然后它说:

实例化 Google 注册请求后,启动身份验证流程,与“使用 Google 登录”部分中提到的类似。

应该有

GetGoogleSignUpRequest

班吗?

我有什么遗漏的吗?我在某个地方犯了一个愚蠢的错误吗?任何对此的帮助都会很棒!

为了获得额外的上下文,我在这里提供了完整的代码:

https://www.online-java.com/VjQw6cTKig

android google-oauth google-signin google-identity google-one-tap
1个回答
0
投票
好吧,看来我找到了答案...但我对此不满意。

我发现了

这堆代码是 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 来完成这项工作。

我确定我错过了什么......

© www.soinside.com 2019 - 2024. All rights reserved.