Integracja Menedżera danych logowania z autouzupełnianiem

Począwszy od Androida 15 Beta 2, w połączeniu z androidx.credentials:1.5.0-alpha01, deweloperzy mogą łączyć konkretne widoki, takie jak pola nazwy użytkownika lub hasła, z żądaniami Credential Manager. Gdy użytkownik skupi się na jednym z tych widoków, do Menedżera danych logowania zostanie wysłane odpowiednie żądanie. Uzyskane dane logowania są agregowane u dostawców i wyświetlane w interfejsach autouzupełniania, takich jak sugestie wbudowane w klawiaturę lub sugestie w menu. Tej funkcji można użyć jako rozwiązania zastępczego, gdy użytkownicy przypadkowo zamkną selektor konta Menedżera danych logowania, a następnie klikną odpowiednie pola.

Preferowanym punktem końcowym dla deweloperów, którzy chcą korzystać z tej funkcji, jest biblioteka Jetpack androidx.credentials.

Ilustracja przedstawiająca dane logowania w wynikach autouzupełniania
Rysunek 1. Wyniki autouzupełniania z danymi logowania przy użyciu hasła, klucza dostępu i funkcji Zaloguj się przez Google.

Implementacja

Aby używać Menedżera danych logowania do wyświetlania danych logowania w wynikach autouzupełniania, użyj standardowej implementacji do utworzenia GetCredentialRequest, a następnie ustaw go w odpowiednich widokach. Odpowiedź jest obsługiwana w ten sam sposób, niezależnie od tego, czy pochodzi z wywołania interfejsu API getCredential czy z PendingGetCredentialRequest, jak pokazano w tym przykładzie.

Najpierw utwórz obiekt 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)
)

Następnie wywołaj interfejs API getCredential. Spowoduje to wyświetlenie selektora Credential Manager.

coroutineScope {
    try {
        val result = credentialManager.getCredential(
            context = activityContext, // Use an activity-based context.
            request = getCredRequest
        )
        handleSignIn(result)
    } catch (e: GetCredentialException) {
        handleFailure(e)
    }
}

Na koniec włącz autouzupełnianie. Ustaw getCredRequest na odpowiednie widoki (np. username, password), aby włączyć wyniki danych logowania w autouzupełnianiu, gdy użytkownik wchodzi w interakcję z tymi widokami.

usernameEditText.pendingGetCredentialRequest = PendingGetCredentialRequest(
    getCredRequest
) { response ->
    handleSignIn(response)
}

passwordEditText.pendingGetCredentialRequest = PendingGetCredentialRequest(
    getCredRequest
) { response ->
    handleSignIn(response)
}