Memulihkan kredensial aplikasi saat menyiapkan perangkat baru

Fitur Pulihkan Kredensial Credential Manager memungkinkan pengguna memulihkan akun aplikasi mereka saat menyiapkan perangkat baru. API ini dalam pratinjau developer dan tersedia di semua perangkat yang memiliki Android 9 atau yang lebih tinggi dan layanan Google Play (GMS) Core versi 242200000 atau yang lebih tinggi. Manfaat fitur Pulihkan Kredensial meliputi:

  • Pengalaman pengguna yang lancar: Pengguna dapat memulihkan akun aplikasi mereka tanpa perlu login secara manual ke setiap aplikasi.
  • Peningkatan interaksi pengguna: Pengguna cenderung terus menggunakan aplikasi Anda jika mereka dapat memulihkan akunnya saat menyiapkan perangkat baru.
  • Mengurangi upaya pengembangan: fitur Pulihkan Kredensial terintegrasi dengan Pengelola Kredensial, sehingga developer yang sudah mendukung kunci sandi dapat menambahkan kemampuan pemulihan kredensial.

Cara kerjanya

Anda dapat menggunakan Restore Credentials untuk membuat, mendapatkan, dan menghapus kredensial yang relevan.

  1. Buat Kredensial Pemulihan: Saat pengguna login ke aplikasi Anda, buat Kredensial Pemulihan yang terkait dengan akunnya. Kredensial ini disimpan secara lokal dan disinkronkan ke cloud jika pengguna telah mengaktifkan Pencadangan Google dan enkripsi end-to-end tersedia (aplikasi dapat memilih untuk tidak menyinkronkan ke cloud)
  2. Mendapatkan Kredensial Pemulihan: Saat pengguna menyiapkan perangkat baru, aplikasi Anda dapat meminta Kredensial Pemulihan dari Credential Manager. Hal ini memungkinkan Anda login pengguna secara otomatis tanpa memerlukan input tambahan.
  3. Hapus Kredensial Pemulihan: Saat pengguna logout dari aplikasi Anda, Anda harus menghapus Kredensial Pemulihan terkait.

Fitur Pulihkan Kredensial dapat berintegrasi dengan lancar dengan sistem backend yang telah menerapkan kunci sandi. Kompatibilitas ini berasal dari fakta bahwa kunci sandi dan kunci pemulihan (jenis kredensial yang digunakan oleh fitur Pulihkan Kredensial) mematuhi spesifikasi teknis pokok yang sama. Penyelarasan ini memastikan bahwa proses Pulihkan Kredensial dapat secara efektif mengambil dan memulihkan kredensial pengguna yang disimpan dalam sistem yang mendukung kunci sandi, sehingga memberikan pengalaman yang konsisten dan mudah digunakan di berbagai platform dan metode autentikasi.

Sheet bawah Pengelola Kredensial
Gambar 1. Diagram yang menggambarkan pemulihan data aplikasi ke perangkat baru menggunakan kredensial pemulihan, termasuk pembuatan kredensial, memulai alur pemulihan, dan login pengguna otomatis

Implementasi

Restore Credentials API tersedia melalui library Jetpack Credential Manager. Untuk memulai, ikuti langkah-langkah ini:

  1. Tambahkan dependensi Credential Manager ke project Anda.

    // build.gradle.kts
    implementation("androidx.credentials:credentials:1.5.0-alpha03")
    
  2. Buat objek CreateRestoreCredentialRequest.

  3. Panggil metode createCredential() pada objek CredentialManager.

    val credentialManager = CredentialManager.create(context)
    
    // On a successful authentication create a Restore Key
    // Pass in the context and CreateRestoreCredentialRequest object
    val response = credentialManager.createCredential(context, createRestoreRequest)
    

    Kredensial pemulihan yang dibuat ini adalah jenis kredensial webauthn, dan dikenal sebagai kunci pemulihan.

  4. Saat pengguna menyiapkan perangkat baru, panggil metode getCredential() pada objek CredentialManager.

    // Fetch the Authentication JSON from server
    val authenticationJson = fetchAuthenticationJson()
    
    // Create the GetRestoreCredentialRequest object
    val options = GetRestoreCredentialOption(authenticationJson)
    val getRequest = GetCredentialRequest(listOf(options))
    
    // The restore key can be fetched in two scenarios to
    // 1. On the first launch of app on the device, fetch the Restore Key
    // 2. In the onRestore callback (if the app implements the Backup Agent)
    val response = credentialManager.getCredential(context, getRequest)
    
  5. Saat pengguna logout dari aplikasi Anda, panggil metode clearCredentialState() pada objek CredentialManager.

    // Create a ClearCredentialStateRequest object
    val clearRequest = ClearCredentialStateRequest(TYPE_CLEAR_RESTORE_CREDENTIAL)
    
    // On user log-out, clear the restore key
    val response = credentialManager.clearCredentialState(clearRequest)
    

Jika Anda menggunakan agen pencadangan, lakukan bagian getCredential dalam callback onRestore. Hal ini memastikan bahwa kredensial aplikasi dipulihkan segera setelah data aplikasi dipulihkan.

Pertanyaan umum (FAQ)

P1. Apa perbedaan antara kunci pemulihan dan kunci sandi?

Kunci pemulihan berfungsi mirip dengan kunci sandi, tetapi dirancang khusus untuk pemulihan akun di perangkat baru. Saat Anda menggunakan pengelola sandi seperti Pengelola Sandi Google untuk melakukan autentikasi, kunci sandi dan sandi yang dapat digunakan akan ditampilkan, sedangkan kunci pemulihan tidak ditampilkan karena tidak ditujukan untuk login reguler.

T2. Apakah kunci pemulihan merupakan kredensial yang hanya dapat digunakan satu kali?

Tidak, kunci pemulihan bukan kredensial yang hanya dapat digunakan satu kali. Pengelola Kredensial tidak memiliki status dan tidak mengetahui aktivitas pengguna, sehingga tidak dapat menghapus kunci secara otomatis setelah digunakan.

Kunci pemulihan hanya dihapus dalam situasi berikut:

  • Tindakan tingkat sistem: Pengguna meng-uninstal aplikasi atau menghapus datanya.
  • Panggilan tingkat aplikasi: Anda menghapus kunci secara terprogram dengan memanggil CredentialManager#clearCredentialState() saat menangani logout pengguna dalam kode aplikasi Anda.

P3. Apakah fitur Pulihkan Kredensial hanya berfungsi untuk perangkat baru?

Ya, fitur ini dirancang untuk penyiapan awal perangkat baru berteknologi Android, karena terkait langsung dengan fungsi Pencadangan dan Pemulihan sistem.

T4. Dapatkah saya menggunakan Pulihkan Kredensial untuk login pengguna secara diam-diam ke perangkat apa pun yang login dengan Akun Google yang sama?

Tidak, fitur Pulihkan Kredensial tidak dimaksudkan untuk digunakan untuk login umum di seluruh perangkat. Fitur ini hanya berfungsi dalam satu skenario tertentu: saat pengguna menyiapkan perangkat baru dengan memulihkan cadangan dari perangkat lamanya. Kedua perangkat harus ditautkan ke Akun Google yang sama agar proses pemulihan satu kali ini berhasil.

P5. Organisasi saya memiliki satu aplikasi utama dan beberapa sub-aplikasi. Dapatkah satu kunci pemulihan berfungsi untuk semua aplikasi ini?

Tidak. Kunci pemulihan terikat dengan nama paket unik aplikasi. Karena aplikasi utama dan setiap sub-aplikasi Anda memiliki nama paket yang berbeda, Anda perlu membuat kunci pemulihan terpisah untuk setiap aplikasi.

P6. Apakah kunci sandi diperlukan untuk membuat kunci pemulihan akun pengguna?

Tidak, kunci sandi tidak diperlukan. Kemampuan untuk membuat Kunci Pemulihan tidak bergantung pada metode login pengguna. Tujuannya adalah untuk menyimpan status autentikasi pengguna saat ini. Selama pengguna login secara aktif ke aplikasi Anda, Anda dapat membuat Kunci Pemulihan untuknya.

P7. Dapatkah pengguna menghapus kunci pemulihan?

Tidak, pengguna tidak memiliki kontrol langsung atas kunci pemulihan. Logika aplikasi bertanggung jawab untuk mengelola kunci pemulihan.

Demi keamanan, sebaiknya aplikasi otomatis menghapus kunci setiap kali pengguna logout. Tindakan ini memastikan bahwa saat berikutnya mereka membuka aplikasi di perangkat yang sama, mereka akan logout dengan benar dan akan diminta untuk login lagi.

P8. Dapatkah saya menggunakan Restore Credentials tanpa menyetel allowBackup ke benar (true) di manifest saya?

Ya, fitur Pulihkan Kredensial berfungsi terlepas dari apakah allowBackup disetel ke benar atau tidak.

P9. Bagaimana cara kerja Pemulihan Kredensial untuk pengguna yang memiliki beberapa akun yang login di aplikasi yang sama?

Fitur Pulihkan Kredensial dirancang untuk berfungsi dengan hanya satu akun dalam satu waktu.