SafetyNet Attestation API'den taşıma

Yanıtları güvenilir bir sunucu kullanarak doğruluyorsanız SafetyNet Attestation API'den Play Integrity API'ye geçiş kolaydır. Play Integrity API, Lisanslama Doğrulama Kitaplığı (LVL) tarafından gerçekleştirilenler gibi AIDL aracılığıyla doğrudan Play Store uygulamasıyla yapılan Uygulama Lisanslama kontrollerinin yerine de kullanılabilir. Gerekli değişikliklerin çoğu, Play Integrity yanıt jetonunu okuyup analiz etmesi gereken güvenilir sunucu tarafında yapılır. Taşıma sırasında, henüz güncellenmemiş eski istemcileri desteklemesi için hem uygulamanın hem de sunucunun, aynı anda her iki API'yi de desteklemesi gerektiğini unutmayın.

Uygulamanıza SafetyNet Attestation API için artırılmış kota sınırları verildiyse Play Integrity API için atanan kullanım katmanını ve gerekirse yükseltilmiş katmana geçme isteğini kontrol etmeniz gerekir.

Play Integrity API'yi desteklemek için aşağıdaki değişiklikler gereklidir:

Android İstemcisi:

  • Kodun, doğru şekilde biçimlendirilmiş tek seferlik rastgele sayıyı IntegrityTokenRequest oluşturucuya ilettiğinden emin olun:
    • String (bayt dizisi yerine)
    • URL güvenli
    • Base64 olarak kodlanır ve sarmalanmaz
    • En az 16 karakter
    • Maksimum 500 karakter
  • Yeniden deneme mantığını inceleyin ve uygulamanın hataları uygun şekilde işlediğinden emin olun.
  • Güvenilir sunucuya gönderilen yanıt verilerinin SafetyNet Attestation API yanıtları ile Play Integrity API yanıtları arasında ayrım yapılmasına izin verdiğinden emin olun.

Güvenilir Sunucu:

  • Tek seferlik oluşturma mantığını inceleyin ve Play Integrity API gereksinimlerini karşıladığından emin olun.
  • Sunucu kodunun SafetyNet Attestation API yanıtlarını ve Play Integrity API yanıtlarını ayırt edebildiğinden emin olun. Kodun bu yanıtları doğru şekilde ayrıştırıp doğruladığından emin olun.
  • Play Integrity API yanıtlarını doğrulamak ve ayrıştırmak için mantık ekleyin.
  • Yeni Play Integrity API yanıtı ek ayrıntılar sağladığından, karar verme mantığının ve istemci cihazlarına geri gönderilen geri bildirim verilerinin iyileştirilmesi gerekebilir. Daha fazla bilgi için bu konudaki API Yanıt Eşlemesi bölümüne bakın.

Nonce kodlaması

Bütünlükle ilgili tek seferlik rastgele sayı, Play Integrity API'ye Base64 kodlu, URL için güvenli ve sarmalanmamış String olarak iletilmelidir. Bu biçim, byte[] gerektiren SafetyNet Attestation API'den farklıdır.

  • "URL için güvenli", Base64'ün "URL ve dosya adı güvenli" varyantının kullanılması anlamına gelir (RFC 4648 bölüm 5'e bakın); burada "+" ve "/" yerine "-" ve "_" kullanılmıştır. Base64 kodlaması hakkında daha fazla bilgi için RFC 4648'e bakın.
  • "no-wrap" ifadesi, tüm satır sonlandırıcıların atlanması anlamına gelir. Bu, çıktının tek uzun bir satır olduğu anlamına gelir.
.setNonce(Base64.encodeToString(NONCE_BYTES,
        Base64.URL_SAFE | Base64.NO_WRAP))

Ayrıca, tek seferlik rastgele oluşturmanın Play Integrity API yönergeleri ile uyumlu olduğundan emin olun.

API Yanıt Eşlemesi

Aşağıdaki tabloda, SafetyNet Attestation API alanları Play Integrity API eşdeğerleriyle eşleştirilmektedir.

SafetyNet Attestation API Play Integrity API Notes
timestampMs requestDetails.timestampMillis
nonce requestDetails.nonce
apkPackageName appIntegrity.packageName
apkCertificateDigestSha256 appIntegrity.certificateSha256Digest appRecognitionVerdict öğesinin PLAY_RECOGNIZED olarak ayarlandığından emin olun
ctsProfileMatch deviceIntegrity.deviceRecognitionVerdict altında birleştirildi
basicIntegrity deviceIntegrity.deviceRecognitionVerdict altında birleştirildi
evaluationType deviceIntegrity.deviceRecognitionVerdict altında birleştirildi
advice Not available
error Not available Cihaz bütünlüğü etiketleri listesi boş olur.

Cihaz bütünlüğü kararı eşleme

SafetyNet Onay API'si Play Integrity API
ctsProfileMatch basicIntegrity evaluationType deviceRecognitionVerdict
FALSE FALSE Etiket yok
FALSE TRUE MEETS_BASIC_INTEGRITY
TRUE FALSE Etiket yok
TRUE TRUE BASIC MEETS_DEVICE_INTEGRITY, MEETS_BASIC_INTEGRITY
TRUE TRUE HARDWARE_BACKED MEETS_STRONG_INTEGRITY, MEETS_DEVICE_INTEGRITY, MEETS_BASIC_INTEGRITY

Uygulamanız karmaşık bir yaptırım stratejisi kullanıyorsa ve olası tüm değerlere ihtiyaç duyuyorsa cihaz bütünlüğü yanıtları grubunu yapılandırmanız gerekebilir.

Play Integrity API Yeniden Deneme Mantığı

Bir uygulama, belirli hata kodları kullanıldığında API çağrılarını yeniden denemelidir. Tüm hata kodlarını incelediğinizden ve uygulamanın gerektiğinde eksponansiyel geri yüklemeyle yeniden deneme yaptığından emin olun. API'ye cihaz ve uygulama bütünlüğünü değerlendirmesi için yeterli zaman tanımak amacıyla minimum gecikmenin en az 5 saniye olduğundan ve katlanarak arttığından (5 sn, 10 sn, 20 sn, 40 sn vb.) emin olun.

İsteğe bağlı Uygulama Lisanslama API'si değişimi

Play Integrity API jetonu uygulamanın lisanslama bilgilerini içerdiğinden, App Licensing API'yi kullanıyorsanız Play Integrity API'yi kullanmak için isteğe bağlı olarak geçiş yapabilirsiniz. SafetyNet Attestation API taşımasında olduğu gibi, birkaç cihazın uygulamanın eski bir sürümünü kullanmasını bekleyebilirsiniz. Güvenilir sunucunuz hem App Licensing API'yi hem de Play Integrity API yanıtlarını işleyebilir.

Kullanım tamamen kapatılana kadar yanıt alın

Geçiş için son tarihe (31 Ocak 2024) kadar henüz Play Integrity API'ye geçiş yapmadıysanız veya SafetyNet Onayı'nı kaldırmadıysanız ek süre talep etmek için bu formu doldurabilirsiniz. Uzatma için onay verilirse uygulamanız tamamen kullanımdan kaldırma tarihine (31 Ocak 2025) kadar SafetyNet Attestation'dan yanıt almaya devam edecektir.