Bermigrasi dari SafetyNet Attestation API

Jika Anda telah memverifikasi respons menggunakan server tepercaya, migrasi dari SafetyNet Attestation API ke Play Integrity API menjadi mudah. Play Integrity API juga dapat digunakan sebagai pengganti pemeriksaan Pemberian Lisensi Aplikasi yang dilakukan langsung dengan aplikasi Play Store melalui AIDL, seperti yang dilakukan oleh Licensing Verification Library (LVL). Sebagian besar perubahan yang diperlukan akan berada di sisi server tepercaya, yang perlu membaca dan menganalisis token respons Play Integrity. Perhatikan bahwa selama migrasi, aplikasi dan server harus mendukung kedua API secara bersamaan untuk mendukung klien lama yang belum diupdate.

Jika aplikasi Anda diberi peningkatan batasan kuota untuk SafetyNet Attestation API, Anda harus memeriksa tingkat penggunaan untuk Play Integrity API yang ditetapkan, dan jika diperlukan, buat permintaan untuk berpindah ke peningkatan tingkat.

Perubahan berikut diperlukan untuk mendukung Play Integrity API:

Klien Android:

  • Pastikan kode meneruskan nonce yang diformat dengan benar ke builder IntegrityTokenRequest:
    • String (bukan array byte)
    • URL-safe
    • Dienkode sebagai Base64 dan non-wrapping
    • Minimum 16 karakter
    • Maksimum 500 karakter
  • Tinjau logika percobaan ulangnya, dan pastikan aplikasi menangani error dengan tepat.
  • Pastikan data respons yang dikirim ke server tepercaya dapat membedakan antara respons SafetyNet Attestation API dan respons Play Integrity API.

Server Tepercaya:

  • Tinjau logika pembuatan nonce, dan pastikan logika tersebut memenuhi persyaratan Play Integrity API.
  • Pastikan kode server dapat membedakan antara respons SafetyNet Attestation API dan respons Play Integrity API. Pastikan kode mengurai dan memvalidasi respons tersebut dengan benar.
  • Tambahkan logika untuk memvalidasi dan mengurai respons Play Integrity API.
  • Karena respons Play Integrity API yang baru memberikan detail tambahan, mungkin perlu untuk meningkatkan logika pengambilan keputusan dan data masukan yang dikirim kembali ke perangkat klien. Untuk mengetahui informasi selengkapnya, lihat bagian Pemetaan Respons API dalam topik ini.

Encoding nonce

Nonce terkait integritas harus diteruskan ke Play Integrity API sebagai berenkode Base64, URL-safe, dan non-wrapped String. Format ini berbeda dari SafetyNet Attestation API, yang memerlukan byte[].

  • "URL-safe" berarti menggunakan varian "URL and filename-safe" dari Base64 (lihat RFC 4648 bagian 5), dengan ‘-' dan ‘_' digunakan sebagai pengganti ‘+' dan ‘/'. Untuk informasi encoding Base64 lebih lanjut, lihat RFC 4648.
  • "no-wrap" berarti menghilangkan semua penutup baris. Ini berarti output-nya berupa satu baris panjang.
.setNonce(Base64.encodeToString(NONCE_BYTES,
        Base64.URL_SAFE | Base64.NO_WRAP))

Selain itu, pastikan pembuatan nonce sesuai dengan pedoman Play Integrity API.

Pemetaan Respons API

Tabel berikut memetakan kolom SafetyNet Attestation API ke Play Integrity API yang setara.

SafetyNet Attestation API Play Integrity API Catatan
timestampMs requestDetails.timestampMillis
nonce requestDetails.nonce
apkPackageName appIntegrity.packageName
apkCertificateDigestSha256 appIntegrity.certificateSha256Digest Pastikan appRecognitionVerdict ditetapkan ke PLAY_RECOGNIZED
ctsProfileMatch Digabungkan ke dalam deviceIntegrity.deviceRecognitionVerdict
basicIntegrity Digabungkan ke dalam deviceIntegrity.deviceRecognitionVerdict
evaluationType Digabungkan ke dalam deviceIntegrity.deviceRecognitionVerdict
advice Not available
error Not available Daftar label integritas perangkat akan kosong.

Pemetaan verdict integritas perangkat

SafetyNet Attestation API Play Integrity API
ctsProfileMatch basicIntegrity evaluationType deviceRecognitionVerdict
FALSE FALSE Tidak ada label
FALSE TRUE MEETS_BASIC_INTEGRITY
TRUE FALSE Tidak ada label
TRUE TRUE BASIC MEETS_DEVICE_INTEGRITY, MEETS_BASIC_INTEGRITY
TRUE TRUE HARDWARE_BACKED MEETS_STRONG_INTEGRITY, MEETS_DEVICE_INTEGRITY, MEETS_BASIC_INTEGRITY

Anda mungkin perlu mengonfigurasi kumpulan respons integritas perangkat jika aplikasi Anda menggunakan strategi penerapan yang kompleks dan memerlukan semua nilai yang memungkinkan.

Logika Percobaan Ulang Play Integrity API

Aplikasi harus mencoba ulang panggilan API jika terdapat kode error tertentu. Pastikan Anda telah meninjau semua kode error, dan pastikan aplikasi mencoba ulang sesuai keperluan dengan backoff eksponensial. Pastikan penundaan minimum setidaknya 5 detik, yang meningkat secara eksponensial (5 detik, 10 detik, 20 detik, 40 detik, dan seterusnya), guna memberi API waktu yang cukup untuk menilai integritas perangkat dan aplikasi.

Penggantian Licensing API Aplikasi opsional

Jika menggunakan Licensing API Aplikasi, secara opsional Anda dapat bermigrasi untuk menggunakan Play Integrity API, karena token Play Integrity API menyertakan informasi lisensi aplikasi. Seperti migrasi SafetyNet Attestation API, Anda akan menemukan sejumlah perangkat untuk mempertahankan versi aplikasi yang lebih lama. Server tepercaya Anda harus dapat memproses respons Licensing API Aplikasi dan Play Integrity API.

Menerima respons hingga penghentian penuh

Jika belum bermigrasi ke Play Integrity API atau menghapus SafetyNet Attestation hingga batas waktu migrasi (31 Januari 2024), Anda dapat melengkapi formulir ini untuk meminta perpanjangan waktu. Jika perpanjangan waktu disetujui, aplikasi Anda akan terus menerima respons dari SafetyNet Attestation hingga batas waktu penghentian penuh (31 Januari 2025).