บันทึกประจำรุ่นของ Google Play Billing Library

เอกสารนี้มีบันทึกประจำรุ่นสำหรับ Google Play Billing Library

การเปิดตัว Google Play Billing Library 9.1.0 (18-06-2026)

ตอนนี้ Google Play Billing Library และส่วนขยาย Kotlin เวอร์ชัน 9.1.0 พร้อมให้บริการแล้ว

สรุปการเปลี่ยนแปลง

เปิดตัว Google Play Billing Library 9.0.0 (19-05-2026)

Google Play Billing Library เวอร์ชัน 9.0.0 และส่วนขยาย Kotlin พร้อมให้บริการแล้ว ดูคำแนะนำในการย้ายข้อมูล PBL 9 หากต้องการย้ายข้อมูลจาก PBL เวอร์ชันก่อนหน้า

สรุปการเปลี่ยนแปลง

  • รหัสข้อผิดพลาดที่อัปเดตแล้วสำหรับกิจกรรมใน Play Store ที่ถูกบล็อก: มีการอัปเดตรหัสข้อผิดพลาดสำหรับแอป Play Store ที่ถูกบล็อก ในกรณีที่ระบบบล็อกแอป Play Store (เช่น ในโหมดสำหรับเด็กที่ OEM ปรับแต่ง) โค้ดตอบกลับจะเปลี่ยนจาก ERROR เป็น BILLING_UNAVAILABLE นอกจากนี้ BillingResult สำหรับกรณีดังกล่าวจะแสดงข้อความแก้ไขข้อบกพร่องPlay Store ถูกบล็อก ด้วย

  • การอัปเดตความสามารถในการเว้นว่างสำหรับการเรียกเก็บเงินที่นักพัฒนาแอปเป็นผู้ให้บริการ: วิธีการ DeveloperProvidedBillingDetails.getLinkUri() ได้รับการอัปเดตให้เป็น @Nullable การเปลี่ยนแปลงนี้รองรับสถานการณ์ที่ URI ของลิงก์โดยตรงสำหรับการชำระเงินภายนอกไม่พร้อมใช้งานในระหว่างขั้นตอนการเลือกการชำระเงิน

    หากต้องการจัดการการเปลี่ยนแปลงนี้อย่างปลอดภัย โปรดตรวจสอบว่าโค้ดการผสานรวมของคุณจัดการทั้งค่า null และค่าสตริงว่าง ("") จากเมธอด DeveloperProvidedBillingDetails.getLinkUri() ก่อนที่จะแยกวิเคราะห์ หรือเปิดใช้ Intent ของเบราว์เซอร์

  • อัปเดต targetSdkVersion เป็น 35

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

การเปิดตัว Google Play Billing Library 8.3.0 (23-12-2025)

ตอนนี้ Google Play Billing Library และส่วนขยาย Kotlin เวอร์ชัน 8.3.0 พร้อมให้บริการแล้ว

สรุปการเปลี่ยนแปลง

  • API ใหม่สำหรับการชำระเงินภายนอก:

  • ปรับปรุงการจัดหมวดหมู่ข้อผิดพลาดสำหรับการหยุดชำระเงินภายนอกกลางคัน

    • หากผู้ใช้ไปยังส่วนอื่นจากขั้นตอนการซื้อเพื่อชำระเงินใน แอปภายนอก (เช่น อีวอลเล็ต) และละทิ้งธุรกรรมโดยไม่ กลับมา โค้ดตอบกลับที่แสดงต่อไคลเอ็นต์จะเป็น BillingResponseCode.USER_CANCELED (1) พร้อมข้อความแก้ไขข้อบกพร่อง BILLING_ACTIVITY_PAUSED (ก่อนหน้านี้ค่าเริ่มต้นคือ BillingResponseCode.ERROR (6))

การเปิดตัว Google Play Billing Library 8.2.1 (15-12-2025)

ตอนนี้ Google Play Billing Library เวอร์ชัน 8.2.1 และส่วนขยาย Kotlin พร้อมใช้งานแล้ว

แก้ไขข้อบกพร่อง

การเปิดตัว Google Play Billing Library 8.2.0 (09-12-2025)

ตอนนี้ Google Play Billing Library และส่วนขยาย Kotlin เวอร์ชัน 8.2.0 พร้อมใช้งานแล้ว

สรุปการเปลี่ยนแปลง

เปิดตัว Google Play Billing Library 8.1.0 (06-11-2025)

ตอนนี้ Google Play Billing Library และส่วนขยาย Kotlin เวอร์ชัน 8.1.0 พร้อมให้บริการแล้ว

สรุปการเปลี่ยนแปลง

  • การสมัครใช้บริการที่ถูกระงับ

    เราได้เพิ่มพารามิเตอร์ใหม่ลงในเมธอด BillingClient.queryPurchasesAsync() เพื่อให้รวมการสมัครใช้บริการที่ถูกระงับเมื่อค้นหาการสมัครใช้บริการ ระบบจะยังคงระบุแหล่งที่มาของการสมัครใช้บริการที่ถูกระงับเป็นของผู้ใช้ แต่การสมัครใช้บริการจะไม่มีผล เนื่องจากผู้ใช้หยุดการสมัครใช้บริการไว้ชั่วคราวหรือวิธีการชำระเงินสำหรับการต่ออายุ ถูกปฏิเสธ

    ออบเจ็กต์ Purchase ที่แสดงผลใน Listener จะแสดงผล isSuspended() = true สำหรับการสมัครใช้บริการที่ถูกระงับ ในกรณีนี้ คุณไม่ควรให้สิทธิ์เข้าถึง การสมัครใช้บริการที่ซื้อ และควรแนะนำให้ผู้ใช้ไปที่ ศูนย์การสมัครใช้บริการ ซึ่งผู้ใช้สามารถจัดการวิธีการชำระเงิน หรือสถานะหยุดชั่วคราวเพื่อเปิดใช้งานการสมัครใช้บริการอีกครั้ง

  • การอัปเดตการสมัครใช้บริการ

    • ตอนนี้ออบเจ็กต์ BillingFlowParams.ProductDetailsParams มีเมธอด setSubscriptionProductReplacementParams() ซึ่งคุณสามารถระบุข้อมูลการเปลี่ยนแทนระดับผลิตภัณฑ์ได้

    • SubscriptionProductReplacementParams ออบเจ็กต์มีเมธอด Setter 2 รายการดังนี้

      • setOldProductId: ผลิตภัณฑ์เก่าที่ต้องเปลี่ยนเป็นผลิตภัณฑ์ในProductDetailsปัจจุบัน
      • setReplacementMode: นี่คือโหมดการเปลี่ยนทดแทนระดับสินค้า โดยโหมดเหล่านี้จะเหมือนกับ SubscriptionUpdateParams แต่มีการอัปเดตการแมปค่า เราได้เปิดตัวโหมดการเปลี่ยนทดแทนใหม่ KEEP_EXISTING ซึ่งช่วยให้คุณคงกำหนดการชำระเงินที่มีอยู่ไว้เหมือนเดิม สำหรับสินค้า
    • SubscriptionUpdateParams setSubscriptionReplacementMode จะ เลิกใช้งาน คุณควรใช้ SubscriptionProductReplacementParams.setReplacementMode แทน

  • อัปเดต minSdkVersion เป็น 23

  • เปิดใช้ API การสั่งล่วงหน้าสำหรับไอเทมแบบเรียกเก็บเงินครั้งเดียว

    ตอนนี้คุณสามารถใช้ ProductDetails.oneTimePurchaseOfferDetails.getPreorderDetails() API ที่รับรายละเอียดการสั่งล่วงหน้าได้แล้ว

  • ตอนนี้ Google Play Billing Library รองรับ Kotlin เวอร์ชัน 2.2.0 แล้ว

เปิดตัว Google Play Billing Library 8.0.0 (30-06-2025)

ตอนนี้ Google Play Billing Library เวอร์ชัน 8.0.0 และส่วนขยาย Kotlin พร้อมให้บริการแล้ว

สรุปการเปลี่ยนแปลง

  • ตอนนี้เราจะเรียกไอเทมที่ซื้อในแอปว่าผลิตภัณฑ์แบบเรียกเก็บเงินครั้งเดียว

  • ตัวเลือกการซื้อและข้อเสนอหลายรายการสำหรับไอเทมแบบเรียกเก็บเงินครั้งเดียว

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

  • ปรับปรุงวิธีการ queryProductDetailsAsync()

    ก่อน PBL 8.0.0 เมธอด queryProductDetailsAsync() จะไม่ แสดงผลิตภัณฑ์ที่ดึงข้อมูลไม่ได้ ซึ่งอาจเกิดจากสาเหตุต่างๆ เช่น ไม่พบผลิตภัณฑ์หรือไม่มีข้อเสนอสำหรับผู้ใช้ PBL 8.0.0 จะแสดงผลิตภัณฑ์ที่ไม่ได้ดึงข้อมูลพร้อมรหัสสถานะระดับสินค้าใหม่ ซึ่งให้ข้อมูลเกี่ยวกับผลิตภัณฑ์ที่ไม่ได้ดึงข้อมูล โปรดทราบว่ามีการเปลี่ยนแปลงลายเซ็นของ ProductDetailsResponseListener.onProductDetailsResponse() ซึ่ง ต้องมีการเปลี่ยนแปลงในแอปของคุณ ดูข้อมูลเพิ่มเติมได้ที่ประมวลผล ผลลัพธ์

  • เชื่อมต่อบริการอีกครั้งโดยอัตโนมัติ

    พารามิเตอร์ BillingClient.Builder.enableAutoServiceReconnection() builder ใหม่ช่วยให้นักพัฒนาแอปเลือกใช้การเชื่อมต่อบริการใหม่โดยอัตโนมัติได้ ซึ่งช่วยลดความซับซ้อนในการจัดการการเชื่อมต่อด้วยการจัดการการเชื่อมต่อใหม่กับบริการ Play Billing โดยอัตโนมัติ และไม่จำเป็นต้องเรียกใช้ startConnection() ด้วยตนเองในกรณีที่บริการถูกตัดการเชื่อมต่อ ดูข้อมูลเพิ่มเติมได้ที่สร้างการเชื่อมต่อใหม่โดยอัตโนมัติ

  • รหัสการตอบกลับย่อยสำหรับเมธอด launchBillingFlow()

    ตอนนี้ BillingResult ที่ส่งคืนจาก launchBillingFlow() จะมี ฟิลด์รหัสการตอบกลับย่อย ระบบจะป้อนข้อมูลในฟิลด์นี้ในบางกรณีเท่านั้น เพื่อระบุเหตุผลที่เฉพาะเจาะจงมากขึ้นสำหรับความล้มเหลว ฟิลด์การตอบกลับย่อย อาจมีค่าต่อไปนี้

    • PAYMENT_DECLINED_DUE_TO_INSUFFICIENT_FUNDS - แสดงเมื่อผู้ใช้มีเงินน้อยกว่าราคาของไอเทมที่พยายามซื้อ
    • USER_INELIGIBLE - แสดงเมื่อผู้ใช้ไม่เป็นไปตามข้อกำหนดด้านการมีสิทธิ์ที่กำหนดค่าไว้ สำหรับข้อเสนอการสมัครใช้บริการ
    • NO_APPLICABLE_SUB_RESPONSE_CODE - ค่าเริ่มต้นที่แสดงเมื่อไม่มีรหัสการตอบกลับย่อยอื่นๆ ที่เกี่ยวข้อง
  • นำวิธีการ queryPurchaseHistory() ออกแล้ว

    ตอนนี้เราได้นำวิธีการ queryPurchaseHistory() ที่ก่อนหน้านี้มีการทำเครื่องหมายว่า เลิกใช้งานแล้วออกแล้ว ดูรายละเอียดเกี่ยวกับ API ทางเลือกที่จะใช้แทนได้ที่ค้นหาประวัติการซื้อ

  • นำวิธีการ querySkuDetailsAsync() ออกแล้ว

    ระบบได้นำวิธีการ querySkuDetailsAsync() ที่ก่อนหน้านี้มีการทำเครื่องหมายว่าเลิกใช้งานแล้ว ออกแล้ว คุณควรใช้ queryProductDetailsAsync แทน

  • นำวิธีการ BillingClient.Builder.enablePendingPurchases() ออกแล้ว

    ตอนนี้เราได้นำเมธอด enablePendingPurchases() ที่ไม่มีพารามิเตอร์ซึ่งก่อนหน้านี้ มีการทำเครื่องหมายว่าเลิกใช้งานแล้วออกแล้ว คุณควรใช้ enablePendingPurchases(PendingPurchaseParams params) แทน โปรดทราบว่า enablePendingPurchases() ที่เลิกใช้งานแล้วจะเทียบเท่ากับ enablePendingPurchases(PendingPurchasesParams.newBuilder().enableOneTimeProducts().build()) ในเชิงฟังก์ชัน

  • นำเมธอด queryPurchasesAsync() ที่โอเวอร์โหลดซึ่งใช้ skuType ออก

    ตอนนี้เราได้นำวิธีการ queryPurchasesAsync(String skuType, PurchasesResponseListener listener) ที่ก่อนหน้านี้มีการทำเครื่องหมายว่า เลิกใช้งานแล้วออกแล้ว หรือใช้ queryPurchasesAsync(QueryPurchasesParams queryPurchasesParams, PurchasesResponseListener listener)

เปิดตัว Google Play Billing Library 7.1.1 (03-10-2024)

ตอนนี้ Google Play Billing Library และส่วนขยาย Kotlin เวอร์ชัน 7.1.1 พร้อมให้บริการแล้ว

แก้ไขข้อบกพร่อง

เปิดตัว Google Play Billing Library 7.1.0 (19-09-2024)

ตอนนี้ Google Play Billing Library และส่วนขยาย Kotlin เวอร์ชัน 7.1.0 พร้อมให้บริการแล้ว

สรุปการเปลี่ยนแปลง

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

เปิดตัว Google Play Billing Library 7.0.0 (14-05-2024)

ตอนนี้ Google Play Billing Library และส่วนขยาย Kotlin เวอร์ชัน 7.0.0 พร้อมให้บริการแล้ว

สรุปการเปลี่ยนแปลง

การเปิดตัว Google Play Billing Library 6.2.1 (16-04-2024)

ตอนนี้ Google Play Billing Library เวอร์ชัน 6.2.1 และส่วนขยาย Kotlin พร้อมให้บริการแล้ว

สรุปการเปลี่ยนแปลง

การเปิดตัว Google Play Billing Library 6.2.0 (06-03-2024)

ตอนนี้ Google Play Billing Library เวอร์ชัน 6.2.0 และส่วนขยาย Kotlin พร้อมให้บริการแล้ว

สรุปการเปลี่ยนแปลง

เปิดตัว Google Play Billing Library 6.1.0 (14-11-2023)

ตอนนี้ Google Play Billing Library และส่วนขยาย Kotlin เวอร์ชัน 6.1.0 พร้อมให้บริการแล้ว

สรุปการเปลี่ยนแปลง

การเปิดตัว Google Play Billing Library 6.0.1 (22-06-2023)

ตอนนี้ Google Play Billing Library เวอร์ชัน 6.0.1 และส่วนขยาย Kotlin พร้อมให้บริการแล้ว

สรุปการเปลี่ยนแปลง

อัปเดต Play Billing Library ให้เข้ากันได้กับ Android 14

เปิดตัว Google Play Billing Library 6.0 (10-05-2023)

ตอนนี้ Google Play Billing Library และส่วนขยาย Kotlin เวอร์ชัน 6.0.0 พร้อมให้บริการแล้ว

สรุปการเปลี่ยนแปลง

  • เพิ่ม enum ReplacementMode ใหม่เพื่อแทนที่ ProrationMode

    โปรดทราบว่า ProrationMode ยังคงพร้อมใช้งานเพื่อเหตุผลด้านความเข้ากันได้แบบย้อนหลัง

  • นำรหัสคำสั่งซื้อสำหรับPENDING การซื้อออกแล้ว

    ก่อนหน้านี้ ระบบจะสร้างรหัสคำสั่งซื้อเสมอแม้ว่าการซื้อจะ รอดำเนินการอยู่ก็ตาม ตั้งแต่เวอร์ชัน 6.0.0 เป็นต้นไป ระบบจะไม่สร้างรหัสคำสั่งซื้อสำหรับการซื้อที่รอดำเนินการ และสำหรับการซื้อเหล่านี้ ระบบจะป้อนรหัสคำสั่งซื้อหลังจากย้ายการซื้อไปยังสถานะPURCHASED

  • นำวิธีการ queryPurchases และ launchPriceConfirmationFlow ออกแล้ว

    ระบบได้นำวิธีการ queryPurchases และ launchPriceConfirmationFlow ที่ ก่อนหน้านี้มีการทำเครื่องหมายว่าเลิกใช้งานแล้วออกใน Play Billing Library 6.0.0 แล้ว นักพัฒนาแอปควรใช้ queryPurchasesAsync แทน queryPurchases สำหรับlaunchPriceConfirmationFlowทางเลือกอื่นๆ โปรดดูการเปลี่ยนแปลงราคา

  • เพิ่มโค้ดตอบกลับข้อผิดพลาดเกี่ยวกับเครือข่ายใหม่

    เราได้เพิ่มรหัสการตอบกลับข้อผิดพลาดเกี่ยวกับเครือข่ายใหม่ NETWORK_ERROR ตั้งแต่ PBL เวอร์ชัน 6.0.0 เป็นต้นไป ระบบจะแสดงรหัสนี้เมื่อ เกิดข้อผิดพลาดเนื่องจากปัญหาการเชื่อมต่อเครือข่าย ก่อนหน้านี้มีการรายงานข้อผิดพลาดในการเชื่อมต่อเครือข่ายเหล่านี้ เป็น SERVICE_UNAVAILABLE

  • อัปเดต SERVICE_UNAVAILABLE และ SERVICE_TIMEOUT

    ตั้งแต่ PBL เวอร์ชัน 6.0.0 เป็นต้นไป ข้อผิดพลาดเนื่องจากหมดเวลาในการประมวลผลจะ แสดงเป็น SERVICE_UNAVAILABLE แทน SERVICE_TIMEOUT ในปัจจุบัน

    ลักษณะการทำงานจะไม่เปลี่ยนแปลงใน PBL เวอร์ชันก่อนหน้า

  • นำออกแล้ว SERVICE_TIMEOUT

    ตั้งแต่ PBL เวอร์ชัน 6.0.0 เป็นต้นไป ระบบจะไม่แสดง SERVICE_TIMEOUT อีกต่อไป PBL เวอร์ชันก่อนหน้าจะยังคงแสดงรหัสนี้

  • เพิ่มการบันทึกเพิ่มเติม

    การเปิดตัว Play Billing Library 6 มีการบันทึกเพิ่มเติม ซึ่งจะให้ข้อมูลเชิงลึกเกี่ยวกับการใช้งาน API (เช่น สำเร็จและล้มเหลว) และปัญหาการเชื่อมต่อบริการ ระบบจะใช้ข้อมูลนี้เพื่อปรับปรุงประสิทธิภาพ ของ Play Billing Library และให้การสนับสนุนข้อผิดพลาดได้ดียิ่งขึ้น

การเปิดตัว Google Play Billing Library 5.2.1 (22-06-2023)

ตอนนี้ Google Play Billing Library เวอร์ชัน 5.2.1 และส่วนขยาย Kotlin พร้อมให้บริการแล้ว

สรุปการเปลี่ยนแปลง

อัปเดต Play Billing Library ให้เข้ากันได้กับ Android 14

การเปิดตัว Google Play Billing Library 5.2 (06-04-2023)

ตอนนี้ Google Play Billing Library เวอร์ชัน 5.2.0 และส่วนขยาย Kotlin พร้อมให้บริการแล้ว

สรุปการเปลี่ยนแปลง

เปิดตัว Google Play Billing Library 5.1 (31-10-2022)

ตอนนี้ Google Play Billing Library และส่วนขยาย Kotlin เวอร์ชัน 5.1.0 พร้อมให้บริการแล้ว

เวอร์ชันนี้มีการเปลี่ยนแปลงต่อไปนี้

สรุปการเปลี่ยนแปลง

เปิดตัว Google Play Billing Library 5.0 (11-05-2022)

ตอนนี้ Google Play Billing Library และส่วนขยาย Kotlin เวอร์ชัน 5.0.0 พร้อมให้บริการแล้ว

เวอร์ชันนี้มีการเปลี่ยนแปลงต่อไปนี้

สรุปการเปลี่ยนแปลง

  • เปิดตัวรูปแบบใหม่สำหรับการสมัครใช้บริการ รวมถึงเอนทิตีใหม่ที่ช่วยให้คุณสร้างข้อเสนอหลายรายการสำหรับผลิตภัณฑ์ที่ต้องสมัครใช้บริการเดียวได้ ดูข้อมูลเพิ่มเติมได้ที่คำแนะนำในการย้ายข้อมูล
  • เพิ่ม BillingClient.queryProductDetailsAsync() เพื่อแทนที่ BillingClient.querySkuDetailsAsync()
  • เพิ่มsetIsOfferPersonalized() วิธีการสำหรับข้อกำหนดการเปิดเผยข้อมูล การกำหนดราคาที่ปรับตามโปรไฟล์ของผู้ใช้ใน EU ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีใช้วิธีนี้ได้ที่ ระบุราคาที่ปรับตามโปรไฟล์ของผู้ใช้
  • นำ queryPurchases() ออก ซึ่งก่อนหน้านี้ได้เลิกใช้แล้วและแทนที่ด้วย queryPurchasesAsync ที่เปิดตัวใน Google Play Billing Library 4.0.0
  • launchPriceChangeFlow เลิกใช้งานแล้วและจะถูกนำออกในรุ่นต่อๆ ไป ดูข้อมูลเพิ่มเติมเกี่ยวกับทางเลือกอื่นๆ ได้ที่เปิดตัวขั้นตอนการยืนยันการเปลี่ยนแปลงราคา
  • Removed setVrPurchaseFlow(), ซึ่งใช้ก่อนหน้านี้เมื่อสร้างอินสแตนซ์ขั้นตอนการซื้อ ในเวอร์ชันก่อนหน้า วิธีนี้จะเปลี่ยนเส้นทางผู้ใช้ให้ทำการซื้อให้เสร็จสมบูรณ์ในอุปกรณ์ที่ใช้ Android เมื่อนำวิธีการนี้ออกแล้ว ผู้ใช้จะทำการซื้อให้เสร็จสมบูรณ์ผ่านขั้นตอนการซื้อมาตรฐาน

เปิดตัว Google Play Billing Library 4.1 (23-02-2022)

ตอนนี้ Google Play Billing Library และส่วนขยาย Kotlin เวอร์ชัน 4.1.0 พร้อมให้บริการแล้ว

เวอร์ชันนี้มีการเปลี่ยนแปลงต่อไปนี้

สรุปการเปลี่ยนแปลง

  • เพิ่ม BillingClient.showInAppMessages() เพื่อช่วยจัดการการชำระเงินสำหรับการสมัครใช้บริการที่ถูกปฏิเสธ ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีใช้การรับส่งข้อความในแอปเพื่อจัดการการชำระเงินสำหรับการสมัครใช้บริการที่ถูกปฏิเสธได้ที่การจัดการการชำระเงินที่ถูกปฏิเสธ

เปิดตัว Google Play Billing Library 4.0 (18-05-2021)

ตอนนี้ Google Play Billing Library และส่วนขยาย Kotlin เวอร์ชัน 4.0.0 พร้อมให้บริการแล้ว

สรุปการเปลี่ยนแปลง

  • เพิ่ม BillingClient.queryPurchasesAsync() เพื่อแทนที่ BillingClient.queryPurchases() ซึ่งจะถูกนำออกในรุ่นต่อๆ ไป

  • เพิ่มโหมดการแทนที่การสมัครใช้บริการใหม่ IMMEDIATE_AND_CHARGE_FULL_PRICE

  • เพิ่ม BillingClient.getConnectionState() เมธอดเพื่อดึงสถานะการเชื่อมต่อของ Play Billing Library

  • อัปเดต Javadoc และการใช้งานเพื่อระบุว่าเรียกใช้เมธอดในเธรดใดได้ และโพสต์ผลลัพธ์ในเธรดใด

  • เพิ่ม BillingFlowParams.Builder.setSubscriptionUpdateParams() เป็นวิธีใหม่ในการเริ่มการอัปเดตการสมัครใช้บริการ ซึ่งจะแทนที่ BillingFlowParams#getReplaceSkusProrationMode BillingFlowParams#getOldSkuPurchaseToken BillingFlowParams#getOldSku BillingFlowParams.Builder#setReplaceSkusProrationMode BillingFlowParams.Builder#setOldSku ซึ่งถูกนำออกไปแล้ว

  • เพิ่ม Purchase.getQuantity() และ PurchaseHistoryRecord.getQuantity()

  • เพิ่ม Purchase#getSkus() และ PurchaseHistoryRecord#getSkus() ซึ่งจะมาแทนที่ Purchase#getSku และ PurchaseHistoryRecord#getSku ที่ ถูกนำออกไป

  • นำ BillingFlowParams#getSku, BillingFlowParams#getSkuDetails และ BillingFlowParams#getSkuType ออกแล้ว

การเปิดตัว Google Play Billing Library 3.0.3 (12-03-2021)

ตอนนี้ Google Play Billing Library, ส่วนขยาย Kotlin และปลั๊กอิน Unity เวอร์ชัน 3.0.3 พร้อมให้บริการแล้ว

การแก้ไขข้อบกพร่องของ Java และ Kotlin

  • แก้ไขหน่วยความจำรั่วไหลเมื่อมีการเรียกใช้ endConnection()
  • แก้ไขปัญหาเมื่อแอปที่ใช้โหมดเปิดใช้งานแบบงานเดียวใช้ Google Play Billing Library ระบบจะทริกเกอร์ onPurchasesUpdated() การเรียกกลับเมื่อแอปกลับมาทำงานต่อจาก Android Launcher และกล่องโต้ตอบการเรียกเก็บเงินปรากฏขึ้นก่อนที่จะถูกระงับ

การแก้ไขข้อบกพร่องของ Unity

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

การเปิดตัว Google Play Billing Library 3.0.2 (24-11-2020)

ตอนนี้ Google Play Billing Library และส่วนขยาย Kotlin เวอร์ชัน 3.0.2 พร้อมให้บริการแล้ว

แก้ไขข้อบกพร่อง

  • แก้ไขข้อบกพร่องในส่วนขยาย Kotlin ที่โครูทีนล้มเหลวโดยมีข้อผิดพลาด "Already resumed"
  • แก้ไขการอ้างอิงที่ยังไม่ได้รับการแก้ไขเมื่อใช้ส่วนขยาย Kotlin กับไลบรารี kotlinx.coroutines เวอร์ชัน 1.4 ขึ้นไป

การเปิดตัว Google Play Billing Library 3.0.1 (30-09-2020)

ตอนนี้ Google Play Billing Library และส่วนขยาย Kotlin เวอร์ชัน 3.0.1 พร้อมใช้งานแล้ว

แก้ไขข้อบกพร่อง

  • แก้ไขข้อบกพร่องที่ทำให้ระบบอาจไม่เรียกใช้ PurchasesUpdatedListener พร้อมผลการซื้อหากมีการปิดและกู้คืนแอปในระหว่างขั้นตอนการเรียกเก็บเงิน

การเปิดตัว Google Play Billing Library 3.0 (08-06-2020)

ตอนนี้ Google Play Billing Library, ส่วนขยาย Kotlin และปลั๊กอิน Unity เวอร์ชัน 3.0.0 พร้อมให้บริการแล้ว

สรุปการเปลี่ยนแปลง

  • นำการรองรับ SKU ที่มีรางวัลออก
  • นำพารามิเตอร์ ChildDirected และ UnderAgeOfConsent ออก
  • นำวิธีการเพย์โหลดของนักพัฒนาแอปที่เลิกใช้งานแล้วออก
  • นำเมธอด BillingFlowParams.setAccountId() และ BillingFlowParams.setDeveloperId() ที่เลิกใช้งานแล้วออก
  • นำเมธอด BillingFlowParams.setOldSkus(String oldSku) และ BillingFlowParams.addOldSku(String oldSku) ที่เลิกใช้งานแล้วออก
  • เพิ่มคำอธิบายประกอบความสามารถในการเว้นว่าง

แก้ไขข้อบกพร่อง

  • SkuDetails.getIntroductoryPriceCycles() ตอนนี้จะแสดงผล int แทน String
  • แก้ไขข้อบกพร่องที่ระบบจะถือว่าขั้นตอนการเรียกเก็บเงินมีพารามิเตอร์เพิ่มเติม แม้ว่าจะไม่ได้ตั้งค่าพารามิเตอร์เพิ่มเติมก็ตาม

การเปิดตัว Google Play Billing Library 2.2.1 (20-05-2020)

ตอนนี้ Google Play Billing Library เวอร์ชัน 2.2.1 พร้อมใช้งานแล้ว

แก้ไขข้อบกพร่อง

  • อัปเดตไลบรารีการเรียกเก็บเงินของ Java Play เวอร์ชันเริ่มต้นที่ส่วนขยาย Kotlin ใช้

การเปิดตัว Google Play Billing Library 2.2.0 และการรองรับ Unity (23-03-2020)

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

Google Play Billing Billing Library 2 สำหรับ Unity

นอกจาก Google Play Billing เวอร์ชัน Java และ Kotlin ปัจจุบัน Library 2 แล้ว เรายังได้เปิดตัวไลบรารีเวอร์ชันที่ใช้กับ Unity ได้ด้วย นักพัฒนาเกมที่ใช้ API การซื้อในแอปของ Unity สามารถอัปเกรดตอนนี้เพื่อใช้ประโยชน์จากฟีเจอร์ทั้งหมดของ Google Play Billing Library 2 และเพื่อให้อัปเกรดเป็น Google Play Billing Library เวอร์ชันในอนาคตได้ง่ายขึ้น

ดูข้อมูลเพิ่มเติมได้ที่ใช้ Google Play Billing กับ Unity

สรุปการเปลี่ยนแปลง

การเปิดตัว Google Play Billing Library 2.1.0 และการเปิดตัวส่วนขยาย Kotlin 2.1.0 (10-12-2019)

ตอนนี้ Google Play Billing Library เวอร์ชัน 2.1.0 และส่วนขยาย Kotlin ใหม่พร้อมใช้งานแล้ว ส่วนขยาย Kotlin ของ Play Billing Library มีทางเลือก API ที่เป็นสำนวน สำหรับการใช้งาน Kotlin ซึ่งมี Null Safety และ โครูทีนที่ดีกว่า ดูตัวอย่างโค้ดได้ที่ใช้ Google Play Billing Library

เวอร์ชันนี้มีการเปลี่ยนแปลงต่อไปนี้

สรุปการเปลี่ยนแปลง

  • ใน BillingFlowParams เลิกใช้งาน setOldSku(String oldSku) และแทนที่ด้วย setOldSku(String oldSku, String purchaseToken) เพื่อแยกความแตกต่างเมื่อหลายบัญชีใน อุปกรณ์เป็นเจ้าของ SKU เดียวกัน

การเปิดตัว Google Play Billing Library 2.0.3 (05-08-2019)

ตอนนี้ Google Play Billing Library เวอร์ชัน 2.0.3 พร้อมใช้งานแล้ว

แก้ไขข้อบกพร่อง

  • แก้ไขข้อบกพร่องที่ทำให้ querySkuDetailsAsync() ล้มเหลวเป็นครั้งคราวโดยมีรหัส DEVELOPER_ERROR แทนที่จะแสดงผลลัพธ์ที่สำเร็จ

การเปิดตัว Google Play Billing Library 2.0.2 (08-07-2019)

ตอนนี้ Google Play Billing Library เวอร์ชัน 2.0.2 พร้อมให้บริการแล้ว การเปิดตัวนี้ มีการอัปเดตเอกสารอ้างอิงและไม่ได้เปลี่ยนแปลงฟังก์ชันการทำงานของไลบรารี

การเปิดตัว Google Play Billing Library 2.0.1 (06-06-2019)

ตอนนี้ Google Play Billing Library เวอร์ชัน 2.0.1 พร้อมใช้งานแล้ว เวอร์ชันนี้ มีการเปลี่ยนแปลงต่อไปนี้

แก้ไขข้อบกพร่อง

  • แก้ไขข้อบกพร่องที่ทำให้ระบบแสดงข้อความแก้ไขข้อบกพร่องเป็น null ในบางกรณี
  • แก้ไขปัญหาหน่วยความจำรั่วที่อาจเกิดขึ้น

การเปิดตัว Google Play Billing Library 2.0 (07-05-2019)

ตอนนี้ Google Play Billing Library เวอร์ชัน 2.0 พร้อมให้บริการแล้ว เวอร์ชันนี้ มีการเปลี่ยนแปลงต่อไปนี้

ต้องรับทราบการซื้อภายใน 3 วัน

Google Play รองรับการซื้อผลิตภัณฑ์จากภายในแอป (ในแอป) หรือ ภายนอกแอป (นอกแอป) เพื่อให้ Google Play มั่นใจได้ว่าผู้ใช้จะได้รับ ประสบการณ์การซื้อที่สอดคล้องกันไม่ว่าจะซื้อผลิตภัณฑ์ของคุณจากที่ใด คุณต้องรับทราบการซื้อทั้งหมดที่ได้รับผ่าน Google Play Billing Library โดยเร็วที่สุดหลังจากให้สิทธิ์แก่ผู้ใช้ หากคุณไม่รับทราบการซื้อภายใน 3 วัน ผู้ใช้จะได้รับเงินคืนโดยอัตโนมัติ และ Google Play จะเพิกถอนการซื้อดังกล่าว สําหรับธุรกรรมที่รอดําเนินการ (ใหม่ในเวอร์ชัน 2.0) กรอบเวลา 3 วันจะเริ่มเมื่อการซื้อเปลี่ยนเป็นสถานะ PURCHASED และจะไม่มีผลในขณะที่การซื้ออยู่ในสถานะ PENDING

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

ตอนนี้ออบเจ็กต์ Purchase มีเมธอด isAcknowledged() ที่ระบุว่ามีการรับทราบการซื้อหรือไม่ นอกจากนี้ Google Play Developer API ยังมีค่าบูลีนการรับทราบสำหรับทั้ง Purchases.products และ Purchases.subscriptions ด้วย ก่อนที่จะรับทราบการซื้อ โปรดใช้วิธีการเหล่านี้เพื่อพิจารณาว่ามีการรับทราบการซื้อแล้วหรือไม่

คุณรับทราบการซื้อได้โดยใช้วิธีใดวิธีหนึ่งต่อไปนี้

  • สำหรับผลิตภัณฑ์ที่ใช้แล้วหมดไป ให้ใช้ consumeAsync() ซึ่งอยู่ใน Client API
  • สำหรับผลิตภัณฑ์ที่ไม่ได้ใช้ ให้ใช้ acknowledgePurchase() ซึ่งอยู่ใน Client API
  • นอกจากนี้ยังมีเมธอด acknowledge() ใหม่ใน Server API ด้วย

นำ BillingFlowParams.setSku() ออกแล้ว

เราได้นำเมธอด BillingFlowParams#setSku() ที่เลิกใช้ไปก่อนหน้านี้ออกแล้ว ในการเปิดตัวครั้งนี้ ก่อนที่จะแสดงผลิตภัณฑ์ในขั้นตอนการซื้อ ตอนนี้คุณต้องเรียกใช้ BillingClient.querySkuDetailsAsync() โดยส่งออบเจ็กต์ SkuDetails ที่ได้ไปยัง BillingFlowParams.Builder.setSkuDetails()

ดูตัวอย่างโค้ดได้ที่ใช้ Google Play Billing Library

ระบบรองรับเพย์โหลดของนักพัฒนาแอป

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

หากต้องการเข้าถึงเพย์โหลดในไลบรารีใหม่ ตอนนี้ออบเจ็กต์ Purchase มีเมธอด getDeveloperPayload() แล้ว

ข้อเสนอที่สอดคล้องกัน

เมื่อคุณเสนอ SKU ที่ลดราคา ตอนนี้ Google Play จะแสดงราคาเดิมของ SKU เพื่อให้คุณแสดงให้ผู้ใช้เห็นว่าตนได้รับส่วนลด

SkuDetails มี 2 วิธีใหม่ ในการดึงราคาเดิมของ SKU ดังนี้

  • getOriginalPriceAmountMicros()
    • แสดงผลราคาเดิมของ SKU ก่อนใช้ส่วนลดที่ไม่ได้จัดรูปแบบ
  • getOriginalPrice()
    • จะแสดงราคาเดิมพร้อมการจัดรูปแบบสกุลเงินเพิ่มเติม

ธุรกรรมที่รอดำเนินการ

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

หากต้องการเปิดใช้การซื้อที่รอดำเนินการ ให้เรียกใช้ enablePendingPurchases() เป็นส่วนหนึ่งของการเริ่มต้นแอป

ใช้ Purchase.getPurchaseState() เพื่อตรวจสอบว่าสถานะการซื้อเป็น PURCHASED หรือ PENDING โปรดทราบว่า คุณควรมอบสิทธิ์เฉพาะเมื่อสถานะเป็น PURCHASED คุณควร ตรวจสอบPurchaseข้อมูลอัปเดตสถานะโดยทำดังนี้

  1. เมื่อเริ่มต้นแอป ให้เรียกใช้ BillingClient.queryPurchases() เพื่อดึงรายการผลิตภัณฑ์ที่ยังไม่ได้ใช้ซึ่งเชื่อมโยงกับผู้ใช้
  2. เรียกใช้ Purchase.getPurchaseState() ในออบเจ็กต์ Purchase ที่แสดงผลแต่ละรายการ
  3. ใช้เมธอด onPurchasesUpdated() เพื่อตอบสนองต่อการเปลี่ยนแปลงออบเจ็กต์ Purchase

นอกจากนี้ Google Play Developer API ยังมีPENDINGสถานะสำหรับ Purchases.products ด้วย ระบบไม่รองรับธุรกรรมที่รอดำเนินการสำหรับการสมัครใช้บริการ

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

เมื่อรับทราบการซื้อที่รอดำเนินการ โปรดตรวจสอบว่าคุณรับทราบเฉพาะเมื่อ สถานะการซื้อเป็น PURCHASED และไม่ใช่ PENDING

การเปลี่ยนแปลง API

ไลบรารีการเรียกเก็บเงินของ Google Play เวอร์ชัน 2.0 มีการเปลี่ยนแปลง API หลายอย่างเพื่อ รองรับฟีเจอร์ใหม่และอธิบายฟังก์ชันที่มีอยู่ให้ชัดเจน

consumeAsync

consumeAsync() ตอนนี้รับออบเจ็กต์ ConsumeParams แทน purchaseToken แล้ว ConsumeParams มี purchaseToken รวมถึงเพย์โหลดของนักพัฒนาแอปที่ไม่บังคับ

เราได้นำconsumeAsync() เวอร์ชันก่อนหน้าออกในรุ่นนี้

queryPurchaseHistoryAsync

เพื่อลดความสับสน queryPurchaseHistoryAsync() จะแสดงผลออบเจ็กต์ PurchaseHistoryRecord แทนออบเจ็กต์ Purchase ออบเจ็กต์ PurchaseHistoryRecord เหมือน กับออบเจ็กต์ Purchase ยกเว้นว่าออบเจ็กต์ จะแสดงเฉพาะค่าที่ queryPurchaseHistoryAsync() ส่งคืน และไม่มีฟิลด์ autoRenewing, orderId และ packageName โปรดทราบว่าไม่มีการเปลี่ยนแปลงใดๆ กับข้อมูลที่ส่งคืน queryPurchaseHistoryAsync() จะส่งคืนข้อมูลเดียวกันกับก่อนหน้านี้

ค่าที่แสดงผลของ BillingResult

API ที่ก่อนหน้านี้แสดงผลค่าจำนวนเต็ม BillingResponse จะแสดงผลออบเจ็กต์ BillingResult แทน BillingResult มีจำนวนเต็ม BillingResponse รวมถึง สตริงการแก้ไขข้อบกพร่องที่คุณใช้เพื่อวินิจฉัยข้อผิดพลาดได้ สตริงการแก้ไขข้อบกพร่องใช้ภาษา en-US และไม่ได้มีไว้เพื่อแสดงต่อผู้ใช้ปลายทาง

แก้ไขข้อบกพร่อง

การเปิดตัว Google Play Billing Library 1.2.2 (07-03-2019)

ตอนนี้ Google Play Billing Library เวอร์ชัน 1.2.2 พร้อมให้บริการแล้ว เวอร์ชันนี้ มีการเปลี่ยนแปลงต่อไปนี้

แก้ไขข้อบกพร่อง

  • แก้ไขปัญหาการแยกเธรดที่เกิดขึ้นใน v1.2.1 การเรียกใช้ในเบื้องหลังจะไม่บล็อกเทรดหลักอีกต่อไป

การเปลี่ยนแปลงอื่นๆ

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

การเปิดตัว Play Billing Library 1.2.1 (04-03-2019)

ตอนนี้ Google Play Billing Library เวอร์ชัน 1.2.1 พร้อมให้บริการแล้ว เวอร์ชันนี้ มีการเปลี่ยนแปลงต่อไปนี้

การเปลี่ยนแปลงที่สำคัญ

การเปลี่ยนแปลงอื่นๆ

  • เพิ่มตัวสร้างสาธารณะสำหรับ PurchasesResult และ SkuDetailsResult เพื่อให้การทดสอบง่ายขึ้น
  • ออบเจ็กต์ SkuDetails สามารถใช้วิธีการใหม่ getOriginalJson() ได้
  • ตอนนี้เธรดเบื้องหลังจะจัดการการเรียกบริการ AIDL ทั้งหมดแล้ว

แก้ไขข้อบกพร่อง

  • ระบบจะไม่ส่งเครื่องมือฟังการเรียกกลับที่เป็น Null ไปยัง API สาธารณะอีกต่อไป

เปิดตัว Google Play Billing Library 1.2 (18-10-2018)

ตอนนี้ Google Play Billing Library เวอร์ชัน 1.2 พร้อมให้บริการแล้ว เวอร์ชันนี้ มีการเปลี่ยนแปลงต่อไปนี้

สรุปการเปลี่ยนแปลง

  • ตอนนี้ Play Billing Library ได้รับอนุญาตภายใต้ข้อตกลงใบอนุญาตชุดพัฒนาซอฟต์แวร์ Android แล้ว
  • เพิ่ม launchPriceChangeConfirmationFlow API ซึ่งจะแจ้งให้ผู้ใช้ตรวจสอบการเปลี่ยนแปลงที่รอดำเนินการของราคาการสมัครใช้บริการ
  • เพิ่มการรองรับโหมดการคิดตามสัดส่วนใหม่ DEFERRED เมื่ออัปเกรดหรือ ดาวน์เกรดการสมัครใช้บริการของผู้ใช้
  • ในคลาส BillingFlowParams เราใช้ setSkuDetails() แทน setSku()
  • แก้ไขข้อบกพร่องเล็กน้อยและเพิ่มประสิทธิภาพโค้ด

การยืนยันการเปลี่ยนแปลงราคา

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

หากต้องการใช้ API นี้ ให้สร้างออบเจ็กต์ PriceChangeFlowParams โดยใช้ skuDetails ของผลิตภัณฑ์ที่ต้องสมัครใช้บริการ แล้วเรียกใช้ launchPriceChangeConfirmationFlow() ใช้ PriceChangeConfirmationListener เพื่อจัดการผลลัพธ์เมื่อขั้นตอนการยืนยัน การเปลี่ยนแปลงราคาเสร็จสิ้น ดังที่แสดงในข้อมูลโค้ดต่อไปนี้

Kotlin

val priceChangeFlowParams = PriceChangeFlowParams.newBuilder()
    .setSkuDetails(skuDetailsOfThePriceChangedSubscription)
    .build()

billingClient.launchPriceChangeConfirmationFlow(activity,
        priceChangeFlowParams,
        object : PriceChangeConfirmationListener() {
            override fun onPriceChangeConfirmationResult(responseCode: Int) {
                // Handle the result.
            }
        })

Java

PriceChangeFlowParams priceChangeFlowParams =
        PriceChangeFlowParams.newBuilder()
    .setSkuDetails(skuDetailsOfThePriceChangedSubscription)
    .build();

billingClient.launchPriceChangeConfirmationFlow(activity,
        priceChangeFlowParams,
        new PriceChangeConfirmationListener() {
            @Override
            public void onPriceChangeConfirmationResult(int responseCode) {
                // Handle the result.
            }
        });

ขั้นตอนการยืนยันการเปลี่ยนแปลงราคาจะแสดงกล่องโต้ตอบที่มีข้อมูลราคาใหม่ และขอให้ผู้ใช้ยอมรับราคาใหม่ โฟลว์นี้จะแสดงรหัสการตอบกลับ ประเภท BillingClient.BillingResponse

โหมดการคิดราคาตามส่วนใหม่

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

วิธีใหม่ในการตั้งค่ารายละเอียด SKU

ในคลาส BillingFlowParams ระบบได้เลิกใช้งานเมธอด setSku() แล้ว การเปลี่ยนแปลงนี้มีไว้เพื่อเพิ่มประสิทธิภาพขั้นตอนการเรียกเก็บเงินของ Google Play

เมื่อสร้างอินสแตนซ์ใหม่ของ BillingFlowParams ในไคลเอ็นต์การเรียกเก็บเงินในแอป เราขอแนะนำให้คุณทำงานกับออบเจ็กต์ JSON โดยตรงแทนโดยใช้ setSkuDetails() ดังที่แสดงในข้อมูลโค้ดต่อไปนี้

ในคลาส BillingFlowParams Builder เราได้เลิกใช้งานเมธอด setSku() แล้ว แต่ให้ใช้เมธอด setSkuDetails() แทน ดังที่แสดงในข้อมูลโค้ดต่อไปนี้ ออบเจ็กต์ที่ส่งไปยังออบเจ็กต์ setSkuDetails() มาจากเมธอด querySkuDetailsAsync()

Kotlin

private lateinit var mBillingClient: BillingClient
private val mSkuDetailsMap = HashMap<String, SkuDetails>()

private fun querySkuDetails() {
    val skuDetailsParamsBuilder = SkuDetailsParams.newBuilder()
    mBillingClient.querySkuDetailsAsync(skuDetailsParamsBuilder.build()
    ) { responseCode, skuDetailsList ->
        if (responseCode == 0) {
            for (skuDetails in skuDetailsList) {
                mSkuDetailsMap[skuDetails.sku] = skuDetails
            }
        }
    }
}

private fun startPurchase(skuId: String) {
    val billingFlowParams = BillingFlowParams.newBuilder()
    .setSkuDetails(mSkuDetailsMap[skuId])
    .build()
}

Java

private BillingClient mBillingClient;
private Map<String, SkuDetails> mSkuDetailsMap = new HashMap<>();

private void querySkuDetails() {
    SkuDetailsParams.Builder skuDetailsParamsBuilder
            = SkuDetailsParams.newBuilder();
    mBillingClient.querySkuDetailsAsync(skuDetailsParamsBuilder.build(),
            new SkuDetailsResponseListener() {
                @Override
                public void onSkuDetailsResponse(int responseCode,
                        List<SkuDetails> skuDetailsList) {
                    if (responseCode == 0) {
                        for (SkuDetails skuDetails : skuDetailsList) {
                            mSkuDetailsMap.put(skuDetails.getSku(), skuDetails);
                        }
                    }
                }
            });
}

private void startPurchase(String skuId) {
    BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder()
            .setSkuDetails(mSkuDetailsMap.get(skuId))
            .build();
}

การเปิดตัว Play Billing Library 1.1 (07-05-2018)

ตอนนี้ Google Play Billing Library เวอร์ชัน 1.1 พร้อมให้บริการแล้ว เวอร์ชันนี้ มีการเปลี่ยนแปลงต่อไปนี้

สรุปการเปลี่ยนแปลง

  • เพิ่มการรองรับการระบุโหมดการปันส่วนตามสัดส่วนใน BillingFlowParams เมื่ออัปเกรด/ดาวน์เกรดการสมัครใช้บริการที่มีอยู่
  • ระบบไม่รองรับค่าสถานะบูลีน replaceSkusProration ใน BillingFlowParams อีกต่อไป โปรดใช้ replaceSkusProrationMode แทน
  • launchBillingFlow() จะทริกเกอร์การเรียกกลับ สำหรับการตอบกลับที่ไม่สำเร็จ

การเปลี่ยนแปลงพฤติกรรม

ไลบรารี Google Play Billing เวอร์ชัน 1.1 มีการเปลี่ยนแปลงลักษณะการทำงานต่อไปนี้

นักพัฒนาแอปสามารถตั้งค่า replaceSkusProrationMode ในคลาส BillingFlowParams ได้

ProrationMode จะให้รายละเอียดเพิ่มเติมเกี่ยวกับประเภทการปันส่วนตามสัดส่วนเมื่อ อัปเกรดหรือดาวน์เกรดการสมัครใช้บริการของผู้ใช้

Kotlin

BillingFlowParams.newBuilder()
    .setSku(skuId)
    .setType(billingType)
    .setOldSku(oldSku)
    .setReplaceSkusProrationMode(replaceSkusProrationMode)
    .build()

Java

BillingFlowParams.newBuilder()
    .setSku(skuId)
    .setType(billingType)
    .setOldSku(oldSku)
    .setReplaceSkusProrationMode(replaceSkusProrationMode)
    .build();

Google Play รองรับโหมดการปันส่วนตามสัดส่วนต่อไปนี้

IMMEDIATE_WITH_TIME_PRORATION การเปลี่ยนจะมีผลทันที และระบบจะคำนวณเวลาหมดอายุใหม่ตามสัดส่วนและ เครดิตหรือเรียกเก็บเงินจากผู้ใช้ นี่คือลักษณะการทำงานเริ่มต้นปัจจุบัน
IMMEDIATE_AND_CHARGE_PRORATED_PRICE การเปลี่ยนจะมีผลทันทีและรอบการเรียกเก็บเงินจะยังคงเหมือนเดิม ระบบจะเรียกเก็บเงินสำหรับ ระยะเวลาที่เหลือ

หมายเหตุ: ตัวเลือกนี้ใช้ได้กับการอัปเกรดการสมัครใช้บริการเท่านั้น

IMMEDIATE_WITHOUT_PRORATION การแทนที่จะมีผลทันที และระบบจะเรียกเก็บเงินในราคาใหม่เมื่อมีการเรียกเก็บเงินตามรอบครั้งถัดไป รอบการเรียกเก็บเงินจะยังคงเหมือนเดิม

ระบบไม่รองรับ replaceSkusProration ในชั้นเรียน BillingFlowParams อีกต่อไป

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

launchBillingFlow() จะทริกเกอร์การเรียกกลับสำหรับคำตอบที่ไม่สำเร็จ

Billing Library จะทริกเกอร์แฮนเดิล PurhcasesUpdatedListener เสมอและส่งคืน BillingResponse แบบไม่พร้อมกัน ระบบจะเก็บค่าที่ส่งคืนแบบซิงโครนัสของ BillingResponse ไว้ด้วย

แก้ไขข้อบกพร่อง

  • ออกอย่างถูกต้องในเมธอดแบบอะซิงโครนัสเมื่อบริการถูกตัดการเชื่อมต่อ
  • Builder ออบเจ็กต์ param จะไม่เปลี่ยนแปลงออบเจ็กต์ที่สร้างขึ้นอีกต่อไป
  • ปัญหา 68087141: launchBillingFlow() จะทริกเกอร์การเรียกกลับสำหรับ การตอบกลับที่ล้มเหลวแล้ว

เปิดตัว Google Play Billing Library 1.0 (19-09-2017, ประกาศ)

ตอนนี้ Google Play Billing Library เวอร์ชัน 1.0 พร้อมให้บริการแล้ว เวอร์ชันนี้ มีการเปลี่ยนแปลงต่อไปนี้

การเปลี่ยนแปลงที่สำคัญ

  • สิทธิ์การเรียกเก็บเงินแบบฝังภายในไฟล์ Manifest ของไลบรารี คุณไม่จำเป็นต้อง เพิ่มสิทธิ์ com.android.vending.BILLING ภายในไฟล์ Manifest ของ Android อีกต่อไป
  • เพิ่มเครื่องมือสร้างใหม่ลงในคลาส BillingClient.Builder
  • เปิดตัวรูปแบบ Builder สำหรับคลาส SkuDetailsParams เพื่อใช้ในเมธอดในการค้นหา SKU
  • เราได้อัปเดตเมธอด API หลายรายการเพื่อให้สอดคล้องกัน (ชื่ออาร์กิวเมนต์การคืนค่าและลำดับเดียวกัน)

การเปลี่ยนแปลงพฤติกรรม

Google Play Billing Library เวอร์ชัน 1.0 มีการเปลี่ยนแปลงลักษณะการทำงานต่อไปนี้

คลาส BillingClient.Builder

BillingClient.Builder ตอนนี้เริ่มต้นใช้งานผ่านรูปแบบ newBuilder แล้ว

Kotlin

billingClient = BillingClient.newBuilder(context).setListener(this).build()

Java

billingClient = BillingClient.newBuilder(context).setListener(this).build();

ตอนนี้เมธอด launchBillingFlow จะเรียกใช้โดยใช้คลาส BillingFlowParams

หากต้องการเริ่มโฟลว์การเรียกเก็บเงินสำหรับการซื้อหรือการสมัครใช้บริการ เมธอด launchBillingFlow() จะรับอินสแตนซ์ BillingFlowParams ที่เริ่มต้นด้วยพารามิเตอร์ที่เฉพาะเจาะจงสำหรับคำขอ

Kotlin

BillingFlowParams.newBuilder().setSku(skuId)
        .setType(billingType)
        .setOldSku(oldSku)
        .build()

// Then, use the BillingFlowParams to start the purchase flow
val responseCode = billingClient.launchBillingFlow(builder.build())

Java

BillingFlowParams.newBuilder().setSku(skuId)
                              .setType(billingType)
                              .setOldSku(oldSku)
                              .build();

// Then, use the BillingFlowParams to start the purchase flow
int responseCode = billingClient.launchBillingFlow(builder.build());

วิธีใหม่ในการค้นหาผลิตภัณฑ์ที่พร้อมจำหน่าย

อาร์กิวเมนต์สำหรับเมธอด queryPurchaseHistoryAsync() และ querySkuDetailsAsync() ถูกห่อ ไว้ในรูปแบบ Builder ดังนี้

Kotlin

val params = SkuDetailsParams.newBuilder()
params.setSkusList(skuList)
        .setType(itemType)
billingClient.querySkuDetailsAsync(params.build(), object : SkuDetailsResponseListener() {
    ...
})

Java

SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder();
params.setSkusList(skuList)
        .setType(itemType);
billingClient.querySkuDetailsAsync(params.build(), new SkuDetailsResponseListener() {...})

ตอนนี้ระบบจะแสดงผลลัพธ์ผ่านรหัสผลลัพธ์และรายการออบเจ็กต์ SkuDetails แทนคลาส Wrapper ก่อนหน้าเพื่อความสะดวกและเพื่อให้ สอดคล้องกันใน API ของเรา

Kotlin

fun onSkuDetailsResponse(@BillingResponse responseCode: Int, skuDetailsList: List<SkuDetails>)

Java

public void onSkuDetailsResponse(@BillingResponse int responseCode, List<SkuDetails> skuDetailsList)

เปลี่ยนลำดับพารามิเตอร์ในเมธอด onConsumeResponse()

ลำดับของอาร์กิวเมนต์สำหรับ onConsumeResponse จากอินเทอร์เฟซ ConsumeResponseListener มีการเปลี่ยนแปลงเพื่อให้สอดคล้องกันใน API ของเรา

Kotlin

fun onConsumeResponse(@BillingResponse responseCode: Int, outToken: String)

Java

public void onConsumeResponse(@BillingResponse int responseCode, String outToken)

ออบเจ็กต์ PurchaseResult ที่ไม่ได้ห่อหุ้ม

PurchaseResult ได้รับการยกเลิกการห่อเพื่อให้สอดคล้องกันใน API ของเรา

Kotlin

fun onPurchaseHistoryResponse(@BillingResponse responseCode: Int, purchasesList: List<Purchase>)

Java

void onPurchaseHistoryResponse(@BillingResponse int responseCode, List<Purchase> purchasesList)

แก้ไขข้อบกพร่อง

การเปิดตัวเวอร์ชันตัวอย่างสำหรับนักพัฒนาซอฟต์แวร์ 1 (12-06-2017, ประกาศ)

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

ไลบรารีมีคลาสและฟีเจอร์ที่สะดวกหลายอย่างให้คุณใช้เมื่อ ผสานรวมแอป Android กับ Google Play Billing API นอกจากนี้ ไลบรารียัง มีเลเยอร์การแยกส่วนเหนือบริการ Android Interface Definition Language (AIDL) ซึ่งช่วยให้นักพัฒนาแอปกำหนดอินเทอร์เฟซ ระหว่างแอปกับ Google Play Billing API ได้ง่ายขึ้น