ข้อมูลอ้างอิงการให้สัญญาอนุญาต

คลาสและอินเทอร์เฟซ LVL

ตาราง 1 แสดงไฟล์ต้นทางทั้งหมดในการยืนยันใบอนุญาต ไลบรารี (LVL) ที่พร้อมใช้งานผ่าน Android SDK ไฟล์ทั้งหมดเป็นส่วนหนึ่งของ แพ็กเกจ com.android.vending.licensing

ตาราง 1 สรุปไลบรารี LVL คลาสและอินเทอร์เฟซได้

หมวดหมู่ ชื่อ คำอธิบาย
การตรวจสอบใบอนุญาตและผล เครื่องมือตรวจสอบใบอนุญาต คลาสที่คุณสร้างอินสแตนซ์ (หรือคลาสย่อย) เพื่อเริ่มการตรวจสอบใบอนุญาต
การเรียกกลับสำหรับเครื่องมือตรวจสอบสัญญาอนุญาต อินเทอร์เฟซที่คุณใช้จัดการผลการตรวจสอบใบอนุญาต
นโยบาย นโยบาย อินเทอร์เฟซที่คุณใช้เพื่อพิจารณาว่าจะอนุญาต สิทธิ์เข้าถึงแอปพลิเคชัน ตามการตอบกลับเกี่ยวกับใบอนุญาต
นโยบายที่จัดการโดยเซิร์ฟเวอร์ การใช้งาน Policy เริ่มต้น ใช้การตั้งค่าที่ระบุโดย เซิร์ฟเวอร์การให้สัญญาอนุญาตเพื่อจัดการการจัดเก็บข้อมูลใบอนุญาตในตัวเครื่อง ความถูกต้องของใบอนุญาต ลองอีกครั้ง
นโยบายที่เข้มงวด การใช้งาน Policy ทางเลือก บังคับใช้การอนุญาตให้ใช้สิทธิตาม การตอบกลับเกี่ยวกับใบอนุญาตจากเซิร์ฟเวอร์เท่านั้น ไม่มีการแคชหรือส่งคำขอลองอีกครั้ง
การปรับข้อมูลให้ยากต่อการอ่าน (Obfuscation)
(ไม่บังคับ)
Obfuscator อินเทอร์เฟซที่คุณใช้งานหากคุณใช้ Policy (เช่น ServerManagedPolicy) ที่แคชข้อมูลการตอบกลับใบอนุญาตในที่เก็บถาวร ใช้อัลกอริทึมการสร้างความสับสนเพื่อเข้ารหัสและถอดรหัสข้อมูลที่กำลังเขียนหรือ อ่านแล้ว
รหัส AESObfuscator การใช้งาน Obfuscator เริ่มต้นที่ใช้การเข้ารหัส/การถอดรหัส AES ในการปรับข้อมูลให้ยากต่อการอ่าน (Obfuscate)/ถอดรหัสซอร์สโค้ดที่สร้างความสับสน
ข้อจำกัดด้านอุปกรณ์
(ไม่บังคับ)
DeviceLimiter อินเทอร์เฟซที่คุณนำมาใช้งานหากคุณต้องการจำกัดการใช้งาน แอปพลิเคชันกับอุปกรณ์เฉพาะ เรียกจาก LicenseValidator การใช้งาน ไม่แนะนำให้ใช้ DeviceLimiter สำหรับแอปพลิเคชันส่วนใหญ่เนื่องจาก เซิร์ฟเวอร์ส่วนหลัง และอาจทำให้ผู้ใช้สูญเสียการเข้าถึงแอปพลิเคชันที่มีใบอนุญาต หากไม่ได้ออกแบบมาอย่างรอบคอบ
ตัวจำกัดอุปกรณ์ Null การใช้งาน DeviceLimiter เริ่มต้นที่ไม่มีการดำเนินการ (อนุญาตให้เข้าถึง อุปกรณ์)
แกนหลักไลบรารี ไม่จำเป็นต้องมีการผสานรวม ข้อมูลการตอบกลับ ชั้นเรียนที่มีช่องของการตอบกลับใบอนุญาต
เครื่องมือตรวจสอบใบอนุญาต คลาสที่ถอดรหัสและยืนยันการตอบกลับที่ได้รับจากการอนุญาตให้ใช้สิทธิ เซิร์ฟเวอร์
ข้อยกเว้นการตรวจสอบ คลาสที่ระบุข้อผิดพลาดที่เกิดขึ้นเมื่อตรวจสอบความสมบูรณ์ของข้อมูล ที่จัดการโดยเครื่องมือปรับให้ยากต่อการอ่าน (Obfuscator)
PreferenceObfuscator คลาสยูทิลิตีที่เขียน/อ่านข้อมูลที่ปรับให้ยากต่อการอ่าน (Obfuscate) ไปยังระบบ ร้านค้า SharedPreferences ร้าน
บริการเทคโนโลยี อินเทอร์เฟซ IPC แบบทางเดียวซึ่งจะมีการส่งคำขอตรวจสอบใบอนุญาตไปยัง ไคลเอ็นต์ Google Play
ILicenseผลการค้นหาของListener การใช้ Callback แบบทางเดียวของ IPC ซึ่งแอปพลิเคชันได้รับ การตอบกลับแบบไม่พร้อมกันจากเซิร์ฟเวอร์การให้สัญญาอนุญาต

การตอบกลับของเซิร์ฟเวอร์

ตารางที่ 2 จะแสดงช่องการตอบกลับเกี่ยวกับใบอนุญาตทั้งหมดที่แสดงผลโดย เซิร์ฟเวอร์การให้สัญญาอนุญาต

ตาราง 2 ข้อมูลสรุปของช่องตอบกลับเกี่ยวกับใบอนุญาต แสดงโดยเซิร์ฟเวอร์ Google Play

ช่อง คำอธิบาย
responseCode โค้ดตอบกลับที่แสดงผลโดยเซิร์ฟเวอร์การให้สัญญาอนุญาต โค้ดตอบกลับคือ อธิบายไว้ในโค้ดตอบกลับของเซิร์ฟเวอร์
signedData การต่อสตริงที่มีข้อมูลซึ่งเซิร์ฟเวอร์การให้สัญญาอนุญาตแสดงผล ดังนี้ responseCode|nonce|packageName|versionCode|userId|timestamp:extras
  • responseCode: โค้ดตอบกลับที่เซิร์ฟเวอร์การให้สัญญาอนุญาตแสดงผล
  • nonce: ตัวระบุ Nonce ของคำขอ
  • packageName: ชื่อแพ็กเกจของแอปที่จะตรวจสอบใบอนุญาต
  • versionCode: รหัสเวอร์ชันของแอปที่จะตรวจสอบใบอนุญาต
  • userId: รหัสที่ไม่ซ้ำกันสำหรับผู้ใช้ต่อแอป ซึ่งผู้ใช้รายเดียวกันจะได้รับ รหัสอื่นสำหรับแอปอื่น
  • timestamp: จำนวนมิลลิวินาทีจาก Epoch ของ 1970-01-01 00:00:00 UTC ถึงคำขอ
  • extras: ข้อมูลเพิ่มเติมเพื่อช่วยเรื่องการจัดการใบอนุญาต ของแอป ฟิลด์เพิ่มเติมมีระบุไว้ใน ข้อมูลเพิ่มเติมเกี่ยวกับการตอบกลับของเซิร์ฟเวอร์
signature ลายเซ็นของ signedData ที่ใช้คีย์เฉพาะแอป

โค้ดตอบกลับของเซิร์ฟเวอร์

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

ตารางที่ 3 สรุปโค้ดตอบกลับ แสดงโดยเซิร์ฟเวอร์ Google Play ในการตอบกลับเกี่ยวกับใบอนุญาต

โค้ดการตอบกลับ การแสดงค่าจำนวนเต็ม คำอธิบาย ลงนามแล้วใช่ไหม เพิ่มเติม ความคิดเห็น
LICENSED 0 ผู้ใช้ได้รับใบอนุญาตสำหรับแอปพลิเคชันนี้ ผู้ใช้ได้ซื้อ แอปพลิเคชัน หรือได้รับอนุญาตให้ดาวน์โหลดและติดตั้งรุ่นอัลฟ่าหรือเบต้า ของแอปพลิเคชัน ใช่ VT GT GR อนุญาตการเข้าถึงตามข้อจำกัด Policy
LICENSED_OLD_KEY 2 แอปพลิเคชันนี้มีใบอนุญาตสำหรับผู้ใช้ แต่มีแอปพลิเคชันที่อัปเดต ที่พร้อมให้บริการซึ่งลงนามด้วยคีย์อื่น ใช่ VT, GT, GR, UT เลือกอนุญาตการเข้าถึงตามข้อจำกัด Policy

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

NOT_LICENSED 1 แอปพลิเคชันไม่ได้รับอนุญาตให้ผู้ใช้ ไม่ ไม่อนุญาตให้เข้าถึง
ERROR_CONTACTING_SERVER 257 ข้อผิดพลาดในตัวเครื่อง — แอปพลิเคชัน Google Play ไม่สามารถเข้าถึง เซิร์ฟเวอร์การให้สัญญาอนุญาต ซึ่งอาจเกิดจากปัญหาความพร้อมใช้งานของเครือข่าย ไม่ ลองตรวจสอบใบอนุญาตอีกครั้งตามขีดจำกัดในการลองซ้ำของ Policy
ERROR_SERVER_FAILURE 4 ข้อผิดพลาดของเซิร์ฟเวอร์ — เซิร์ฟเวอร์โหลดคีย์ของแอปพลิเคชันไม่ได้ เพื่อออกใบอนุญาต ไม่ ลองตรวจสอบใบอนุญาตอีกครั้งตามขีดจำกัดในการลองซ้ำของ Policy
ERROR_INVALID_PACKAGE_NAME 258 ข้อผิดพลาดในตัวเครื่อง — แอปพลิเคชันขอตรวจสอบใบอนุญาตสำหรับแพ็กเกจ ที่ไม่ได้ติดตั้งไว้ในอุปกรณ์ ไม่ โปรดอย่าตรวจสอบใบอนุญาตอีกครั้ง

โดยทั่วไปจะเกิดจากข้อผิดพลาดในการพัฒนา

ERROR_NON_MATCHING_UID 259 ข้อผิดพลาดในตัวเครื่อง — แอปพลิเคชันขอตรวจสอบใบอนุญาตสำหรับแพ็กเกจ ที่ UID (คู่แพ็กเกจและรหัสผู้ใช้) ไม่ตรงกับของคำขอ แอปพลิเคชัน ไม่ โปรดอย่าตรวจสอบใบอนุญาตอีกครั้ง

โดยทั่วไปจะเกิดจากข้อผิดพลาดในการพัฒนา

ERROR_NOT_MARKET_MANAGED 3 ข้อผิดพลาดของเซิร์ฟเวอร์ — แอปพลิเคชัน (ชื่อแพ็กเกจ) ไม่รู้จักโดย Google Play ไม่ โปรดอย่าตรวจสอบใบอนุญาตอีกครั้ง

สามารถระบุได้ว่าแอปพลิเคชันไม่ได้รับการเผยแพร่ ผ่าน Google Play หรือมีข้อผิดพลาดในการพัฒนา การใช้งานของคุณ

หมายเหตุ: ตามที่ได้ระบุไว้ในเอกสาร การตั้งค่าสภาพแวดล้อมการทดสอบ คุณสามารถโค้ดตอบกลับด้วยตนเองได้ สำหรับนักพัฒนาแอปพลิเคชันและผู้ใช้ทดสอบที่ลงทะเบียนไว้ผ่าน Google Play Console

หมายเหตุ: ก่อนหน้านี้คุณทดสอบแอปได้โดย อัปโหลด "ฉบับร่าง" ที่ยังไม่ได้เผยแพร่ เวอร์ชัน ฟังก์ชันนี้ใช้งานไม่ได้อีกต่อไป สนับสนุน คุณต้องเผยแพร่ไปยังการเผยแพร่อัลฟาหรือเบต้าแทน สำหรับข้อมูลเพิ่มเติม โปรดดูที่แอปฉบับร่าง ไม่ได้รองรับอีกต่อไป

ข้อมูลเพิ่มเติมเกี่ยวกับการตอบกลับของเซิร์ฟเวอร์

เพื่อช่วยแอปพลิเคชันของคุณในการจัดการการเข้าถึงแอปพลิเคชันในการคืนเงินในแอปพลิเคชัน และให้ข้อมูลอื่น เซิร์ฟเวอร์การให้สัญญาอนุญาตจะประกอบด้วย ในการตอบกลับเกี่ยวกับใบอนุญาต กล่าวโดยเจาะจงคือ บริการจะให้ค่าที่แนะนำสำหรับ ระยะเวลาความถูกต้องของใบอนุญาตของแอปพลิเคชัน ระยะเวลาผ่อนผันสำหรับการลองใหม่ จำนวนการลองใหม่สูงสุดที่อนุญาต และอื่นๆ การตั้งค่า หากแอปพลิเคชันของคุณใช้ APK ไฟล์เสริม การตอบกลับจะมีชื่อไฟล์ ขนาด และ URL ด้วย เซิร์ฟเวอร์เพิ่ม การตั้งค่าเป็นคู่คีย์-ค่าในการตอบกลับใบอนุญาต "extras" ด้วย

การใช้งาน Policy จะดึงการตั้งค่าเพิ่มเติมจากใบอนุญาตได้ ตอบสนองและนำไปใช้ตามความจำเป็น การใช้งาน Policy เริ่มต้น LVL คือ ServerManagedPolicy ทำหน้าที่เป็น การใช้งานของผู้ใช้ รวมถึงภาพประกอบของวิธีหา จัดเก็บ และใช้งาน การตั้งค่า

ตาราง 4 ข้อมูลสรุป การตั้งค่าการจัดการใบอนุญาตที่กำหนดโดยเซิร์ฟเวอร์ Google Play ในใบอนุญาต คำตอบ

เพิ่มเติมคำอธิบาย
VT การประทับเวลาความถูกต้องของใบอนุญาต ระบุวันที่/เวลาที่แสดง การตอบกลับเกี่ยวกับใบอนุญาต (แคช) หมดอายุและต้องได้รับการตรวจสอบอีกครั้งในเซิร์ฟเวอร์การให้ใบอนุญาต ดูส่วน ในส่วนที่เกี่ยวกับระยะเวลาที่ใช้ได้ของใบอนุญาตด้านล่าง
GT การประทับเวลาระยะเวลาผ่อนผัน ระบุจุดสิ้นสุดของช่วงเวลาที่ นโยบายอาจอนุญาตให้เข้าถึงแอปพลิเคชัน แม้ว่าสถานะการตอบกลับจะเป็น RETRY

ค่านี้จัดการโดยเซิร์ฟเวอร์ แต่ค่าทั่วไปคือ 5 หลายวัน ดูส่วน ด้านล่างเกี่ยวกับระยะเวลาการลองใหม่และจำนวนการลองใหม่สูงสุด

GR จำนวนการลองใหม่สูงสุด ระบุจํานวนการตรวจสอบใบอนุญาตของ RETRY ติดต่อกัน Policy ควรอนุญาตก่อนปฏิเสธการเข้าถึงแอปพลิเคชันของผู้ใช้

ค่านี้จัดการโดยเซิร์ฟเวอร์ แต่ค่าทั่วไปจะเป็น "10" หรือ สูงขึ้น ดูส่วน ด้านล่างเกี่ยวกับระยะเวลาการลองใหม่และจำนวนการลองใหม่สูงสุด

UT การประทับเวลาการอัปเดต ระบุวัน/เวลาที่อัปเดตล่าสุดสำหรับ อัปโหลดและเผยแพร่แอปพลิเคชันนี้แล้ว

เซิร์ฟเวอร์ส่งคืนค่าพิเศษนี้ สำหรับคำตอบ LICENSED_OLD_KEYS เท่านั้น เพื่อให้ Policy กำหนดได้ว่า เวลาผ่านไปนับจากที่มีการเผยแพร่การอัปเดตพร้อมด้วยคีย์การอนุญาตให้ใช้สิทธิใหม่ก่อนวันที่ ปฏิเสธการเข้าถึงแอปพลิเคชันของผู้ใช้

FILE_URL1 หรือ FILE_URL2 URL สำหรับไฟล์เสริม (1 คือไฟล์หลัก 2 คือไฟล์แพตช์) ใช้เพื่อ ดาวน์โหลดไฟล์ผ่าน HTTP
FILE_NAME1 หรือ FILE_NAME2 ชื่อไฟล์สำหรับขยาย (1 คือไฟล์หลัก 2 คือไฟล์แพตช์) คุณต้องใช้ เมื่อบันทึกไฟล์ในอุปกรณ์
FILE_SIZE1 หรือ FILE_SIZE2 ขนาดของไฟล์ในหน่วยไบต์ (1 สำหรับไฟล์หลัก 2 คือไฟล์แพตช์) ใช้เพื่อ ช่วยในการดาวน์โหลด และเพื่อให้มั่นใจว่ามีพื้นที่ว่างเพียงพอสำหรับการแชร์อุปกรณ์ ตำแหน่งพื้นที่เก็บข้อมูลก่อนที่จะดาวน์โหลด

ระยะเวลาที่ใช้ได้ของใบอนุญาต

เซิร์ฟเวอร์การให้สัญญาอนุญาตของ Google Play จะกำหนดระยะเวลาความถูกต้องของใบอนุญาตสำหรับ แอปพลิเคชันที่ดาวน์โหลดไว้ ระยะเวลาจะแสดงช่วงเวลาที่มี สถานะใบอนุญาตของแอปพลิเคชันไม่ควรเปลี่ยนแปลงและเก็บแคชได้ Policyการอนุญาตให้ใช้สิทธิในแอปพลิเคชัน เซิร์ฟเวอร์การให้สัญญาอนุญาตจะมี ระยะเวลาที่ใช้ได้ซึ่งตอบสนองต่อการตรวจสอบใบอนุญาตทั้งหมด ต่อท้ายด้วย การประทับเวลาสิ้นสุดความถูกต้องสำหรับการตอบกลับเป็นส่วนเพิ่มเติมใต้คีย์ VTPolicy สามารถดึงค่าคีย์ VT และใช้เพื่ออนุญาตการเข้าถึงแบบมีเงื่อนไข ใบสมัครโดยไม่ตรวจสอบใบอนุญาตอีกครั้งจนกว่าจะสิ้นสุดระยะเวลาที่ใช้ได้ หมดอายุ

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

เซิร์ฟเวอร์การให้สัญญาอนุญาตจะจัดการระยะเวลาที่ใช้ได้เพื่อช่วย แอปพลิเคชันบังคับใช้การอนุญาตให้ใช้สิทธิอย่างเหมาะสมตลอดระยะเวลาการคืนเงินที่ Google Play สำหรับแอปพลิเคชันแบบชำระเงิน ซึ่งจะกำหนดระยะเวลาที่ใช้ได้โดยอิงตาม มีการซื้อแอปพลิเคชันหรือไม่ และหากมี เป็นเวลานานเท่าใดแล้ว โดยเฉพาะอย่างยิ่ง เซิร์ฟเวอร์จะกำหนดระยะเวลาที่ใช้ได้ดังนี้

  • สำหรับแอปพลิเคชันแบบชำระเงิน เซิร์ฟเวอร์จะกำหนดระยะเวลาความถูกต้องของใบอนุญาตเริ่มต้น เพื่อให้การตอบกลับเกี่ยวกับใบอนุญาตยังคงมีผลตราบเท่าที่ใบสมัคร สามารถขอคืนเงินได้ Policy การอนุญาตให้ใช้สิทธิในแอปพลิเคชันอาจแคช ผลการตรวจสอบใบอนุญาตเบื้องต้น และไม่จำเป็นต้องตรวจสอบใบอนุญาตอีกครั้ง จนกว่าระยะเวลาที่ใช้งานได้จะสิ้นสุดลง
  • เมื่อแอปพลิเคชันไม่สามารถขอเงินคืนได้อีกต่อไป เซิร์ฟเวอร์ จะกำหนดระยะเวลาที่ใช้ได้ที่นานขึ้น ซึ่งโดยปกติคือจำนวนวัน
  • สำหรับแอปพลิเคชันฟรี เซิร์ฟเวอร์จะกำหนดระยะเวลาที่ใช้ได้ไว้ที่สูงมาก (long.MAX_VALUE) ซึ่งช่วยให้มั่นใจว่าในกรณีที่ Policy มี แคชการประทับเวลาความถูกต้องไว้ในเครื่องแล้ว จะทำให้ไม่ต้องตรวจสอบ สถานะใบอนุญาตของใบสมัครในอนาคตได้

การใช้งาน ServerManagedPolicy ใช้การประทับเวลาที่ดึงมา (mValidityTimestamp) เป็นเงื่อนไขหลักในการพิจารณาว่า เพื่อตรวจสอบสถานะใบอนุญาตอีกครั้งกับเซิร์ฟเวอร์ ก่อนที่จะอนุญาตให้ผู้ใช้เข้าถึง แอปพลิเคชัน

ระยะเวลาการลองใหม่และจำนวนการลองใหม่สูงสุด

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

เมื่อปัญหาเครือข่ายป้องกันหรือขัดจังหวะการตรวจสอบใบอนุญาต Google ไคลเอ็นต์ Play จะแจ้งเตือนแอปพลิเคชันโดยแสดงโค้ดตอบกลับ RETRY ไปยัง เมธอด processServerResponse() ของ Policy ในกรณีที่เป็นระบบ เช่น เมื่อแอปพลิเคชันไม่สามารถเชื่อมโยงกับ ILicensingService ไลบรารี LicenseChecker เรียกฟิลด์ เมธอด processServerResponse() ของนโยบายที่มีโค้ดตอบกลับ RETRY

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

เซิร์ฟเวอร์ Google Play ช่วยให้แอปพลิเคชันจัดการการอนุญาตให้ใช้สิทธิภายใต้ เงื่อนไขข้อผิดพลาดได้โดยการตั้งค่า "ระยะเวลาผ่อนผัน" อีกครั้ง และขีดจำกัดสูงสุดที่แนะนำ จำนวนครั้งที่ลองใหม่ เซิร์ฟเวอร์จะรวมค่าเหล่านี้ในการตอบกลับการตรวจสอบใบอนุญาตทั้งหมด ต่อท้ายด้วยเป็นส่วนพิเศษใต้คีย์ GT และ GR

แอปพลิเคชัน Policy สามารถดึงข้อมูล GT และ GR เพิ่มเติมและใช้เพื่อ อนุญาตการเข้าถึงแอปพลิเคชันแบบมีเงื่อนไขดังต่อไปนี้

  • สำหรับการตรวจสอบใบอนุญาตที่ส่งผลให้เกิดการตอบกลับ RETRY Policy ควร แคชโค้ดตอบกลับ RETRY และเพิ่มจำนวนการตอบกลับ RETRY
  • Policy ควรอนุญาตให้ผู้ใช้เข้าถึงแอปพลิเคชันได้โดยมีเงื่อนไขว่า ระยะเวลาผ่อนผันการลองใหม่ยังคงทำงานอยู่ หรือจำนวนการลองใหม่สูงสุดได้ ยังไม่ได้ติดต่อ

ServerManagedPolicy ใช้ค่า GT และ GR ที่เซิร์ฟเวอร์ระบุเป็น ที่อธิบายไว้ข้างต้น ตัวอย่างด้านล่างแสดงการจัดการตามเงื่อนไขของการลองใหม่ คำตอบในเมธอด allow() จำนวนคำตอบ RETRY รายการคือ ไว้ในเมธอด processServerResponse() ไม่แสดง

Kotlin

fun allowAccess(): Boolean {
    val ts = System.currentTimeMillis()
    return when(lastResponse) {
        LICENSED -> {
            // Check if the LICENSED response occurred within the validity timeout.
            ts <= validityTimestamp  // Cached LICENSED response is still valid.
        }
        RETRY -> {
            ts < lastResponseTime + MILLIS_PER_MINUTE &&
                    // Only allow access if we are within the retry period
                    // or we haven't used up our max retries.
                    (ts <= retryUntil || retryCount <= maxRetries)
        }
        else -> false
    }
}

Java

public boolean allowAccess() {
    long ts = System.currentTimeMillis();
    if (lastResponse == LicenseResponse.LICENSED) {
        // Check if the LICENSED response occurred within the validity timeout.
        if (ts <= validityTimestamp) {
            // Cached LICENSED response is still valid.
            return true;
        }
    } else if (lastResponse == LicenseResponse.RETRY &&
                ts < lastResponseTime + MILLIS_PER_MINUTE) {
        // Only allow access if we are within the retry period
        // or we haven't used up our max retries.
        return (ts <= retryUntil || retryCount <= maxRetries);
    }
    return false;
}