如需将 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 与现有用户不匹配,请在注册表单中预填充该用户的 ID 和姓名,然后让用户创建新帐号。
- 调用
-
在用户成功登录或创建帐号后,使用
CredentialsClient.save()
保存用户 ID 和密码。如果用户使用 Google 登录等联合身份提供方服务登录,请以用户的电子邮件地址为 ID 创建
Credential
对象,并使用setAccountType
指定身份提供方。
退出账号
- 当用户退出帐号时,调用
CredentialsClient.disableAutoSignIn()
以防止用户立即重新登录。通过停用自动登录功能,用户还可以轻松切换账号,例如在工作账号和个人账号之间切换,或在共用设备上的账号之间切换,而无需重新输入其登录信息。
准备好将 Smart Lock(密码专用)集成到您的应用中了吗? 现在就开始吧!