เอกสารนี้มีบันทึกประจำรุ่นของไลบรารี Google Play Billing
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
ซึ่งเผยแพร่อย่างเต็มรูปแบบใน Play Billing Library 7.1.1 หากต้องการทดสอบการผสานรวมโดยใช้ฟีเจอร์นี้ คุณจะต้องอัปเกรดเป็น Play Billing Library 7.1.1 พบข้อบกพร่องที่จะส่งผลต่อแอปพลิเคชันที่เปิดใช้การทดสอบการลบล้างการเรียกเก็บเงินเท่านั้น และจะไม่ส่งผลต่อการใช้งานปกติ ดูข้อมูลเพิ่มเติมได้ที่ทดสอบรหัสคำตอบBillingResult
Google Play Billing Library เวอร์ชัน 7.0.0 (14-05-2024)
Google Play Billing Library และส่วนขยาย Kotlin เวอร์ชัน 7.0.0 พร้อมให้ใช้งานแล้ว
สรุปการเปลี่ยนแปลง
เพิ่ม API เพื่อรองรับการสมัครใช้บริการแบบผ่อนชำระ
- เพิ่ม
ProductDetails.InstallmentPlanDetails
สำหรับแพ็กเกจเริ่มต้นแบบผ่อนชำระที่ผู้ใช้มีสิทธิ์ซื้อ API นี้ช่วยแอประบุแพ็กเกจการผ่อนชำระและการตั้งค่าความมุ่งมั่นเพื่อแสดงข้อมูลที่เกี่ยวข้องแก่ผู้ใช้ ดูข้อมูลเพิ่มเติมได้ที่คู่มือการผ่อนชำระค่าสมัครใช้บริการ
- เพิ่ม
เพิ่ม
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 Developer 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 พร้อมให้ใช้งานแล้ว
สรุปการเปลี่ยนแปลง
เพิ่ม enumeration
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 และส่วนขยาย 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 พร้อมให้ใช้งานแล้ว
เวอร์ชันนี้มีการเปลี่ยนแปลงต่อไปนี้
สรุปการเปลี่ยนแปลง
- เพิ่มวิธีการ
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
state
สำหรับ 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
หากต้องการเริ่มขั้นตอนการเรียกเก็บเงินสำหรับการซื้อหรือการสมัครใช้บริการ วิธีการจะได้รับอินสแตนซ์ BillingFlowParams
ที่เริ่มต้นด้วยพารามิเตอร์เฉพาะสำหรับคำขอ ดังนี้launchBillingFlow()
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 Interface Definition Language (AIDL) ซึ่งช่วยให้นักพัฒนาแอปกำหนดอินเทอร์เฟซระหว่างแอปกับ Google Play Billing API ได้ง่ายขึ้น