将 Credential Manager 与自动填充功能集成

从 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)
}