【问题标题】:Can't save IdentityProviders.GOOGLE credentials with SmartLock无法使用 SmartLock 保存 IdentityProviders.GOOGLE 凭据
【发布时间】:2016-01-04 17:37:46
【问题描述】:

我正在使用 Google+ 让我的用户登录我们的应用。不过,实际的 G+ 登录发生在服务器上。我取回了一些用户数据,例如电子邮件和姓名。我正在使用它来将用户凭据存储为 Google 帐户。

当我尝试保存它时出现问题。在将凭据保存在“Auth.CredentialsApi.save”中的回调中,它不返回任何分辨率,也没有任何事情发生。如果我从凭据中删除 Google IdentityProvider,那么它会在没有密码的情况下保存。

有谁知道为什么在设置 IndentityProvider 时找不到解决方案?

【问题讨论】:

    标签: android credentials google-plus-signin google-smartlockpasswords


    【解决方案1】:

    在 Play Services 8+ 中,使用 Smart Lock API 将 Google 登录信息保存到用户的 Google 帐户不需要解析(确认 UI)(即,凭据类型设置为 IdentityProviders.GOOGLE 和电子邮件地址匹配一个在设备上登录,并且用户没有禁用保存设置)。请注意,使用 API 保存时,您不能在凭证对象上同时设置帐户类型和密码 - 如果用户有密码,只需将其存储以进行身份​​验证。

    具有此类型凭据的 API 调用应自动保存并立即可用,因此只需在使用 CredentialRequest 构建 Auth.CredentialsApi.request() 时检查此凭据是否可用.setAccountTypes(IdentityProviders.GOOGLE) 并且保存的凭据是显示在passwords.google.com 上,并用“with Google”代替密码。

    在检索此凭据时,您可以使用它来了解您有一个具有现有帐户的用户,并且他们之前使用 Google 登录过。然后,您可以为此返回用户自定义身份验证 UI,或者只是自动为用户触发 Google 登录流程,并在应用程序开始使用最新版本的 Google Sign 中的 Auth.GoogleSignInApi.silentSignIn() 方法时为他们提供返回用户体验- 在图书馆。这是完整的code example

    【讨论】:

    • 关于潜在未来路线图的一些非官方说明:我们正在考虑在电子邮件与设备上匹配的电子邮件地址匹配时,在仅保存不带密码的电子邮件地址时消除对确认 UI 的需求(以便应用程序可以引导所有现有的具有后台保存的用户帐户),我们可能会回填所有 Google 登录授权,以促进自动跨设备登录(但目前,我们建议明确保存 Google 类型的凭据,以帮助用户使用适当的重新登录返回时的方法)。
    • 感谢您的回复,尽管我的问题仍然存在。如果我将其保存为 Google 帐户,该应用程序将不会保存密码,只会保存为没有电子邮件的用户名。有什么理由说明为什么会发生这种情况?
    • 如果用户使用 Google 登录,不需要密码吗?否则,只需存储用户名和密码以用于登录目的并使用它吗?是的,API 不允许同时设置帐户类型和密码字段的保存...如果我误解了用例,请告诉我?您能否在问题中添加有关如何构造凭据并使用它调用保存 API 的 sn-ps?谢谢!
    • 我似乎找到了问题所在。我使用公司管理的谷歌帐户登录。尝试将凭据另存为 GOOGLE 时,Smart Lock 总是会失败。当我切换到一些普通的 gmail 测试帐户时,它运行良好。
    • 嗯,很有趣。让我对此进行更多调查(我之前使用 Google Apps for Work 帐户进行过测试,发现它们可以正常工作,但可能存在一些限制)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多