Начиная с Android 15 Beta 2 в сочетании с androidx.credentials:1.5.0-alpha01 разработчики могут связывать определенные представления, такие как поля имени пользователя или пароля, с запросами диспетчера учетных данных. Когда пользователь фокусируется на одном из этих представлений, соответствующий запрос отправляется в Credential Manager. Полученные учетные данные объединяются между поставщиками и отображаются в пользовательском интерфейсе автозаполнения, например, в предложениях, встроенных в клавиатуру, или в раскрывающихся списках. Эту функцию можно использовать в качестве запасного варианта, когда пользователи случайно отклоняют средство выбора учетной записи Credential Manager, а затем нажимают на соответствующие поля.
Библиотека 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) )
Ява
// 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
. Откроется селектор диспетчера учетных данных.
Котлин
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; } )