การย้ายข้อมูลจาก SafetyNet Attestation API

ถ้าคุณยืนยันการตอบกลับโดยใช้เซิร์ฟเวอร์ที่เชื่อถือได้แล้ว การย้ายข้อมูล จาก SafetyNet Attestation API ไปยัง Play Integrity API ใช้งานง่าย คุณยังสามารถใช้ Play Integrity API แทนแอป การตรวจสอบการอนุญาตให้ใช้สิทธิที่ดําเนินการโดยตรงกับ แอป Play Store ผ่าน AIDL เช่น แอปที่ดำเนินการโดยการออกใบอนุญาต ไลบรารีการยืนยัน (LVL) การเปลี่ยนแปลงที่จำเป็นส่วนใหญ่จะอยู่ในฝั่งเซิร์ฟเวอร์ที่เชื่อถือได้ ซึ่งจำเป็นต้อง อ่านและวิเคราะห์โทเค็นการตอบกลับ Play Integrity โปรดทราบว่าในระหว่างการย้ายข้อมูล ทั้งแอปพลิเคชันและเซิร์ฟเวอร์ต้องรองรับ API ทั้งสองแบบพร้อมกัน สนับสนุนไคลเอ็นต์เก่าที่ยังไม่ได้อัปเดต

หากแอปได้รับสิทธิ์เพิ่มขีดจำกัดโควต้าสำหรับเอกสารรับรอง SafetyNet API คุณควรตรวจสอบระดับการใช้งานที่กำหนดสําหรับ Play Integrity API และถ้าจำเป็นต้องขอย้าย เป็นระดับสูงขึ้น

คุณต้องทำการเปลี่ยนแปลงต่อไปนี้เพื่อรองรับ Play Integrity API

ไคลเอ็นต์ Android

  • ตรวจสอบว่าโค้ดได้ส่งผ่านค่า Nonce ที่มีรูปแบบถูกต้องไปยัง เครื่องมือสร้าง IntegrityTokenRequest:
    • String (แทนอาร์เรย์ไบต์)
    • ปลอดภัยสำหรับ URL
    • เข้ารหัสเป็น Base64 และไม่มีการรวม
    • ต้องมีอักขระอย่างน้อย 16 ตัว
    • มีอักขระได้สูงสุด 500 ตัว
  • ตรวจสอบตรรกะการลองอีกครั้ง และตรวจสอบว่าแอปพลิเคชันจัดการกับข้อผิดพลาด อย่างเหมาะสม
  • ตรวจสอบว่าข้อมูลการตอบสนองที่ส่งไปยังเซิร์ฟเวอร์ที่เชื่อถืออนุญาตให้แยก ระหว่างการตอบกลับ SafetyNet Attestation API กับ Play Integrity API คำตอบ

เซิร์ฟเวอร์ที่เชื่อถือได้:

  • ตรวจสอบตรรกะการสร้าง Nonce และตรวจสอบว่าเป็นไปตาม Play Integrity API ข้อกำหนด
  • ตรวจสอบว่าโค้ดเซิร์ฟเวอร์สามารถแยกความแตกต่างระหว่าง SafetyNet Attestation API และการตอบกลับของ Play Integrity API ตรวจสอบว่าได้แยกวิเคราะห์โค้ดและ จะตรวจสอบคำตอบเหล่านั้นอย่างถูกต้อง
  • เพิ่มตรรกะเพื่อตรวจสอบความถูกต้องและแยกวิเคราะห์ คำตอบของ Play Integrity API
  • เนื่องจากการตอบกลับใหม่ของ Play Integrity API จะให้รายละเอียดเพิ่มเติม อาจจำเป็นต้องปรับปรุงตรรกะการตัดสินใจและข้อเสนอแนะ ที่ส่งกลับไปยังอุปกรณ์ไคลเอ็นต์ สำหรับข้อมูลเพิ่มเติม โปรดดูที่ API ส่วนการแมปการตอบกลับภายในหัวข้อนี้

การเข้ารหัส Nonce

ต้องส่ง Nonce ที่เกี่ยวข้องกับความสมบูรณ์ไปยัง Play Integrity API เป็น Base64 ที่เข้ารหัส ไม่ใช้ URL และ ไม่มีการรวม String รูปแบบนี้ แตกต่างจาก SafetyNet Attestation API ซึ่งต้องใช้ byte[]

  • "ใช้ URL ได้อย่างปลอดภัย" หมายถึงการใช้ "URL และชื่อไฟล์ปลอดภัย" ตัวแปรของ Base64 (ดู RFC 4648 ส่วนที่ 5) โดยที่ "-" และ "_" ใช้แทน "+" และ "/" ดูข้อมูลเพิ่มเติมเกี่ยวกับการเข้ารหัส Base64 ได้ที่ RFC 4648
  • "ไม่ตัดคำ" หมายถึงการละเว้นเครื่องหมายสิ้นสุดบรรทัดทั้งหมด ซึ่งหมายความว่าเอาต์พุตจะ บรรทัดเดียวยาวๆ บรรทัดเดียว
.setNonce(Base64.encodeToString(NONCE_BYTES,
        Base64.URL_SAFE | Base64.NO_WRAP))

นอกจากนี้ โปรดตรวจสอบว่าการสร้าง Nonce สอดคล้องกับ Play Integrity หลักเกณฑ์ API

การแมปการตอบกลับ API

ตารางต่อไปนี้จะแมปช่อง SafetyNet Attestation API กับ Play เทียบเท่ากับ API ความสมบูรณ์

SafetyNet API เอกสารรับรอง Play Integrity API หมายเหตุ
timestampMs requestDetails.timestampMillis
nonce requestDetails.nonce
apkPackageName appIntegrity.packageName
apkCertificateDigestSha256 appIntegrity.certificateSha256Digest ตรวจสอบว่า ตั้งค่า appRecognitionVerdict เป็น วันที่ PLAY_RECOGNIZED
ctsProfileMatch รวมกันเป็น deviceIntegrity.deviceRecognitionVerdict
basicIntegrity รวมกันเป็น deviceIntegrity.deviceRecognitionVerdict
evaluationType รวมกันเป็น deviceIntegrity.deviceRecognitionVerdict
advice Not available
error Not available รายการป้ายกำกับความสมบูรณ์ของอุปกรณ์ จะว่างเปล่า

การแมปการตัดสินความสมบูรณ์ของอุปกรณ์

SafetyNet Attestation API Play Integrity API
ctsProfileMatch basicIntegrity evaluationType deviceRecognitionVerdict
FALSE FALSE ไม่มีป้ายกำกับ
FALSE TRUE MEETS_BASIC_INTEGRITY
TRUE FALSE ไม่มีป้ายกำกับ
TRUE TRUE BASIC MEETS_DEVICE_INTEGRITY, MEETS_BASIC_INTEGRITY
TRUE TRUE HARDWARE_BACKED MEETS_STRONG_INTEGRITY, MEETS_DEVICE_INTEGRITY, MEETS_BASIC_INTEGRITY

คุณอาจต้องกำหนดค่าชุดความสมบูรณ์ของอุปกรณ์ ถ้า แอปพลิเคชันใช้กลยุทธ์การบังคับใช้ที่ซับซ้อนและต้องใช้ค่าที่เป็นไปได้ทั้งหมด

ลองตรรกะอีกครั้งของ Play Integrity API

แอปควรลองเรียก API อีกครั้งในกรณีที่เกิดข้อผิดพลาดบางอย่าง โปรดตรวจสอบว่าคุณมี ตรวจสอบข้อผิดพลาดทั้งหมด รหัส และตรวจสอบว่า ที่แอปพลิเคชันจะพยายามซ้ำเมื่อจำเป็นโดยใช้ Exponential Backoff โปรด ตรวจดูว่าการหน่วงเวลาขั้นต่ำอย่างน้อย 5 วินาที เพิ่มขึ้นแบบทวีคูณ (5 วินาที 10, 20, 40 และอื่นๆ) เพื่อให้ API มีเวลาเพียงพอในการประเมินอุปกรณ์และ ความสมบูรณ์ของแอปพลิเคชัน

การแทนที่ API การอนุญาตให้ใช้สิทธิของแอป (ไม่บังคับ)

หากใช้ App Licensing API อยู่ คุณสามารถเลือกที่จะย้ายข้อมูลเพื่อใช้ Play Integrity API เนื่องจากโทเค็น Play Integrity API จะมี ข้อมูลการอนุญาตให้ใช้สิทธิ เช่นเดียวกับการย้ายข้อมูล SafetyNet Attestation API คุณ ควรมีอุปกรณ์จำนวนหนึ่งที่ยังมีแอปพลิเคชันเวอร์ชันเก่าอยู่ เซิร์ฟเวอร์ที่เชื่อถือได้ควรประมวลผลได้ทั้ง App Licensing API และ คำตอบของ Play Integrity API

รับคำตอบจนกว่าจะยุติการให้บริการโดยสมบูรณ์

หากยังไม่ได้ย้ายข้อมูลไปยัง Play Integrity API หรือนำ SafetyNet ออก เอกสารรับรองภายในกำหนดเวลาการย้ายข้อมูล (31 มกราคม 2024) คุณสามารถดำเนินการได้ แบบฟอร์ม เพื่อขอขยายเวลา หากได้รับอนุมัติสำหรับส่วนขยาย แอปของคุณจะดำเนินการต่อ ได้รับการตอบสนองจาก SafetyNet Attestation จนกระทั่งกำหนดเวลาหยุดให้บริการอย่างสมบูรณ์ (31 มกราคม 2025)