如需将 Smart Lock(密码专用)集成到您的 Android 应用中,您必须将对 Credentials API 的调用添加到应用的启动和登录流程。下图显示了使用 Smart Lock(密码专用)的典型 Android 应用的流程。
虽然成功集成 Smart Lock(密码专用)的方式有很多,且集成的细节取决于应用的结构和用户体验,但建议对大多数应用使用以下流程。使用此流程的应用具有以下用户体验优势:
- 保存了单个凭据的服务现有用户会立即登录,并且会在打开应用时直接进入已登录视图。
- 保存了多个凭据或已停用自动登录的用户只需响应一个对话框,即可进入应用的登录视图。
- 尚未保存凭据或尚未注册的用户只需点按一下即可选择自己的姓名和电子邮件地址,并会被智能地发送到登录视图或注册视图,并预先填充这些信息。
- 当用户退出帐号时,应用可确保他们不会自动重新登录。
检索凭据
- 当应用启动时,如果没有用户登录,则调用
CredentialsClient.request()
。 - 如果
Task
成功,则通过getResult().getCredential()
获取用户的凭据并使用这些凭据登录。 - 如果
Task
失败,且异常是ResolvableApiException
的实例且getStatusCode()
返回RESOLUTION_REQUIRED
,则需要用户输入才能选择凭据。调用startResolutionForResult()
提示用户选择已保存的帐号,然后调用getParcelableExtra(Credential.EXTRA_KEY)
获取用户的凭据并使用这些凭据登录。
保存凭据
如果
Task
失败并显示ApiException
且getStatusCode()
返回SIGN_IN_REQUIRED
,则表示用户没有已保存的凭据,必须使用当前的登录或注册流程手动登录或注册。用户成功完成登录之后,您可以为用户提供保存凭据以备将来检索的机会(第 5 步)。您可以通过检索登录提示(例如用户的电子邮件地址)来帮助用户更快、更轻松地登录或注册。用户可以选择提示并跳过输入凭据的步骤。如果您的应用要求用户登录,您可以选择在初始凭据请求失败后立即检索提示(否则,您可以等待用户启动登录或注册流程)。
- 调用
CredentialsClient.getHintPickerIntent()
并启动 intent 以提示用户选择帐号,然后调用getParcelableExtra(Credential.EXTRA_KEY)
以获取登录提示。 - 如果提示的用户 ID 与现有用户匹配,则使用该 ID 预填充登录表单,并让用户输入登录密码。
- 如果提示的用户 ID 与现有用户不匹配,请在注册表单中预填充用户的 ID 和姓名,并允许用户创建一个新帐号。
- 调用
-
在用户成功登录或创建帐号后,使用
CredentialsClient.save()
保存用户 ID 和密码。如果用户使用联合身份提供方(如 Google 登录)登录,请以用户的电子邮件地址作为 ID 创建
Credential
对象,并使用setAccountType
指定身份提供方。
退出账号
- 当用户退出帐号时,调用
CredentialsClient.disableAutoSignIn()
以防止用户立即重新登录。通过停用自动登录功能,用户还可以轻松切换帐号(例如,在工作帐号和个人帐号之间,或在共享设备上的帐号之间),而无需重新输入其登录信息。
准备好将 Smart Lock(密码专用)集成到您的应用中了吗? 现在就开始吧!