Как интегрировать Менеджер учетных данных с автозаполнением

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

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

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

Реализация

Чтобы использовать Менеджер учетных данных для показа учетных данных в результатах автозаполнения, используйте стандартную реализацию для создания 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)
}