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

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

การเปิดตัว 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 มีเมธอดตัวตั้งค่า 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 และส่วนขยาย Kotlin เวอร์ชัน 8.0.0 พร้อมใช้งานแล้ว

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

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

  • ตัวเลือกการซื้อและข้อเสนอหลายรายการสำหรับผลิตภัณฑ์แบบเรียกเก็บเงินครั้งเดียว

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

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

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

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

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

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

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

  • นำ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][billing-result] ซึ่งเผยแพร่ใน Play Billing Library 7.1.1 อย่างเต็มรูปแบบ หากต้องการ ทดสอบการผสานรวมโดยใช้ฟีเจอร์นี้ คุณจะต้องอัปเกรดเป็น Play Billing Library 7.1.1 มีข้อบกพร่องที่จะส่งผลต่อแอปพลิเคชันที่มี [เปิดใช้การทดสอบการลบล้างการเรียกเก็บเงิน][enable-billing-overrides-testing] เท่านั้น และจะ ไม่ส่งผลต่อการใช้งานปกติ ดูข้อมูลเพิ่มเติมได้ที่ทดสอบรหัสการตอบกลับ BillingResult [billing-result]: /reference/com/android/billingclient/api/BillingResult [enable-billing-overrides-testing]: /google/play/billing/test-response-codes#enable-billing-overrides-testing

เปิดตัว 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 เวอร์ชัน 6.1.0 และส่วนขยาย Kotlin พร้อมใช้งานแล้ว

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

การเปิดตัว 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 เวอร์ชัน 6.0.0 และส่วนขยาย Kotlin พร้อมให้บริการแล้ว

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

  • เพิ่ม 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 (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 เลิกใช้งานแล้วและจะถูกนำออกในรุ่นต่อๆ ไป ดูข้อมูลเพิ่มเติมเกี่ยวกับทางเลือกอื่นๆ ได้ที่เปิดตัวขั้นตอนการยืนยัน การเปลี่ยนแปลงราคา
  • นำออก 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 เวอร์ชัน 3.0.2 และส่วนขยาย Kotlin พร้อมใช้งานแล้ว

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

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

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

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

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

  • แก้ไขข้อบกพร่องที่ทำให้ระบบอาจไม่เรียกใช้ 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) ออก
  • เพิ่มคำอธิบายประกอบเกี่ยวกับค่า Null

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

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

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

ตอนนี้ไลบรารีการเรียกเก็บเงินของ Google Play เวอร์ชัน 2.2.1 พร้อมให้บริการแล้ว

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

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

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

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

Google Play 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 และการเปิดตัวส่วนขยาย 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

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

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

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

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

ตอนนี้ไลบรารีการเรียกเก็บเงินของ Google Play เวอร์ชัน 2.0.3 พร้อมให้บริการแล้ว

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

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

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

ตอนนี้ไลบรารีการเรียกเก็บเงินของ Google Play เวอร์ชัน 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 เวอร์ชัน 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

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

Google Play Billing Library เวอร์ชัน 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 เว้นแต่ว่าออบเจ็กต์ PurchaseHistoryRecord จะแสดงเฉพาะค่าที่ 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 เวอร์ชัน 1.2.2 พร้อมให้บริการแล้ว เวอร์ชันนี้ มีการเปลี่ยนแปลงต่อไปนี้

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

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

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

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

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

ตอนนี้ไลบรารี Google Play Billing เวอร์ชัน 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 พร้อมให้บริการแล้ว เวอร์ชันนี้ มีการเปลี่ยนแปลงต่อไปนี้

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

  • ตอนนี้ไลบรารีการเรียกเก็บเงินของ Google Play ได้รับอนุญาตภายใต้ข้อตกลงใบอนุญาตชุดพัฒนาซอฟต์แวร์ Android
  • เพิ่ม API ของ launchPriceChangeConfirmationFlow ซึ่งจะแจ้งให้ผู้ใช้ ตรวจสอบการเปลี่ยนแปลงราคาการสมัครใช้บริการที่รอดำเนินการ
  • เพิ่มการรองรับโหมดการปันส่วนตามสัดส่วนใหม่ 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 เวอร์ชัน 1.1 พร้อมให้บริการแล้ว เวอร์ชันนี้ มีการเปลี่ยนแปลงต่อไปนี้

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

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

การเปลี่ยนแปลงลักษณะการทำงาน

ไลบรารีการเรียกเก็บเงินของ Google Play เวอร์ชัน 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 เวอร์ชัน 1.0 พร้อมให้บริการแล้ว เวอร์ชันนี้ มีการเปลี่ยนแปลงต่อไปนี้

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

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

การเปลี่ยนแปลงลักษณะการทำงาน

ไลบรารีการเรียกเก็บเงินของ Google Play เวอร์ชัน 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 (12-06-2017, ประกาศ)

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

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