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

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

Google Play Billing Library 9.1.0 Release (18-06-2026)

Google Play Billing Library และส่วนขยาย Kotlin เวอร์ชัน 9.1.0 เผยแพร่แล้ว

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

Google Play Billing Library 9.0.0 Release (19-05-2026)

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

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

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

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

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

  • อัปเดต targetSdkVersion เป็น 35 แล้ว

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

Google Play Billing Library 8.3.0 Release (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 Release (15-12-2025)

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

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

Google Play Billing Library 8.2.0 Release (09-12-2025)

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

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

Google Play Billing Library 8.1.0 Release (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 การสั่งล่วงหน้าสำหรับผลิตภัณฑ์แบบเรียกเก็บเงินครั้งเดียว

    API ProductDetails.oneTimePurchaseOfferDetails.getPreorderDetails() ที่รับรายละเอียดการสั่งจองล่วงหน้าพร้อมให้ใช้งานแล้ว

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

Google Play Billing Library 8.0.0 Release (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 ใหม่ช่วยให้นักพัฒนาแอปเลือกใช้การเชื่อมต่อบริการอีกครั้งโดยอัตโนมัติได้ ซึ่งช่วยลดความซับซ้อนในการจัดการการเชื่อมต่อด้วยการจัดการการเชื่อมต่อกับบริการ Google 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 Release (03-10-2024)

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

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

Google Play Billing Library 7.1.0 Release (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 Release (14-05-2024)

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

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

Google Play Billing Library 6.2.1 Release (16-04-2024)

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

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

Google Play Billing Library 6.2.0 Release (06-03-2024)

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

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

Google Play Billing Library 6.1.0 Release (14-11-2023)

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

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

Google Play Billing Library 6.0.1 Release (22-06-2023)

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

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

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

Google Play Billing Library 6.0 Release (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 และส่วนขยาย Kotlin เวอร์ชัน 5.2.1 พร้อมให้บริการแล้ว

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

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

Google Play Billing Library 5.2 Release (06-04-2023)

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

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

Google Play Billing Library 5.1 Release (31-10-2022)

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

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

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

Google Play Billing Library 5.0 Release (11-05-2022)

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

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

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

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

Google Play Billing Library 4.1 release (2022-02-23)

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

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

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

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

Google Play Billing Library 4.0 Release (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 Release (12-03-2021)

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

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

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

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

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

Google Play Billing Library 3.0.2 Release (24-11-2020)

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

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

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

Google Play Billing Library 3.0.1 Release (30-09-2020)

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

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

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

Google Play Billing Library 3.0 Release (2020-06-08)

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

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

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

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

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

Google Play Billing Library 2.2.1 Release (20-05-2020)

Google Play Billing Library เวอร์ชัน 2.2.1 เผยแพร่แล้ว

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

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

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

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

Google Play Billing Library 2.1.0 Release and Kotlin Extension 2.1.0 Release (2019-12-10)

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

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

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

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

Google Play Billing Library 2.0.3 Release (2019-08-05)

Google Play Billing Library เวอร์ชัน 2.0.3 เผยแพร่แล้ว

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

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

Google Play Billing Library 2.0.2 Release (2019-07-08)

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

Google Play Billing Library 2.0.1 Release (2019-06-06)

ไลบรารี Google Play Billing เวอร์ชัน 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() ซึ่งอยู่ใน API ของไคลเอ็นต์
  • สำหรับผลิตภัณฑ์ที่ไม่ได้ใช้ ให้ใช้ acknowledgePurchase() ซึ่งอยู่ใน API ของไคลเอ็นต์
  • นอกจากนี้ยังมีเมธอด acknowledge() ใหม่ใน Server API ด้วย

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

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

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

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

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

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

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

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

SkuDetails มีเมธอดใหม่ 2 รายการสำหรับการดึงข้อมูลราคา SKU เดิม ดังนี้

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

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

เมื่อใช้ไลบรารี Google Play Billing เวอร์ชัน 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 Billing Library เวอร์ชัน 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 Release (2019-03-07)

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

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

  • แก้ไขปัญหาการแยกชุดข้อความที่เกิดขึ้นในเวอร์ชัน 1.2.1 การเรียกใช้ในเบื้องหลังจะไม่บล็อกเทรดหลักอีกต่อไป

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

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

Play Billing Library 1.2.1 Release (2019-03-04)

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

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

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

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

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

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

Google Play Billing Library 1.2 Release (2018-10-18)

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

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

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

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

ตอนนี้คุณสามารถเปลี่ยนราคาของการสมัครใช้บริการใน 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 Release (2018-05-07)

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

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

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

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

Google Play Billing Library เวอร์ชัน 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() จะทริกเกอร์ Callback สำหรับการตอบกลับที่ไม่สำเร็จ

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

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

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

Google Play Billing Library 1.0 Release (19-09-2017, Announcement)

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)

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

Developer Preview 1 Release (12-06-2017, Announcement)

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

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