เอกสารนี้มีบันทึกประจำรุ่นสำหรับไลบรารี 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 พร้อมใช้งานแล้ว
การแก้ไขข้อบกพร่อง
- แก้ไขข้อบกพร่องใน Play Billing Library 7.1.0 ที่เกี่ยวข้องกับการทดสอบ
BillingResultรหัสการตอบกลับ
การเปิดตัว 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 พร้อมใช้งานแล้ว
สรุปการเปลี่ยนแปลง
เพิ่ม API เพื่อรองรับการสมัครใช้บริการแบบผ่อนชำระ
- เพิ่ม [
ProductDetails.InstallmentPlanDetails][installment-details] สำหรับ แพ็กเกจเริ่มต้นแบบผ่อนชำระที่ผู้ใช้มีสิทธิ์ซื้อ API นี้ ช่วยให้แอปของคุณระบุแพ็กเกจการผ่อนชำระและการตั้งค่าข้อผูกมัดเพื่อ ให้ข้อมูลที่เกี่ยวข้องแก่ผู้ใช้ ดูข้อมูลเพิ่มเติมได้ที่[คำแนะนำเกี่ยวกับการผ่อนชำระค่าสมัครใช้บริการ][installments] [installment-details]: /reference/com/android/billingclient/api/ProductDetails.InstallmentPlanDetails [installments]: /google/play/billing/subscriptions#installments
- เพิ่ม [
เพิ่ม
PendingPurchasesParamsและBillingClient.Builder.enablePendingPurchases(PendingPurchaseParams)เพื่อแทนที่BillingClient.Builder.enablePendingPurchases()ซึ่งเลิกใช้งานแล้วในรุ่นนี้enablePendingPurchases()ที่เลิกใช้งานแล้วมีฟังก์ชันการทำงานเทียบเท่ากับenablePendingPurchases(PendingPurchasesParams.newBuilder().enableOneTimeProducts().build())
เพิ่ม API เพื่อรองรับธุรกรรมที่รอดำเนินการสำหรับแพ็กเกจการสมัครใช้บริการแบบชำระล่วงหน้า
- ใช้
PendingPurchasesParams.Builder.enablePrepaidPlans()ร่วมกับBillingClient.Builder.enablePendingPurchases(PendingPurchaseParams)เพื่อเปิดใช้ธุรกรรมที่รอดำเนินการสำหรับแพ็กเกจแบบชำระเงินล่วงหน้าของการสมัครใช้บริการ เมื่อ เพิ่มการรองรับ โปรดตรวจสอบว่าแอปของคุณจัดการ วงจรการสมัครใช้บริการอย่างถูกต้องด้วย ดูข้อมูลเพิ่มเติมได้ที่คู่มือการซื้อที่รอดำเนินการ - เพิ่ม
Purchase.PendingPurchaseUpdateและPurchase.getPendingPurchaseUpdate()สำหรับ การเรียกข้อมูลการเติมเงินที่รอดำเนินการ การอัปเกรด หรือการดาวน์เกรดเป็นการสมัครใช้บริการที่มีอยู่
- ใช้
นำ
BillingClient.Builder.enableAlternativeBilling()AlternativeBillingListenerและAlternativeChoiceDetailsออกแล้ว- นักพัฒนาแอปควรใช้
BillingClient.Builder.enableUserChoiceBilling()กับUserChoiceBillingListenerและUserChoiceDetailsในการเรียกกลับของ Listener แทน
- นักพัฒนาแอปควรใช้
นำ
BillingFlowParams.ProrationModeBillingFlowParams.SubscriptionUpdateParams.Builder.setReplaceProrationMode()และBillingFlowParams.SubscriptionUpdateParams.Builder.setReplaceSkusProrationMode()ออกแล้ว - นักพัฒนาแอปควรใช้BillingFlowParams.SubscriptionUpdateParams.ReplacementModeกับBillingFlowParams.SubscriptionUpdateParams.Builder#setSubscriptionReplacementMode(int)แทน -BillingFlowParams.SubscriptionUpdateParams.Builder.setReplaceProrationMode()-BillingFlowParams.SubscriptionUpdateParams.Builder.setReplaceSkusProrationMode()นำออกแล้ว
BillingFlowParams.SubscriptionUpdateParams.Builder#setOldSkuPurchaseToken()- นักพัฒนาแอปควรใช้BillingFlowParams.SubscriptionUpdateParams.Builder#setOldPurchaseToken(java.lang.String)แทนBillingClient.queryPurchaseHistoryAsync()เลิกใช้งานแล้วและจะถูกนำออกในรุ่นต่อๆ ไป นักพัฒนาแอป ควรใช้ตัวเลือกต่อไปนี้แทน- การซื้อที่รับทราบแล้วและอยู่ระหว่างรอดำเนินการ: ใช้
BillingClient.queryPurchasesAsync()เพื่อดึงข้อมูลการซื้อที่ใช้งานอยู่ - การซื้อที่ใช้แล้ว: นักพัฒนาแอปควรติดตามการซื้อที่ใช้แล้วในเซิร์ฟเวอร์ของตนเอง
- การซื้อที่ยกเลิก: ใช้ Developer API voided-purchases
- ดูรายละเอียดเพิ่มเติมได้ที่ค้นหาประวัติการซื้อ
- การซื้อที่รับทราบแล้วและอยู่ระหว่างรอดำเนินการ: ใช้
BillingFlowParams.ProductDetailsParams.setOfferToken()จะแสดงข้อยกเว้นเมื่อนักพัฒนาแอประบุofferTokenที่ว่างเปล่าอัปเดต
minSdkVersionเป็น 21 และtargetSdkVersionเป็น 34
การเปิดตัว Google Play Billing Library 6.2.1 (16-04-2024)
ตอนนี้ Google Play Billing Library เวอร์ชัน 6.2.1 และส่วนขยาย Kotlin พร้อมให้บริการแล้ว
สรุปการเปลี่ยนแปลง
- แก้ไขข้อบกพร่องใน
BillingClient.showAlternativeBillingOnlyInformationDialog()ซึ่งในบางกรณีAlternativeBillingOnlyInformationDialogListenerอาจไม่ได้รับการเรียกใช้เมื่อกล่องโต้ตอบเสร็จสมบูรณ์
การเปิดตัว Google Play Billing Library 6.2.0 (06-03-2024)
ตอนนี้ Google Play Billing Library เวอร์ชัน 6.2.0 และส่วนขยาย Kotlin พร้อมให้บริการแล้ว
สรุปการเปลี่ยนแปลง
- เพิ่ม API เพื่อรองรับข้อเสนอภายนอก
- เพิ่ม
BillingClient.Builder.enableExternalOffer()เพื่อให้สามารถแสดงข้อเสนอภายนอกได้ - เพิ่ม
BillingClient.isExternalOfferAvailableAsync()เพื่อตรวจสอบความพร้อมใช้งานของฟังก์ชันการทำงานในการแสดงข้อเสนอภายนอก - เพิ่ม
BillingClient.showExternalOfferInformationDialog()เพื่อแสดงกล่องโต้ตอบข้อมูลแก่ผู้ใช้ก่อนที่จะนำผู้ใช้ออกนอก แอป - เพิ่ม
BillingClient.createExternalOfferReportingDetailsAsync()เพื่อสร้างเพย์โหลดที่จำเป็นในการรายงานธุรกรรมที่ดำเนินการผ่าน ข้อเสนอภายนอก
- เพิ่ม
การเปิดตัว Google Play Billing Library 6.1.0 (14-11-2023)
ตอนนี้ Google Play Billing Library เวอร์ชัน 6.1.0 และส่วนขยาย Kotlin พร้อมใช้งานแล้ว
สรุปการเปลี่ยนแปลง
- เพิ่ม API เพื่อรองรับการเรียกเก็บเงินระบบอื่นเท่านั้น (กล่าวคือ แบบไม่ให้ผู้ใช้ตัดสินใจ)
- เพิ่ม
BillingClient.Builder.enableAlternativeBillingOnly()เพื่อเปิดใช้ฟังก์ชันความสามารถในการเสนอการเรียกเก็บเงินระบบอื่นเท่านั้น - เพิ่ม
BillingClient.isAlternativeBillingOnlyAvailableAsync()เพื่อตรวจสอบความพร้อมในการเสนอการเรียกเก็บเงินระบบอื่นเท่านั้น - เพิ่ม
BillingClient.showAlternativeBillingOnlyInformationDialog()เพื่อแสดงกล่องโต้ตอบข้อมูลเพื่อแจ้งให้ผู้ใช้ทราบเมื่อมีการใช้การเรียกเก็บเงินระบบอื่น เท่านั้น - เพิ่ม
BillingClient.createAlternativeBillingOnlyReportingDetailsAsync()เพื่อสร้างเพย์โหลดที่จำเป็นในการรายงานธุรกรรมที่ดำเนินการผ่าน การเรียกเก็บเงินระบบอื่นเท่านั้น
- เพิ่ม
- อัปเดต API การเรียกเก็บเงินแบบให้ผู้ใช้ตัดสินใจ
- เพิ่ม
UserChoiceBillingListenerเพื่อแทนที่ AlternativeBillingListener ซึ่งมีการทำเครื่องหมายว่าเลิกใช้งานแล้ว - เพิ่ม
UserChoiceDetailsเพื่อแทนที่AlternativeChoiceDetailsซึ่งมีเครื่องหมายว่าเลิกใช้งานแล้ว - เพิ่ม
BillingClient.Builder.enableUserChoiceBilling()เพื่อแทนที่BillingClient.Builder.enableAlternativeBilling()ซึ่งมีเครื่องหมายว่าเลิกใช้งานแล้ว
- เพิ่ม
- เพิ่ม
BillingClient.getBillingConfigAsync()เพื่อดึงประเทศใน Google Play
การเปิดตัว 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 พร้อมให้บริการแล้ว
สรุปการเปลี่ยนแปลง
- เพิ่มคลาสเพื่อรองรับขั้นตอนการเรียกเก็บเงินระบบอื่นบนอุปกรณ์เคลื่อนที่/แท็บเล็ตสำหรับ ผู้ใช้ในเกาหลีใต้
- เพิ่ม
BillingFlowParams.SubscriptionUpdateParams.Builder.setOriginalExternalTransactionId()วิธีการระบุรหัสธุรกรรมภายนอกของการสมัครใช้บริการ เดิม - เพิ่ม
BillingClient.Builder.enableAlternativeBilling()วิธีการเพื่อให้ผู้ใช้ในเกาหลีใต้เลือกตัวเลือกการเรียกเก็บเงินระบบอื่นได้
การเปิดตัว Google Play Billing Library 5.1 (31-10-2022)
ตอนนี้ Google Play Billing Library และส่วนขยาย Kotlin เวอร์ชัน 5.1.0 พร้อมให้บริการแล้ว
เวอร์ชันนี้มีการเปลี่ยนแปลงต่อไปนี้
สรุปการเปลี่ยนแปลง
- เพิ่ม
ProductDetails.SubscriptionOfferDetails.getOfferId()เมธอดเพื่อดึงรหัสข้อเสนอ - เพิ่ม
ProductDetails.SubscriptionOfferDetails.getBasePlanId()วิธีการดึงรหัสแพ็กเกจเริ่มต้น - อัปเดต
targetSdkVersionเป็น 31
การเปิดตัว 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#getReplaceSkusProrationModeBillingFlowParams#getOldSkuPurchaseTokenBillingFlowParams#getOldSkuBillingFlowParams.Builder#setReplaceSkusProrationModeBillingFlowParams.Builder#setOldSkuที่ถูกนำออกไปเพิ่ม
Purchase.getQuantity()และPurchaseHistoryRecord.getQuantity()เพิ่ม
Purchase#getSkus()และPurchaseHistoryRecord#getSkus()ซึ่งจะมาแทนที่Purchase#getSkuและPurchaseHistoryRecord#getSkuที่ ถูกนำออกไปแล้วนำ
BillingFlowParams#getSkuBillingFlowParams#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 สำหรับ Java
- ในเมธอด
AcknowledgePurchaseParamsที่เลิกใช้งานแล้วsetDeveloperPayload()และgetDeveloperPayload() - ในเมธอด
ConsumeParamsที่เลิกใช้งานแล้วsetDeveloperPayload()และgetDeveloperPayload() - ใน
BillingFlowParams, เปลี่ยนชื่อsetAccountId()เป็นsetObfuscatedAccountId()และบันทึกข้อจำกัดด้านความยาวที่ 64 อักขระและข้อจำกัด ที่ไม่อนุญาตให้ใช้ข้อมูลส่วนบุคคลที่ระบุตัวบุคคลนั้นได้ (PII) ในช่องนี้setAccountId()ถูกทำเครื่องหมายว่าเลิกใช้แล้วและจะถูกนำออกในไลบรารี เวอร์ชันต่อๆ ไป - ใน
BillingFlowParamsเราได้เพิ่มsetObfuscatedProfileId()ซึ่งทำงานคล้ายกับsetObfuscatedAccountId()ดูข้อมูลเพิ่มเติมได้ที่การอัปเดตเพย์โหลดของนักพัฒนาแอปและ ทางเลือกอื่นๆ - ใน
Purchaseได้เพิ่มเมธอดgetAccountIdentifiers()เพื่อแสดงตัวระบุบัญชีที่ปิดบังไว้ซึ่งตั้งค่าไว้ในBillingFlowParams - ใน
BillingClientเมธอดloadRewardedSku()ได้รับการทำเครื่องหมายว่าเลิกใช้งานแล้ว ซึ่งเป็นส่วนหนึ่งของการเลิกใช้งาน SKU ที่มีรางวัล ดูข้อมูลเพิ่มเติมเกี่ยวกับการเลิกใช้งานได้ในศูนย์ช่วยเหลือของ Play Console
- ในเมธอด
การเปิดตัว 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ข้อมูลอัปเดตสถานะโดยทำดังนี้
- เมื่อเริ่มต้นแอป ให้เรียกใช้
BillingClient.queryPurchases()เพื่อดึงรายการผลิตภัณฑ์ที่ยังไม่ได้ใช้ซึ่งเชื่อมโยงกับผู้ใช้ - เรียกใช้
Purchase.getPurchaseState()ในออบเจ็กต์Purchaseแต่ละรายการที่แสดงผล - ใช้เมธอด
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
และไม่ได้มีไว้เพื่อแสดงต่อผู้ใช้ปลายทาง
การแก้ไขข้อบกพร่อง
SkuDetails.getIntroductoryPriceAmountMicros()ตอนนี้จะแสดงผลเป็นlongแทนString
การเปิดตัว 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)
การแก้ไขข้อบกพร่อง
- ไม่มีรหัสการตอบกลับในแพ็กเกจ PURCHASES_UPDATED
- แก้ไขปัญหาเกี่ยวกับ ProxyBillingActivity และ PurchasesUpdatedListener ระหว่างการหมุนเวียนอุปกรณ์
การเปิดตัว Developer Preview 1 (12-06-2017, ประกาศ)
เปิดตัวเวอร์ชันตัวอย่างสำหรับนักพัฒนาแอปโดยมีเป้าหมายเพื่อลดความซับซ้อนของกระบวนการพัฒนาเมื่อพูดถึงการเรียกเก็บเงิน ซึ่งจะช่วยให้นักพัฒนาแอปมุ่งเน้นความพยายามในการใช้ตรรกะเฉพาะสำหรับแอป Android เช่น สถาปัตยกรรมของแอปพลิเคชันและโครงสร้างการนำทาง
ไลบรารีมีคลาสและฟีเจอร์ที่สะดวกหลายอย่างให้คุณใช้เมื่อ ผสานรวมแอป Android กับ Google Play Billing API นอกจากนี้ ไลบรารียังมี เลเยอร์การแยกส่วนเหนือบริการ Android Interface Definition Language (AIDL) ซึ่งช่วยให้นักพัฒนาแอปกำหนดอินเทอร์เฟซ ระหว่างแอปกับ Google Play Billing API ได้ง่ายขึ้น