Integracja Menedżera danych logowania z autouzupełnianiem

Od wersji Androida 15 Beta 2 w połączeniu z biblioteką androidx.credentials:1.5.0-alpha01 deweloperzy mogą łączyć konkretne widoki, np. pola nazwy użytkownika lub hasła, z żądaniami Menedżera danych logowania. Gdy użytkownik skupi się na jednym z tych widoków, do Menedżera danych logowania zostanie wysłane odpowiednie żądanie. Wynikowe dane logowania są agregowane w różnych usługach i wyświetlane w interfejsach autouzupełniania, np. w sugestiach wbudowanych w klawiaturę lub w sugestiach w menu. Ta funkcja może być używana jako rozwiązanie awaryjne, gdy użytkownicy przypadkowo zamkną selektor kont Menedżera danych logowania, a następnie klikną odpowiednie pola.

Biblioteka Jetpack androidx.credentials jest preferowanym punktem końcowym, z którego deweloperzy mogą korzystać w przypadku tej funkcji.

Ilustracja pokazująca dane logowania w wynikach autouzupełniania
Ilustracja 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. Obsługa odpowiedzi jest taka sama niezależnie od tego, czy pochodzi ona z wywołania interfejsu API getCredential czy z wywołania PendingGetCredentialRequest, jak pokazano w tym przykładzie.

Najpierw utwórz 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 getCredential API. Wyświetli się selektor Menedżera danych logowania.

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 wartość 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)
}