Uwierzytelnianie za pomocą haseł

Credential Manager obsługuje logowanie za pomocą hasła, ale zdecydowanie zalecamy priorytetowe traktowanie nowoczesnych i bezpieczniejszych metod uwierzytelniania, takich jak klucze dostępu i Zaloguj się przez Google. Te metody zapewniają znacznie lepsze bezpieczeństwo i wygodę użytkownika. Jeśli jednak Twoja aplikacja musi obsługiwać hasła, użyj tego przewodnika jako odniesienia do implementowania haseł za pomocą Credential Manager.

Credential Manager udostępnia ujednolicony interfejs API, który umożliwia aplikacji zapisywanie i pobieranie danych logowania użytkowników, w tym nazw użytkowników i haseł. Upraszcza to proces logowania użytkowników i pozwala im bezproblemowo korzystać z dostawców danych logowania.

Wymagania wstępne

Implementacja haseł w Credential Manager działa na urządzeniach z Androidem w wersji 4.4 (poziom API 19) lub nowszej.

Przegląd

Ten przewodnik koncentruje się na zmianach, które należy wprowadzić w aplikacji, aby utworzyć hasło, zapisać je i zalogować się za jego pomocą.

  • Dodaj zależności do aplikacji: dodaj wymagane biblioteki Credential Manager.
  • Utwórz instancję Credential Manager: utwórz instancję Credential Manager.
  • Zapisz hasło użytkownika: bezpiecznie przechowuj dane logowania użytkownika.
  • Zaloguj się za pomocą hasła: pobierz i użyj zapisanych danych logowania.
  • Określ pola, w których ma być używane autouzupełnianie: użyj autouzupełniania, aby zapewnić lepsze wrażenia użytkownika.
  • Dodaj obsługę Digital Asset Links: dodaj obsługę udostępniania haseł w połączonych aplikacjach i witrynach.

Dodawanie zależności do aplikacji

Dodaj te zależności do pliku build.gradle modułu aplikacji:

Kotlin

dependencies {
    implementation("androidx.credentials:credentials:1.7.0-alpha02")
}

Groovy

dependencies {
    implementation "androidx.credentials:credentials:1.7.0-alpha02"
}

Tworzenie instancji Credential Manager

Aby utworzyć obiekt CredentialManager, użyj kontekstu aplikacji lub aktywności.

// Use your app or activity context to instantiate a client instance of
// CredentialManager.
private val credentialManager = CredentialManager.create(context)

Zapisywanie hasła użytkownika

Gdy użytkownik zarejestruje się lub zaktualizuje hasło w Twojej aplikacji, zapisz te dane logowania w menedżerze haseł.

  1. Utwórz żądanie hasła: obiekt CreatePasswordRequest zawiera nazwę użytkownika i hasło, które mają zostać zapisane. Aby rozpocząć proces zapisywania, wywołaj credentialManager.createCredential().

  2. Obsłuż odpowiedź: przetwórz CreatePasswordResponse i zarządzaj błędami (np. jeśli użytkownik anuluje żądanie).

suspend fun registerPassword(username: String, password: String) {
    // Initialize a CreatePasswordRequest object.
    val createPasswordRequest =
        CreatePasswordRequest(id = username, password = password)

    // Create credential and handle result.
    // Use an activity-based context to avoid undefined system UI
    // launching behavior.
    val context = MutableContextWrapper(activityContext)
    coroutineScope {
        try {
            val result =
                credentialManager.createCredential(
                    // Use MutableContextWrapper to avoid memory leak during configuration changes
                    context = context,
                    createPasswordRequest
                )
            // Handle register password result
        } catch (e: CreateCredentialException) {
            handleFailure(e)
        }
    }
}

Logowanie za pomocą hasła

Aby pobrać zapisane dane logowania, utwórz GetCredentialRequest z GetPasswordOption i wywołaj getCredential(). Aby filtrować hasła pobierane na podstawie określonych identyfikatorów użytkowników, użyj opcjonalnego pola allowedUserIds.

val getPasswordOption = GetPasswordOption()

val credentialRequest = GetCredentialRequest.Builder()
    .addCredentialOption(getPasswordOption)
    .build()

Określanie pól, w których ma być używane autouzupełnianie

Atrybut android:isCredential pomaga dostawcom danych logowania identyfikować pola przeznaczone do autouzupełniania, co przekłada się na lepsze wrażenia użytkownika. Ten atrybut uzupełnia istniejące autofillHints.

Wskazywanie, że niektóre pola są przeznaczone do autouzupełniania, ma te zalety:

  • Większa dokładność autouzupełniania: pomaga menedżerom haseł i systemowi Android lepiej identyfikować pola przeznaczone na dane logowania.
  • Lepsze wrażenia użytkownika: może prowadzić do płynniejszych i bardziej niezawodnych sugestii autouzupełniania.

Dodaj atrybut isCredential do pól nazwy użytkownika i hasła, jak pokazano w tym przykładzie:

<EditText
    android:id="@+id/username_edittext"
    android:autofillHints="username"
    android:isCredential="true" />

<EditText
    android:id="@+id/password_edittext"
    android:inputType="textPassword"
    android:autofillHints="password"
    android:isCredential="true" />

Możesz też dodać atrybut programowo, jak pokazano w tym fragmencie kodu:

if (android.os.Build.VERSION.SDK_INT >=
    android.os.Build.VERSION_CODES.UPSIDE_DOWN_CAKE) { // Android 14
    usernameEditText.isCredential = true
    passwordEditText.isCredential = true
}

Aby zapewnić zgodność z menedżerami haseł, musisz skonfigurować Digital Asset Links między aplikacją a witryną. Umożliwi to bezpieczne udostępnianie danych logowania na obu platformach.