Интегрируйте диспетчер учетных данных с автозаполнением

Начиная с Android 15 Beta 2, совместно с androidx.credentials:1.5.0-alpha01 разработчики могут связывать определенные представления, такие как поля имени пользователя или пароля, с запросами Credential Manager. Когда пользователь фокусируется на одном из этих представлений, соответствующий запрос отправляется в Credential Manager. Полученные учетные данные агрегируются от разных поставщиков и отображаются в интерфейсах автозаполнения, таких как встроенные подсказки клавиатуры или раскрывающиеся списки. Эту функцию можно использовать в качестве резервного решения, если пользователь случайно закрыл выбор учетной записи в Credential Manager, а затем нажал на соответствующие поля.

Разработчики предпочитают использовать для этой функции библиотеку Jetpack androidx.credentials .

Иллюстрация, показывающая учетные данные в результатах автозаполнения
Рисунок 1: Результаты автозаполнения с использованием пароля, ключа доступа и входа через Google.

Выполнение

Чтобы использовать Credential Manager для отображения учётных данных в результатах автозаполнения, используйте стандартную реализацию для создания GetCredentialRequest и затем настройте его для соответствующих представлений. Обработка ответа одинакова независимо от того, получен ли ответ от вызова API getCredential или 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)
)

Затем вызовите API getCredential . Это отобразит селектор диспетчера учётных данных.

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