คลาสและอินเทอร์เฟซ LVL
ตาราง 1 แสดงไฟล์ต้นทางทั้งหมดในการยืนยันใบอนุญาต
ไลบรารี (LVL) ที่พร้อมใช้งานผ่าน Android SDK ไฟล์ทั้งหมดเป็นส่วนหนึ่งของ
แพ็กเกจ com.android.vending.licensing
หมวดหมู่ | ชื่อ | คำอธิบาย |
---|---|---|
การตรวจสอบใบอนุญาตและผล | เครื่องมือตรวจสอบใบอนุญาต | คลาสที่คุณสร้างอินสแตนซ์ (หรือคลาสย่อย) เพื่อเริ่มการตรวจสอบใบอนุญาต |
การเรียกกลับสำหรับเครื่องมือตรวจสอบสัญญาอนุญาต | อินเทอร์เฟซที่คุณใช้จัดการผลการตรวจสอบใบอนุญาต | |
นโยบาย | นโยบาย | อินเทอร์เฟซที่คุณใช้เพื่อพิจารณาว่าจะอนุญาต สิทธิ์เข้าถึงแอปพลิเคชัน ตามการตอบกลับเกี่ยวกับใบอนุญาต |
นโยบายที่จัดการโดยเซิร์ฟเวอร์ | การใช้งาน 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 จะแสดงช่องการตอบกลับเกี่ยวกับใบอนุญาตทั้งหมดที่แสดงผลโดย เซิร์ฟเวอร์การให้สัญญาอนุญาต
ช่อง | คำอธิบาย |
---|---|
responseCode |
โค้ดตอบกลับที่แสดงผลโดยเซิร์ฟเวอร์การให้สัญญาอนุญาต โค้ดตอบกลับคือ อธิบายไว้ในโค้ดตอบกลับของเซิร์ฟเวอร์ |
signedData |
การต่อสตริงที่มีข้อมูลซึ่งเซิร์ฟเวอร์การให้สัญญาอนุญาตแสดงผล ดังนี้
responseCode|nonce|packageName|versionCode|userId|timestamp:extras
|
signature |
ลายเซ็นของ signedData ที่ใช้คีย์เฉพาะแอป
|
โค้ดตอบกลับของเซิร์ฟเวอร์
ตารางที่ 3 แสดงรายการโค้ดตอบกลับของใบอนุญาตทั้งหมดที่ เซิร์ฟเวอร์การให้สัญญาอนุญาต โดยทั่วไป แอปพลิเคชันควรจัดการการตอบสนองทั้งหมดนี้ โดยค่าเริ่มต้น คลาส LicenseValidator ใน LVL จะแสดง การจัดการโค้ดตอบกลับเหล่านี้ที่จำเป็นให้กับคุณ
โค้ดการตอบกลับ | การแสดงค่าจำนวนเต็ม | คำอธิบาย | ลงนามแล้วใช่ไหม | เพิ่มเติม | ความคิดเห็น |
---|---|---|---|---|---|
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
ทำหน้าที่เป็น
การใช้งานของผู้ใช้ รวมถึงภาพประกอบของวิธีหา จัดเก็บ และใช้งาน
การตั้งค่า
เพิ่มเติม | คำอธิบาย |
---|---|
VT |
การประทับเวลาความถูกต้องของใบอนุญาต ระบุวันที่/เวลาที่แสดง การตอบกลับเกี่ยวกับใบอนุญาต (แคช) หมดอายุและต้องได้รับการตรวจสอบอีกครั้งในเซิร์ฟเวอร์การให้ใบอนุญาต ดูส่วน ในส่วนที่เกี่ยวกับระยะเวลาที่ใช้ได้ของใบอนุญาตด้านล่าง |
GT |
การประทับเวลาระยะเวลาผ่อนผัน ระบุจุดสิ้นสุดของช่วงเวลาที่
นโยบายอาจอนุญาตให้เข้าถึงแอปพลิเคชัน แม้ว่าสถานะการตอบกลับจะเป็น
RETRY ค่านี้จัดการโดยเซิร์ฟเวอร์ แต่ค่าทั่วไปคือ 5 หลายวัน ดูส่วน ด้านล่างเกี่ยวกับระยะเวลาการลองใหม่และจำนวนการลองใหม่สูงสุด |
GR |
จำนวนการลองใหม่สูงสุด ระบุจํานวนการตรวจสอบใบอนุญาตของ RETRY ติดต่อกัน
Policy ควรอนุญาตก่อนปฏิเสธการเข้าถึงแอปพลิเคชันของผู้ใช้
ค่านี้จัดการโดยเซิร์ฟเวอร์ แต่ค่าทั่วไปจะเป็น "10" หรือ สูงขึ้น ดูส่วน ด้านล่างเกี่ยวกับระยะเวลาการลองใหม่และจำนวนการลองใหม่สูงสุด |
UT |
การประทับเวลาการอัปเดต ระบุวัน/เวลาที่อัปเดตล่าสุดสำหรับ
อัปโหลดและเผยแพร่แอปพลิเคชันนี้แล้ว เซิร์ฟเวอร์ส่งคืนค่าพิเศษนี้
สำหรับคำตอบ |
FILE_URL1 หรือ FILE_URL2 |
URL สำหรับไฟล์เสริม (1 คือไฟล์หลัก 2 คือไฟล์แพตช์) ใช้เพื่อ ดาวน์โหลดไฟล์ผ่าน HTTP |
FILE_NAME1 หรือ FILE_NAME2 |
ชื่อไฟล์สำหรับขยาย (1 คือไฟล์หลัก 2 คือไฟล์แพตช์) คุณต้องใช้ เมื่อบันทึกไฟล์ในอุปกรณ์ |
FILE_SIZE1 หรือ FILE_SIZE2 |
ขนาดของไฟล์ในหน่วยไบต์ (1 สำหรับไฟล์หลัก 2 คือไฟล์แพตช์) ใช้เพื่อ ช่วยในการดาวน์โหลด และเพื่อให้มั่นใจว่ามีพื้นที่ว่างเพียงพอสำหรับการแชร์อุปกรณ์ ตำแหน่งพื้นที่เก็บข้อมูลก่อนที่จะดาวน์โหลด |
ระยะเวลาที่ใช้ได้ของใบอนุญาต
เซิร์ฟเวอร์การให้สัญญาอนุญาตของ Google Play จะกำหนดระยะเวลาความถูกต้องของใบอนุญาตสำหรับ
แอปพลิเคชันที่ดาวน์โหลดไว้ ระยะเวลาจะแสดงช่วงเวลาที่มี
สถานะใบอนุญาตของแอปพลิเคชันไม่ควรเปลี่ยนแปลงและเก็บแคชได้
Policy
การอนุญาตให้ใช้สิทธิในแอปพลิเคชัน เซิร์ฟเวอร์การให้สัญญาอนุญาตจะมี
ระยะเวลาที่ใช้ได้ซึ่งตอบสนองต่อการตรวจสอบใบอนุญาตทั้งหมด ต่อท้ายด้วย
การประทับเวลาสิ้นสุดความถูกต้องสำหรับการตอบกลับเป็นส่วนเพิ่มเติมใต้คีย์ VT
ต
Policy
สามารถดึงค่าคีย์ 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; }