Начиная с 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) )
Ява
// Retrieves the user's saved password for your app. GetPasswordOption getPasswordOption = new GetPasswordOption(); // Get a passkey from the user's public key credential provider. GetPublicKeyCredentialOption getPublicKeyCredentialOption = new GetPublicKeyCredentialOption(requestJson); GetCredentialRequest getCredRequest = new GetCredentialRequest( Arrays.asList(getPasswordOption, getPublicKeyCredentialOption) );
Далее вызовите API getCredential
. Это отобразит селектор Credential Manager.
Котлин
coroutineScope.launch { try { val result = credentialManager.getCredential( context = activityContext, // Use an activity-based context. request = getCredRequest ) handleSignIn(result); } catch (GetCredentialException e) { handleFailure(e); } }
Ява
coroutineScope.launch(new CoroutineScopeRunnable() { @Override public void run(@NonNull CoroutineScope scope) { try { GetCredentialResponse result = credentialManager.getCredential( activityContext, // Use an activity-based context. getCredRequest ); handleSignIn(result); } catch (GetCredentialException e) { handleFailure(e); } } });
Наконец, включите автозаполнение. Установите getCredRequest
на соответствующие представления (такие как username, password
), чтобы включить результаты учетных данных в автозаполнение, когда пользователь взаимодействует с этими представлениями.
Котлин
import androidx.credentials.PendingGetCredentialRequest usernameEditText.pendingGetCredentialRequest = PendingGetCredentialRequest( getCredRequest) { response -> handleSignIn(response) } passwordEditText.pendingGetCredentialRequest = PendingGetCredentialRequest( getCredRequest) { response -> handleSignIn(response) }
Ява
import androidx.credentials.CredentialManagerViewHandler; import androidx.credentials.PendingGetCredentialRequest; CredentialManagerViewHandler.setPendingGetCredentialRequest( usernameEditText, new PendingGetCredentialRequest( getCredRequest, result -> { handleSignIn(result); return null; } ) CredentialManagerViewHandler.setPendingGetCredentialRequest( passwordEditText, new PendingGetCredentialRequest( getCredRequest, result -> { handleSignIn(result); return null; } )