Blokir Toko

Banyak pengguna masih mengelola kredensial mereka sendiri saat menyiapkan perangkat Android baru. Proses manual ini dapat menjadi sulit dan sering mengakibatkan pengalaman pengguna yang buruk. Block Store API, library yang didukung oleh layanan Google Play, berupaya mengatasi masalah ini dengan menyediakan cara bagi aplikasi untuk menyimpan kredensial pengguna tanpa kerumitan atau risiko keamanan yang terkait dengan penyimpanan sandi pengguna.

Block Store API memungkinkan aplikasi Anda menyimpan kredensial pengguna yang nantinya dapat diambil untuk mengautentikasi ulang pengguna di perangkat baru. Hal ini membantu memberikan pengalaman yang lebih lancar bagi pengguna, karena mereka tidak perlu melihat layar login saat meluncurkan aplikasi Anda untuk pertama kalinya di perangkat baru.

Manfaat menggunakan Block Store meliputi:

  • Solusi penyimpanan kredensial terenkripsi untuk developer. Kredensial dienkripsi secara menyeluruh jika memungkinkan.
  • Simpan token, bukan nama pengguna dan sandi.
  • Menghilangkan hambatan dari alur login.
  • Simpan pengguna dari beban mengelola sandi yang kompleks.
  • Google memverifikasi identitas pengguna.

Sebelum memulai

Untuk mempersiapkan aplikasi Anda, selesaikan langkah-langkah di bagian berikut ini.

Mengonfigurasi aplikasi Anda

Dalam file build.gradle level project, sertakan repositori Maven Google di bagian buildscript dan allprojects:

buildscript {
  repositories {
    google()
    mavenCentral()
  }
}

allprojects {
  repositories {
    google()
    mavenCentral()
  }
}

Tambahkan dependensi layanan Google Play untuk Block Store API ke file build Gradle modul Anda, yang biasanya app/build.gradle:

dependencies {
  implementation 'com.google.android.gms:play-services-auth-blockstore:16.1.0'
}

Cara kerjanya

Block store adalah mekanisme login berbasis token yang dienkripsi menyeluruh dan dibuat berdasarkan infrastruktur pencadangan dan pemulihan. Langkah-langkah berikut menjelaskan cara kerja aplikasi yang menggunakan Block Store:

  1. Selama alur autentikasi aplikasi, atau kapan pun setelahnya, Anda dapat menyimpan token autentikasi pengguna ke Block Store untuk pengambilan nanti.
  2. Token akan disimpan secara lokal dan juga dapat dicadangkan ke cloud, secara menyeluruh dienkripsi jika memungkinkan.
  3. Data ditransfer saat pengguna memulai alur pemulihan pada perangkat baru.
  4. Jika pengguna memulihkan aplikasi Anda selama alur pemulihan, aplikasi Anda kemudian dapat mengambil token yang tersimpan dari Block Store di perangkat baru.

Menyimpan token

Saat pengguna login ke aplikasi, Anda dapat menyimpan token autentikasi yang Anda buat untuk pengguna tersebut ke Block Store. Hal ini dilakukan dengan memanggil setBytes() pada instance StoreBytesData.Builder untuk menyimpan kredensial pengguna ke perangkat sumber. Setelah Anda menyimpan token dengan Block Store, token akan dienkripsi dan disimpan secara lokal di perangkat.

Contoh berikut menunjukkan cara menyimpan token autentikasi ke perangkat lokal:

val client = Blockstore.getClient(this)
val data = StoreBytesData.Builder()
        .setBytes(/* BYTE_ARRAY */)
        .build()
client.storeBytes(data)
        .addOnSuccessListener{ result ->
            Log.d(TAG, "Stored: ${result} bytes")
        }
        .addOnFailureListener { e ->
            Log.e(TAG, “Failed to store bytes”, e)
        }

Mengambil token

Kemudian, saat pengguna melalui alur pemulihan di perangkat baru, layanan Google Play akan memverifikasi pengguna terlebih dahulu, lalu mengambil data Block Store Anda. Pengguna telah setuju untuk memulihkan data aplikasi Anda sebagai bagian dari alur pemulihan, sehingga tidak ada izin tambahan yang diperlukan. Ketika pengguna membuka aplikasi Anda, Anda dapat meminta token dari Block Store dengan memanggil retrieveBytes(). Token yang diambil kemudian dapat digunakan untuk menjaga pengguna tetap login pada perangkat baru.

Contoh berikut menunjukkan cara mengambil token terenkripsi yang sebelumnya disimpan dengan Block Store:

val client = Blockstore.getClient(this)
client.retrieveBytes()
            .addOnSuccessListener { result ->
                Log.d(TAG, "Retrieved: ${String(result)}")
            }
            .addOnFailureListener { e ->
                Log.e(TAG, "Failed to retrieve bytes", e)
            }
}

Enkripsi menyeluruh

Agar enkripsi menyeluruh tersedia, perangkat harus menjalankan Android 9 atau yang lebih tinggi, dan pengguna harus menyetel kunci layar (PIN, pola, atau sandi) untuk perangkat mereka. Anda dapat memverifikasi apakah enkripsi akan tersedia di perangkat dengan memanggil isEndToEndEncryptionAvailable().

Contoh berikut menunjukkan cara memverifikasi apakah enkripsi akan tersedia selama pencadangan cloud:

client.isEndToEndEncryptionAvailable()
        .addOnSuccessListener { result ->
          Log.d(TAG, "Will Block Store cloud backup be end-to-end encrypted? $result")
        }

Aktifkan pencadangan cloud

Untuk mengaktifkan pencadangan cloud, tambahkan metode setShouldBackupToCloud() ke objek StoreBytesData Anda. Block Store akan mencadangkan secara berkala ke cloud pada byte yang disimpan saat setShouldBackupToCloud() ditetapkan ke true.

Contoh berikut menunjukkan cara mengaktifkan pencadangan cloud hanya jika pencadangan cloud dienkripsi menyeluruh:

val client = Blockstore.getClient(this)
val storeBytesDataBuilder = StoreBytesData.Builder()
        .setBytes(/* BYTE_ARRAY */)

client.isEndToEndEncryptionAvailable()
        .addOnSuccessListener { isE2EEAvailable ->
          if (isE2EEAvailable) {
            storeBytesDataBuilder.setShouldBackupToCloud(true)
            Log.d(TAG, "E2EE is available, enable backing up bytes to the cloud.")

            client.storeBytes(storeBytesDataBuilder.build())
                .addOnSuccessListener { result ->
                  Log.d(TAG, "stored: ${result.getBytesStored()}")
                }.addOnFailureListener { e ->
                  Log.e(TAG, “Failed to store bytes”, e)
                }
          } else {
            Log.d(TAG, "E2EE is not available, only store bytes for D2D restore.")
          }
        }

Cara menguji

Gunakan metode berikut selama pengembangan untuk menguji alur pemulihan.

Uninstal/instal ulang perangkat yang sama

Jika pengguna mengaktifkan layanan Pencadangan (dapat diperiksa di Settings > Google > Backup), data Block Store akan dipertahankan saat aplikasi di-uninstal/diinstal ulang.

Anda dapat mengikuti langkah-langkah berikut untuk melakukan pengujian:

  1. Integrasikan BlockStore API ke aplikasi pengujian Anda.
  2. Gunakan aplikasi pengujian untuk memanggil BlockStore API untuk menyimpan data Anda.
  3. Uninstal aplikasi pengujian, lalu instal ulang aplikasi Anda di perangkat yang sama.
  4. Gunakan aplikasi pengujian untuk memanggil BlockStore API untuk mengambil data Anda.
  5. Pastikan byte yang diambil sama dengan yang disimpan sebelum uninstal.

Perangkat ke perangkat

Pada umumnya, perangkat target harus direset ke setelan pabrik. Anda kemudian dapat memasukkan alur pemulihan nirkabel Android atau pemulihan kabel Google (untuk perangkat yang didukung).

Pemulihan cloud

  1. Integrasikan Blockstore API ke aplikasi pengujian Anda. Aplikasi pengujian harus dikirimkan ke Play Store.
  2. Di perangkat sumber, gunakan aplikasi pengujian untuk memanggil Blockstore API guna menyimpan data Anda, dengan shouldBackUpToCloud ditetapkan ke true.
  3. Untuk perangkat O dan yang lebih baru, Anda dapat memicu pencadangan cloud Block Store secara manual: buka Settings > Google > Backup, klik tombol “Cadangkan Sekarang”.
    1. Untuk memverifikasi bahwa pencadangan cloud Block Store berhasil, Anda dapat:
      1. Setelah pencadangan selesai, telusuri baris log dengan tag “CloudSyncBpTkSvc”.
      2. Anda akan melihat baris seperti ini: “......, CloudSyncBpTkSvc: sync result: SUCCESS, ..., uploaded size: XXX bytes ...”
    2. Setelah pencadangan cloud Block Store, ada periode “sejuk” selama 5 menit. Dalam 5 menit tersebut, mengklik tombol “Cadangkan Sekarang” tidak akan memicu pencadangan cloud Block Store lainnya.
  4. Reset perangkat target ke setelan pabrik dan lakukan alur pemulihan cloud. Pilih untuk memulihkan aplikasi pengujian selama alur pemulihan. Untuk informasi selengkapnya tentang alur pemulihan cloud, lihat Alur pemulihan cloud yang didukung.
  5. Pada perangkat target, gunakan aplikasi pengujian untuk memanggil Blockstore API guna mengambil data Anda.
  6. Pastikan byte yang diambil sama dengan yang disimpan di perangkat sumber.

Persyaratan Perangkat

Enkripsi End-to-End

  • Enkripsi menyeluruh didukung pada perangkat yang menjalankan Android 9 (API 29) dan yang lebih baru.
  • Perangkat harus memiliki kunci layar yang disetel dengan PIN, pola, atau sandi agar enkripsi menyeluruh dapat diaktifkan dan mengenkripsi data pengguna dengan benar.

Alur Pemulihan Perangkat ke Perangkat

Pemulihan perangkat ke perangkat akan mengharuskan Anda memiliki perangkat sumber dan perangkat target. Keduanya akan menjadi dua perangkat yang mentransfer data.

Perangkat Sumber harus menjalankan Android 6 (API 23) dan yang lebih baru untuk mencadangkan.

Targetkan perangkat yang menjalankan Android 9 (API 29) dan yang lebih tinggi agar dapat dipulihkan.

Informasi selengkapnya tentang alur pemulihan perangkat ke perangkat dapat ditemukan di sini.

Alur Pencadangan dan Pemulihan Cloud

Pencadangan dan pemulihan cloud akan memerlukan perangkat sumber dan perangkat target.

Perangkat Sumber harus menjalankan Android 6 (API 23) dan yang lebih baru untuk mencadangkan.

Perangkat target didukung berdasarkan vendornya. Perangkat Pixel dapat menggunakan fitur ini dari Android 9 (API 29) dan semua perangkat lainnya harus menjalankan Android 12 (API 31) atau yang lebih tinggi.