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

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

Для реализации этой функции разработчикам предпочтительнее использовать библиотеку 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)
}