Mengautentikasi dengan sandi

Meskipun Credential Manager mendukung login berbasis sandi, sebaiknya prioritaskan metode autentikasi modern yang lebih aman seperti kunci sandi dan Login dengan Google. Metode ini menawarkan keamanan dan pengalaman pengguna yang jauh lebih baik. Namun, jika aplikasi Anda harus mendukung sandi, gunakan panduan ini sebagai referensi untuk menerapkan sandi dengan Credential Manager.

Credential Manager menyediakan API terpadu untuk aplikasi Anda menyimpan dan mengambil kredensial pengguna, termasuk nama pengguna dan sandi. Hal ini menyederhanakan proses login bagi pengguna dan memungkinkan mereka menggunakan penyedia kredensial dengan lancar.

Prasyarat

Implementasi sandi Credential Manager berfungsi di perangkat yang menjalankan Android 4.4 (level API 19) dan yang lebih tinggi.

Ringkasan

Panduan ini berfokus pada perubahan yang diperlukan di aplikasi Anda untuk membuat, menyimpan, dan login dengan sandi.

  • Menambahkan dependensi ke aplikasi Anda: Tambahkan library Credential Manager yang diperlukan.
  • Membuat instance Credential Manager: Buat instance Credential Manager.
  • Menyimpan sandi pengguna: Simpan kredensial pengguna dengan aman.
  • Login dengan sandi: Ambil dan gunakan kredensial yang disimpan untuk login.
  • Mengidentifikasi kolom yang harus menggunakan isi otomatis: Gunakan isi otomatis untuk pengalaman pengguna yang lebih baik.
  • Menambahkan dukungan untuk Digital Asset Links: Tambahkan dukungan untuk berbagi sandi di seluruh aplikasi dan situs yang ditautkan.

Menambahkan dependensi ke aplikasi Anda

Tambahkan dependensi berikut ke file build.gradle modul aplikasi Anda:

Kotlin

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

Groovy

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

Membuat instance Credential Manager

Gunakan konteks aplikasi atau aktivitas Anda untuk membuat objek CredentialManager.

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

Menyimpan sandi pengguna

Saat pengguna berhasil mendaftar atau memperbarui sandi mereka dalam aplikasi Anda, simpan kredensial ini di pengelola sandi mereka.

  1. Membuat permintaan sandi: Objek CreatePasswordRequest berisi nama pengguna dan sandi yang akan disimpan. Panggil credentialManager.createCredential() untuk memulai proses penyimpanan.

  2. Menangani respons: Proses CreatePasswordResponse dan kelola error apa pun (misalnya, jika pengguna membatalkan permintaan).

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

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

Login dengan sandi

Untuk mengambil kredensial yang disimpan, buat GetCredentialRequest dengan GetPasswordOption dan panggil getCredential(). Untuk memfilter sandi yang diambil berdasarkan ID pengguna yang ditentukan, gunakan kolom opsional allowedUserIds.

val getPasswordOption = GetPasswordOption()

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

Mengidentifikasi kolom yang harus menggunakan isi otomatis

Atribut android:isCredential membantu penyedia kredensial mengidentifikasi kolom yang ditujukan untuk isi otomatis, sehingga menghasilkan pengalaman pengguna yang lebih lancar. Atribut ini melengkapi autofillHints yang ada.

Manfaat menunjukkan kolom tertentu yang ditujukan untuk isi otomatis mencakup:

  • Peningkatan akurasi isi otomatis: Membantu pengelola sandi dan sistem Android mengidentifikasi kolom yang ditujukan untuk kredensial dengan lebih baik.
  • Pengalaman pengguna yang ditingkatkan: Dapat menghasilkan saran isi otomatis yang lebih lancar dan andal.

Sertakan atribut isCredential di kolom nama pengguna dan sandi seperti yang ditunjukkan dalam contoh berikut:

<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" />

Atau, tambahkan atribut secara terprogram seperti yang ditunjukkan dalam cuplikan berikut:

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

Untuk memastikan kompatibilitas dengan pengelola sandi, Anda harus mengonfigurasi Digital Asset Links antara aplikasi dan situs Anda. Hal ini memungkinkan kredensial dibagikan dengan aman di kedua platform.