เอกสารนี้มีบันทึกประจำรุ่นของไลบรารี Google Play Billing
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 พบข้อบกพร่องที่จะส่งผลต่อแอปพลิเคชันที่มี [billing overrides testing enabled][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 นี้จะช่วยแอประบุแพ็กเกจการผ่อนชำระและการตั้งค่าความมุ่งมั่นเพื่อมอบข้อมูลที่เกี่ยวข้องให้แก่ผู้ใช้ ดูข้อมูลเพิ่มเติมได้ที่ [คู่มือการผ่อนชำระค่าสมัครใช้บริการ][การผ่อนชำระ] [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
ในฟังก์ชันการเรียกกลับของโปรแกรมฟังแทน
- นักพัฒนาแอปควรใช้
นำ
BillingFlowParams.ProrationMode
,BillingFlowParams.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()
เพื่อดึงข้อมูลการซื้อที่ใช้งานอยู่ - การซื้อที่บริโภคแล้ว: นักพัฒนาแอปควรติดตามการซื้อที่บริโภคแล้วในเซิร์ฟเวอร์ของตนเอง
- การซื้อที่ยกเลิก: ใช้ voided-purchases API ของนักพัฒนาแอป
- ดูรายละเอียดเพิ่มเติมได้ที่ค้นหาประวัติการซื้อ
- การซื้อที่รับทราบและรอดำเนินการ: ใช้
BillingFlowParams.ProductDetailsParams.setOfferToken()
จะแสดงข้อยกเว้นเมื่อนักพัฒนาแอประบุofferToken
ว่างเปล่าอัปเดต
minSdkVersion
เป็น 21 และtargetSdkVersion
เป็น 34
Google Play Billing Library เวอร์ชัน 6.2.1 (16-04-2024)
Google Play Billing Library และส่วนขยาย Kotlin เวอร์ชัน 6.2.1 พร้อมให้ใช้งานแล้ว
สรุปการเปลี่ยนแปลง
- แก้ไขข้อบกพร่องใน
BillingClient.showAlternativeBillingOnlyInformationDialog()
ที่ระบบอาจไม่เรียกใช้AlternativeBillingOnlyInformationDialogListener
ในบางกรณีเมื่อกล่องโต้ตอบเสร็จสมบูรณ์
Google Play Billing Library เวอร์ชัน 6.2.0 (06-03-2024)
Google Play Billing Library และส่วนขยาย Kotlin เวอร์ชัน 6.2.0 พร้อมให้ใช้งานแล้ว
สรุปการเปลี่ยนแปลง
- เพิ่ม API เพื่อรองรับข้อเสนอภายนอก
- เพิ่ม
BillingClient.Builder.enableExternalOffer()
เพื่อให้สามารถแสดงข้อเสนอภายนอกได้ - เพิ่ม
BillingClient.isExternalOfferAvailableAsync()
เพื่อตรวจสอบความพร้อมใช้งานของฟังก์ชันการทำงานในการเสนอข้อเสนอภายนอก - เพิ่ม
BillingClient.showExternalOfferInformationDialog()
เพื่อแสดงกล่องโต้ตอบข้อมูลแก่ผู้ใช้ก่อนที่จะนําผู้ใช้ไปยังภายนอกแอป - เพิ่ม
BillingClient.createExternalOfferReportingDetailsAsync()
เพื่อสร้างเพย์โหลดที่จําเป็นสําหรับการรายงานธุรกรรมที่ทําผ่านข้อเสนอภายนอก
- เพิ่ม
Google Play Billing Library เวอร์ชัน 6.1.0 (14-11-2023)
Google Play Billing Library และส่วนขยาย Kotlin เวอร์ชัน 6.1.0 พร้อมให้ใช้งานแล้ว
สรุปการเปลี่ยนแปลง
- เพิ่ม 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 และส่วนขยาย Kotlin เวอร์ชัน 6.0.1 พร้อมให้ใช้งานแล้ว
สรุปการเปลี่ยนแปลง
อัปเดต Play Billing Library ให้ใช้งานร่วมกับ Android 14 ได้
Google Play Billing Library เวอร์ชัน 6.0 (10-05-2023)
Google Play Billing Library และส่วนขยาย Kotlin เวอร์ชัน 6.0.0 พร้อมให้ใช้งานแล้ว
สรุปการเปลี่ยนแปลง
เพิ่ม
ReplacementMode
แบบใหม่ enum เพื่อแทนที่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
ออกแล้วตั้งแต่วันที่ 1 ตุลาคม 2019 เป็นต้นไป ระบบจะไม่แสดง
SERVICE_TIMEOUT
ใน PBL เวอร์ชัน 6.0.0 อีกต่อไป PBL เวอร์ชันก่อนหน้าจะยังคงแสดงรหัสนี้เพิ่มการบันทึกเพิ่มเติม
ไลบรารีการเรียกเก็บเงินของ Play เวอร์ชัน 6 มีการบันทึกเพิ่มเติม ซึ่งจะให้ข้อมูลเชิงลึกเกี่ยวกับการใช้งาน API (เช่น สำเร็จหรือไม่สำเร็จ) และปัญหาการเชื่อมต่อบริการ เราจะใช้ข้อมูลนี้เพื่อปรับปรุงประสิทธิภาพของไลบรารีการเรียกเก็บเงินของ Play และมอบการสนับสนุนที่ดียิ่งขึ้นสำหรับข้อผิดพลาด
릴리스 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 และส่วนขยาย Kotlin เวอร์ชัน 5.2.0 พร้อมให้ใช้งานแล้ว
สรุปการเปลี่ยนแปลง
- เพิ่มคลาสเพื่อรองรับขั้นตอนการเรียกเก็บเงินระบบอื่นบนอุปกรณ์เคลื่อนที่/แท็บเล็ตสำหรับผู้ใช้ในเกาหลีใต้ ดังนี้
- เพิ่มวิธี
BillingFlowParams.SubscriptionUpdateParams.Builder.setOriginalExternalTransactionId()
เพื่อระบุรหัสธุรกรรมภายนอกของการสมัครใช้บริการต้นทาง - เพิ่มวิธี
BillingClient.Builder.enableAlternativeBilling()
เพื่อให้ผู้ใช้ในเกาหลีใต้เลือกตัวเลือกการเรียกเก็บเงินระบบอื่นได้
Google Play Billing Library เวอร์ชัน 5.1 (31-10-2022)
Google Play Billing Library และส่วนขยาย Kotlin เวอร์ชัน 5.1.0 พร้อมให้ใช้งานแล้ว
เวอร์ชันนี้มีการเปลี่ยนแปลงต่อไปนี้
สรุปการเปลี่ยนแปลง
- เพิ่มวิธี retrieving offer ID
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()
สำหรับข้อกำหนดในการเปิดเผยข้อมูลเกี่ยวกับการกำหนดราคาที่คุณปรับเปลี่ยนได้ของสหภาพยุโรป ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีใช้วิธีการนี้ได้ที่หัวข้อระบุราคาที่ปรับเปลี่ยนในแบบของคุณ - นำ
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อัปเดต 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 และกล่องโต้ตอบการเรียกเก็บเงินแสดงอยู่ก่อนที่จะถูกระงับ
การแก้ไขข้อบกพร่องของ Unity
- อัปเดตเป็น Java เวอร์ชัน 3.0.3 เพื่อแก้ไขปัญหาการสูญเสียหน่วยความจำและแก้ไขปัญหาที่ป้องกันไม่ให้มีการซื้อเมื่อแอปกลับมาทำงานต่อจากตัวเปิดแอป Android และกล่องโต้ตอบการเรียกเก็บเงินปรากฏขึ้นก่อนที่จะถูกระงับ
Google Play Billing Library เวอร์ชัน 3.0.2 (24-11-2020)
Google Play Billing Library และส่วนขยาย Kotlin เวอร์ชัน 3.0.2 พร้อมให้ใช้งานแล้ว
การแก้ไขข้อบกพร่อง
- แก้ไขข้อบกพร่องในส่วนขยาย Kotlin ที่โคโรทีนทำงานไม่สำเร็จพร้อมข้อผิดพลาด "ดำเนินการต่อแล้ว"
- แก้ไขการอ้างอิงที่ไม่ได้รับการแก้ไขเมื่อใช้ส่วนขยาย Kotlin กับไลบรารี kotlinx.coroutines เวอร์ชัน 1.4 ขึ้นไป
Google Play Billing Library เวอร์ชัน 3.0.1 (30-09-2020)
Google Play Billing Library และส่วนขยาย Kotlin เวอร์ชัน 3.0.1 พร้อมให้ใช้งานแล้ว
การแก้ไขข้อบกพร่อง
- แก้ไขข้อบกพร่องที่หากแอปถูกหยุดและกู้คืนระหว่างขั้นตอนการเรียกเก็บเงิน ระบบอาจไม่เรียก
PurchasesUpdatedListener
ด้วยผลลัพธ์การซื้อ
Google Play Billing Library 3.0 (08-06-2020)
Google Play Billing Library, ส่วนขยาย Kotlin และปลั๊กอิน Unity เวอร์ชัน 3.0.0 พร้อมให้ใช้งานแล้ว
สรุปการเปลี่ยนแปลง
- นำการสนับสนุน SKU ที่มีรางวัลออก
- นำพารามิเตอร์
ChildDirected
และUnderAgeOfConsent
ออก - นําวิธีการเพย์โหลดของนักพัฒนาซอฟต์แวร์ซึ่งเลิกใช้งานแล้วออก
- นําวิธีการ
BillingFlowParams.setAccountId()
และBillingFlowParams.setDeveloperId()
ที่เลิกใช้งานแล้วออก - นําวิธีการ
BillingFlowParams.setOldSkus(String oldSku)
และBillingFlowParams.addOldSku(String oldSku)
ที่เลิกใช้งานแล้วออก - เพิ่มคำอธิบายประกอบเกี่ยวกับความสามารถในการเป็น Null
การแก้ไขข้อบกพร่อง
SkuDetails.getIntroductoryPriceCycles()
แสดงผลเป็นint
แทนString
- แก้ไขข้อบกพร่องที่ระบบจะถือว่าขั้นตอนการเรียกเก็บเงินมีพารามิเตอร์เพิ่มเติมแม้ว่าจะไม่ได้ตั้งค่าพารามิเตอร์เพิ่มเติมก็ตาม
Google Play Billing Library เวอร์ชัน 2.2.1 (20-05-2020)
ไลบรารี Google Play Billing เวอร์ชัน 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 ด้วย นักพัฒนาเกมที่ใช้ Unity In-App Purchase API สามารถอัปเกรดได้แล้วตอนนี้เพื่อใช้ประโยชน์จากฟีเจอร์ทั้งหมดของ Google Play Billing Library 2 และเพื่อทำให้อัปเกรด Google Play Billing Library เวอร์ชันต่อๆ ไปได้ง่ายขึ้น
ดูข้อมูลเพิ่มเติมได้ที่ใช้ Google Play Billing กับ Unity
สรุปการเปลี่ยนแปลง
- Java Google Play Billing Library
- ใน
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 Extension เวอร์ชัน 2.1.0 (10-12-2019)
ไลบรารี Google Play Billing เวอร์ชัน 2.1.0 และส่วนขยาย Kotlin ใหม่พร้อมให้ใช้งานแล้ว ส่วนขยาย Kotlin ของไลบรารีการเรียกเก็บเงินของ Play มี API ทางเลือกตามแบบฉบับสำหรับการใช้งาน Kotlin ซึ่งมาพร้อม Null Safety และ coroutine ที่ดีขึ้น ดูตัวอย่างโค้ดได้ที่ใช้ไลบรารี 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 Billing เวอร์ชัน 2.0.3 พร้อมให้ใช้งานแล้ว
การแก้ไขข้อบกพร่อง
- แก้ไขข้อบกพร่องที่บางครั้ง
querySkuDetailsAsync()
จะดำเนินการไม่สำเร็จพร้อมแสดงรหัสDEVELOPER_ERROR
แทนที่จะแสดงผลลัพธ์ที่สำเร็จ
Google Play Billing Library เวอร์ชัน 2.0.2 (08-07-2019)
ไลบรารี Google Play Billing เวอร์ชัน 2.0.2 พร้อมให้ใช้งานแล้ว เวอร์ชันนี้มีข้อมูลอัปเดตในเอกสารอ้างอิง และไม่เปลี่ยนแปลงฟังก์ชันการทำงานของไลบรารี
Google Play Billing Library เวอร์ชัน 2.0.1 (06-06-2019)
ไลบรารี Google Play Billing เวอร์ชัน 2.0.1 พร้อมให้ใช้งานแล้ว เวอร์ชันนี้มีการเปลี่ยนแปลงต่อไปนี้
การแก้ไขข้อบกพร่อง
- แก้ไขข้อบกพร่องที่ระบบแสดงข้อความแก้ไขข้อบกพร่องเป็น
null
ในบางกรณี - แก้ไขปัญหาหน่วยความจำรั่วไหลที่อาจเกิดขึ้น
รุ่น Google Play Billing Library 2.0 (07-05-2019)
ไลบรารี Google Play Billing เวอร์ชัน 2.0 พร้อมให้ใช้งานแล้ว เวอร์ชันนี้มีการเปลี่ยนแปลงต่อไปนี้
ต้องตอบรับการซื้อภายใน 3 วัน
Google Play รองรับการซื้อผลิตภัณฑ์จากภายในแอป (ในแอป) หรือนอกแอป (นอกแอป) คุณต้องรับทราบการซื้อทั้งหมดที่ได้รับผ่าน Google Play Billing Library โดยเร็วที่สุดหลังจากให้สิทธิ์แก่ผู้ใช้ เพื่อให้ Google Play มอบประสบการณ์การซื้อที่สอดคล้องกันไม่ว่าผู้ใช้จะซื้อผลิตภัณฑ์จากที่ใดก็ตาม หากไม่รับทราบการซื้อภายใน 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
รองรับเพย์โหลดของนักพัฒนาแอป
ไลบรารี Google Play Billing เวอร์ชัน 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
โดยทำดังนี้
- เมื่อเริ่มแอป ให้เรียกใช้
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 Billing เวอร์ชัน 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 และไม่ได้มีไว้เพื่อแสดงต่อผู้ใช้ปลายทาง
การแก้ไขข้อบกพร่อง
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 จากเธรดแบ็กกราวด์ได้แล้ว
- เราได้ย้ายข้อมูลการสร้างอินสแตนซ์ไปยังเธรดเบื้องหลังอย่างสมบูรณ์แล้วเพื่อลดโอกาสที่จะทำให้เกิด ANR
รุ่น 1.2.1 ของ Play Billing Library (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 เวอร์ชัน 1.2 พร้อมให้ใช้งานแล้ว เวอร์ชันนี้มีการเปลี่ยนแปลงต่อไปนี้
สรุปการเปลี่ยนแปลง
- ตอนนี้ไลบรารีการเรียกเก็บเงินของ Google Play ได้รับอนุญาตภายใต้ข้อตกลงการอนุญาตให้ใช้สิทธิชุดพัฒนาซอฟต์แวร์ 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(); }
รุ่น 1.1 ของ Play Billing Library (07-05-2018)
ไลบรารี Google Play Billing เวอร์ชัน 1.1 พร้อมให้ใช้งานแล้ว เวอร์ชันนี้มีการเปลี่ยนแปลงต่อไปนี้
สรุปการเปลี่ยนแปลง
- เพิ่มการรองรับการระบุโหมดการแบ่งตามสัดส่วนใน
BillingFlowParams
เมื่ออัปเกรด/ดาวน์เกรดการสมัครใช้บริการที่มีอยู่ - ระบบไม่รองรับ Flag แบบบูลีน
replaceSkusProration
ในBillingFlowParams
อีกต่อไป ให้ใช้replaceSkusProrationMode
แทน - ตอนนี้
launchBillingFlow()
จะเรียกใช้การติดต่อกลับสำหรับการตอบกลับที่ไม่สําเร็จ
การเปลี่ยนแปลงลักษณะการทำงาน
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
อีกต่อไป
ก่อนหน้านี้นักพัฒนาแอปสามารถตั้งค่า Flag แบบบูลีนเพื่อเรียกเก็บเงินตามสัดส่วนสำหรับคำขออัปเกรดการสมัครใช้บริการ เนื่องจากเรารองรับ ProrationMode
ซึ่งมีวิธีการแบ่งตามสัดส่วนโดยละเอียด เราจึงไม่รองรับ Flag แบบบูลีนนี้อีกต่อไป
ตอนนี้ 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
- เปิดตัวรูปแบบตัวสร้างสำหรับคลาส
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)
การแก้ไขข้อบกพร่อง
- ไม่มีโค้ดตอบกลับในแพ็กเกจ PURCHASES_UPDATED
- แก้ไขปัญหาเกี่ยวกับ ProxyBillingActivity และ PurchasesUpdatedListener ระหว่างการหมุนอุปกรณ์
เวอร์ชันตัวอย่างสำหรับนักพัฒนาซอฟต์แวร์ 1 (12-06-2017, ประกาศ)
เปิดตัวเวอร์ชันตัวอย่างสำหรับนักพัฒนาแอป โดยมีจุดประสงค์เพื่อลดความซับซ้อนของกระบวนการพัฒนาในแง่ของการเรียกเก็บเงิน ซึ่งช่วยให้นักพัฒนาแอปมุ่งเน้นที่การใช้ตรรกะเฉพาะสำหรับแอป Android ได้ เช่น สถาปัตยกรรมแอปพลิเคชันและโครงสร้างการนําทาง
ไลบรารีนี้มีคลาสและฟีเจอร์ที่สะดวกหลายรายการให้คุณใช้เมื่อผสานรวมแอป Android กับ Google Play Billing API นอกจากนี้ ไลบรารียังมีเลเยอร์การแยกความคิดเหนือบริการภาษาการกําหนดอินเทอร์เฟซ Android (AIDL) ซึ่งช่วยให้นักพัฒนาแอปกําหนดอินเทอร์เฟซระหว่างแอปกับ Google Play Billing API ได้ง่ายขึ้น