从 Android 15 Beta 2 开始,如果搭配使用 androidx.credentials:1.5.0-alpha01,开发者可以将特定视图(例如用户名或密码字段)与凭据管理器请求相关联。当用户聚焦于其中一个视图时,系统会向 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。此时会显示凭据管理器选择器。
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)
}