从 Android 15 Beta 2 开始,如果搭配 androidx.credentials:1.5.0-alpha01,开发者可以将特定视图(如 用户名或密码字段)与 Credential Manager 请求相关联。当用户将焦点放在其中一个视图上时,系统会将相应的请求发送给凭据管理器。生成的凭据会汇总到各个提供方,并显示在自动填充界面中,例如键盘内嵌建议或下拉建议。 当用户意外关闭 Credential Manager 账号选择器,然后点按相关字段时,此功能可用作回退。
开发者应首选使用 Jetpack androidx.credentials 库来实现此功能。
图 1: 使用密码、通行密钥和
使用 Google 账号登录的凭据自动填充结果。
实现
如需使用 Credential Manager 在自动填充结果中显示凭据,请使用
标准实现来构建 GetCredentialRequest,然后将其设置为相关视图。无论响应来自 getCredential API 调用还是 PendingGetCredentialRequest,响应处理方式都是相同的,如以下示例所示。
首先,构建 GetCredentialRequest:
// Retrieves the user's saved password for your app.
val getPasswordOption = GetPasswordOption()
// Get a passkey from the user's public key credential provider.
val getPublicKeyCredentialOption = GetPublicKeyCredentialOption(
requestJson = requestJson
)
val getCredRequest = GetCredentialRequest(
listOf(getPasswordOption, getPublicKeyCredentialOption)
)
接下来,调用 getCredential API。系统会显示 Credential Manager 选择器。
coroutineScope {
try {
val result = credentialManager.getCredential(
context = activityContext, // Use an activity-based context.
request = getCredRequest
)
handleSignIn(result)
} catch (e: GetCredentialException) {
handleFailure(e)
}
}
最后,启用自动填充体验。将 getCredRequest 设置为相关视图(例如 username, password),以便在用户与这些视图互动时,在自动填充中启用凭据结果。
usernameEditText.pendingGetCredentialRequest = PendingGetCredentialRequest(
getCredRequest
) { response ->
handleSignIn(response)
}
passwordEditText.pendingGetCredentialRequest = PendingGetCredentialRequest(
getCredRequest
) { response ->
handleSignIn(response)
}