คู่มือนี้อธิบายวิธีผสานรวม API เพื่อเสนอการเรียกเก็บเงินระบบอื่นแบบให้ผู้ใช้ตัดสินใจในแอป
การตั้งค่า Play Billing Library
เพิ่มทรัพยากร Dependency ของ Play Billing Library ลงในแอป Android หากต้องการใช้ API การเรียกเก็บเงินระบบอื่น คุณต้องใช้เวอร์ชัน 5.2 ขึ้นไป หากต้องการย้ายข้อมูลจากเวอร์ชันก่อนหน้า ให้ทำตามวิธีการใน คู่มือการย้ายข้อมูล ก่อนที่จะพยายามใช้การเรียกเก็บเงินระบบอื่น
เชื่อมต่อกับ Google Play
ขั้นตอนแรกในกระบวนการผสานรวมจะเหมือนกับที่อธิบายไว้ใน คู่มือการผสานรวม Google Play Billing โดยมีการแก้ไขเล็กน้อยเมื่อ เริ่มต้น BillingClient ดังนี้
- คุณต้องเรียกใช้เมธอดใหม่เพื่อระบุว่าต้องการเสนอตัวเลือกการเรียกเก็บเงินให้ผู้ใช้ นั่นคือ
enableUserChoiceBilling - คุณต้องลงทะเบียน
UserChoiceBillingListenerเพื่อจัดการกรณี ที่ผู้ใช้เลือกการเรียกเก็บเงินระบบอื่น
ตัวอย่างต่อไปนี้แสดงการเริ่มต้น BillingClient ด้วยการแก้ไขเหล่านี้
Kotlin
val purchasesUpdatedListener = PurchasesUpdatedListener { billingResult, purchases -> // Handle new Google Play purchase. } val userChoiceBillingListener = UserChoiceBillingListener { userChoiceDetails -> // Handle alternative billing choice. } val billingClient = BillingClient.newBuilder(context) .setListener(purchasesUpdatedListener) .enablePendingPurchases(PendingPurchasesParams.newBuilder().enableOneTimeProducts().build()) .enableUserChoiceBilling(userChoiceBillingListener) .build()
Java
private PurchasesUpdatedListener purchasesUpdatedListener = new PurchasesUpdatedListener() {
@Override
public void onPurchasesUpdated(BillingResult billingResult, List<Purchase> purchases) {
// Handle new Google Play purchase.
}
};
private UserChoiceBillingListener userChoiceBillingListener = new UserChoiceBillingListener() {
@Override
public void userSelectedAlternativeBilling(
UserChoiceDetails userChoiceDetails) {
// Handle new Google Play purchase.
}
};
private BillingClient billingClient = BillingClient.newBuilder(context)
.setListener(purchasesUpdatedListener)
.enablePendingPurchases()
.enableUserChoiceBilling(userChoiceBillingListener)
.build();
หลังจากเริ่มต้น BillingClient แล้ว คุณต้อง สร้างการเชื่อมต่อกับ
Google Play ตามที่อธิบายไว้ในคู่มือการผสานรวม
แสดงผลิตภัณฑ์ที่พร้อมจำหน่าย
คุณสามารถแสดงผลิตภัณฑ์ที่พร้อมจำหน่ายให้ผู้ใช้เห็นได้ในลักษณะเดียวกับการผสานรวมระบบการเรียกเก็บเงินของ Google Play เมื่อผู้ใช้เห็นผลิตภัณฑ์ที่พร้อมจำหน่ายและเลือกผลิตภัณฑ์ที่ต้องการซื้อแล้ว ให้เปิดขั้นตอนการเรียกเก็บเงินแบบให้ผู้ใช้ตัดสินใจตามที่อธิบายไว้ในส่วนต่อไปนี้
เปิดโฟลว์การเรียกเก็บเงินแบบให้ผู้ใช้ตัดสินใจ
เปิดขั้นตอนการเรียกเก็บเงินแบบให้ผู้ใช้ตัดสินใจโดยเรียกใช้ launchBillingFlow() ซึ่งจะทำงาน
ในลักษณะเดียวกับการเปิดขั้นตอนการซื้อด้วยการผสานรวมระบบการเรียกเก็บเงินของ Google Play
โดยคุณจะระบุอินสแตนซ์ ProductDetails และ offerToken
ที่สอดคล้องกับผลิตภัณฑ์และข้อเสนอที่ผู้ใช้ต้องการ หากผู้ใช้เลือกระบบการเรียกเก็บเงินของ Google Play ระบบจะใช้ข้อมูลนี้เพื่อดำเนินการขั้นตอนการซื้อต่อ
เมื่อนักพัฒนาแอปเรียกใช้ launchBillingFlow() ระบบการเรียกเก็บเงินของ Google Play จะทำการตรวจสอบต่อไปนี้
- ระบบจะตรวจสอบว่าประเทศ Google Play ของผู้ใช้เป็นประเทศที่รองรับการเรียกเก็บเงินระบบอื่นแบบตัวเลือกของผู้ใช้หรือไม่ (เช่น ประเทศที่รองรับ) หากประเทศ Google Play ของผู้ใช้ได้รับการรองรับ Google Play จะตรวจสอบว่าได้เปิดใช้การเรียกเก็บเงินระบบอื่นแล้วหรือไม่ โดยอิงตามการกำหนดค่าของ
BillingClient- หากเปิดใช้การเรียกเก็บเงินระบบอื่นแบบให้ผู้ใช้ตัดสินใจแล้ว ขั้นตอนการซื้อ จะแสดง UX ตัวเลือกของผู้ใช้
- หากไม่ได้ เปิดใช้การเรียกเก็บเงินระบบอื่นแบบให้ผู้ใช้ตัดสินใจ ขั้นตอนการซื้อจะแสดง UX ระบบการเรียกเก็บเงินมาตรฐานของ Google Play แบบไม่ให้ผู้ใช้ตัดสินใจ
- หากประเทศ Google Play ของผู้ใช้ไม่ ใช่ประเทศที่รองรับ ขั้นตอนการซื้อจะแสดง UX ระบบการเรียกเก็บเงินมาตรฐานของ Google Play แบบไม่ให้ผู้ใช้ตัดสินใจ
ประเทศ Play ของผู้ใช้เป็นประเทศที่รองรับ |
ประเทศ Play ของผู้ใช้ไม่ใช่ประเทศที่รองรับ |
|
|---|---|---|
เรียกใช้ enableUserChoiceBilling ระหว่างการตั้งค่า BillingClient |
ผู้ใช้เห็น UX ตัวเลือกของผู้ใช้ |
ผู้ใช้เห็น UX ระบบการเรียกเก็บเงินมาตรฐานของ Google Play |
ไม่ได้เรียกใช้ enableUserChoiceBilling ระหว่างการตั้งค่า BillingClient |
ผู้ใช้เห็น UX ระบบการเรียกเก็บเงินมาตรฐานของ Google Play |
ผู้ใช้เห็น UX ระบบการเรียกเก็บเงินมาตรฐานของ Google Play |
จัดการการเลือกของผู้ใช้
วิธีจัดการขั้นตอนการซื้อที่เหลือจะแตกต่างกันไปตามที่ผู้ใช้เลือกระบบการเรียกเก็บเงินของ Google Play หรือระบบการเรียกเก็บเงินระบบอื่น
เมื่อผู้ใช้เลือกระบบการเรียกเก็บเงินระบบอื่น
หากผู้ใช้เลือกระบบการเรียกเก็บเงินระบบอื่น Google Play จะเรียกใช้ UserChoiceBillingListener เพื่อแจ้งให้แอปทราบว่าต้องเปิดขั้นตอนการซื้อในระบบการเรียกเก็บเงินระบบอื่น โดยเฉพาะอย่างยิ่ง ระบบจะเรียกใช้เมธอด userSelectedAlternativeBilling()
โทเค็นธุรกรรมภายนอกที่ระบุไว้ในออบเจ็กต์ UserChoiceDetails แสดงถึงลายเซ็นสำหรับตัวเลือกของผู้ใช้ในการเข้าสู่ขั้นตอนการเรียกเก็บเงินระบบอื่น ใช้โทเค็นนี้เพื่อรายงานธุรกรรมใดๆ ที่เกิดจากตัวเลือกนี้ตามที่
อธิบายไว้ในคู่มือการผสานรวมแบ็กเอนด์
UserChoiceBillingListener ควรดำเนินการต่อไปนี้
- รับผลิตภัณฑ์ที่ผู้ใช้กำลังซื้อเพื่อแสดงในขั้นตอนการซื้อในระบบการเรียกเก็บเงินระบบอื่น
- รวบรวมสตริงที่ได้รับเป็นโทเค็นธุรกรรมภายนอกและส่งไปยังแบ็กเอนด์เพื่อจัดเก็บ ระบบจะใช้โทเค็นนี้ในภายหลังเพื่อรายงานธุรกรรมภายนอกไปยัง Google Play หากผู้ใช้ทำการซื้อนี้เสร็จสมบูรณ์
- เปิดขั้นตอนการซื้อระบบอื่นของนักพัฒนาแอป
หากผู้ใช้ทำการซื้อโดยใช้ระบบการเรียกเก็บเงินระบบอื่น คุณ
ต้องรายงานธุรกรรมไปยัง Google Play โดยเรียกใช้ Google Play Developer
API จากแบ็กเอนด์ภายใน 24 ชั่วโมง พร้อมระบุ
externalTransactionToken และรายละเอียดธุรกรรมเพิ่มเติม ดูรายละเอียดเพิ่มเติมได้ใน
คู่มือการผสานรวมแบ็กเอนด์
ตัวอย่างต่อไปนี้แสดงวิธีใช้ UserChoiceBillingListener
Kotlin
private val userChoiceBillingListener = UserChoiceBillingListener { userChoiceDetails -> // Get the products being purchased by the user. val products = userChoiceDetails.products // Send external transaction token to developer backend server // this devBackend object is for demonstration purposes, // developers can implement this step however best fits their // app to backend communication. DevBackend.sendExternalTransactionStarted( userChoiceDetails.externalTransactionToken, user ) // Launch alternative billing // ... // The developer backend handles reporting the transaction // to Google Play's backend once the alternative billing // purchase is completed. }
Java
private userChoiceBillingListener userChoiceBillingListener = new UserChoiceBillingListener() {
@Override
public void userSelectedAlternativeBilling(
UserChoiceDetails userChoiceDetails) {
// Get the products being purchased by the user.
List<Product> products =
userChoiceDetails.getProducts();
// Send external transaction token to developer backend server
// this devBackend object is for demonstration purposes,
// developers can implement this step however best fits their
// app to backend communication.
devBackend.sendExternalTransactionStarted(
userChoiceDetails.getExternalTransactionToken(),
user
);
// Launch alternative billing
// ...
// The developer backend handles reporting the transaction
// to Google Play's backend once the alternative billing
// purchase is completed.
}
};
เมื่อผู้ใช้เลือกระบบการเรียกเก็บเงินของ Google Play
หากผู้ใช้เลือกระบบการเรียกเก็บเงินของ Google Play ผู้ใช้จะดำเนินการซื้อต่อผ่าน Google Play
- ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีจัดการการซื้อในแอปใหม่ผ่านระบบการเรียกเก็บเงินของ Google Play ได้ที่หัวข้อการประมวลผลการซื้อในคู่มือการผสานรวมไลบรารี
- ดูคำแนะนำเพิ่มเติมสำหรับการซื้อการสมัครใช้บริการได้ที่หัวข้อการสมัครใช้บริการใหม่ในคู่มือการจัดการการสมัครใช้บริการ
จัดการการเปลี่ยนแปลงในการสมัครใช้บริการ
สำหรับนักพัฒนาแอปที่ใช้การเรียกเก็บเงินระบบอื่นแบบให้ผู้ใช้ตัดสินใจ ระบบจะต้องประมวลผลการซื้อผ่านระบบการเรียกเก็บเงินของ Google Play หรือรายงานด้วย externalTransactionId ทั้งนี้ขึ้นอยู่กับตัวเลือกของผู้ใช้ คุณสามารถทำการเปลี่ยนแปลงการสมัครใช้บริการที่มีอยู่ซึ่งประมวลผลผ่านขั้นตอนตัวเลือกของผู้ใช้ผ่านระบบการเรียกเก็บเงินเดียวกันได้จนกว่าจะหมดอายุ
ส่วนนี้อธิบายวิธีจัดการสถานการณ์การเปลี่ยนแปลงการสมัครใช้บริการที่พบบ่อย
ขั้นตอนการอัปเกรดและดาวน์เกรด
การเปลี่ยนแปลงแพ็กเกจการสมัครใช้บริการ ซึ่งรวมถึงขั้นตอนการอัปเกรดและดาวน์เกรด ควรได้รับการจัดการที่แตกต่างกันไปตามว่าเดิมทีการสมัครใช้บริการนั้นซื้อผ่านระบบการเรียกเก็บเงินของ Google Play หรือระบบการเรียกเก็บเงินระบบอื่น
ระบบจะจัดการส่วนเสริมที่ขึ้นอยู่กับการสมัครใช้บริการที่มีอยู่ ใช้วิธีการชำระเงินเดียวกัน และมีการเรียกเก็บเงินตามรอบที่สอดคล้องกันเป็นการอัปเกรด สำหรับส่วนเสริมอื่นๆ ผู้ใช้ควรเลือกได้ว่าจะใช้ระบบการเรียกเก็บเงินใด เริ่มต้นประสบการณ์การซื้อใหม่
โดยใช้ launchBillingFlow() ตามที่อธิบายไว้ใน หัวข้อเปิดโฟลว์การเรียกเก็บเงินแบบให้ผู้ใช้ตัดสินใจ
การสมัครใช้บริการที่ซื้อผ่านระบบการเรียกเก็บเงินระบบอื่น
สำหรับการสมัครใช้บริการที่ซื้อผ่านระบบการเรียกเก็บเงินระบบอื่นของนักพัฒนาแอปหลังจากที่ผู้ใช้เลือกแล้ว ผู้ใช้ที่ขออัปเกรดหรือดาวน์เกรดควรดำเนินการผ่านระบบการเรียกเก็บเงินระบบอื่นของนักพัฒนาแอปโดยไม่ต้องผ่านประสบการณ์ตัวเลือกของผู้ใช้อีกครั้ง
หากต้องการดำเนินการนี้ ให้เรียกใช้ launchBillingFlow() เมื่อผู้ใช้ขออัปเกรดหรือดาวน์เกรด ให้ใช้ setOriginalExternalTransactionId แทนการระบุออบเจ็กต์ SubscriptionUpdateParams ในพารามิเตอร์ โดยระบุรหัสธุรกรรมภายนอกสำหรับการซื้อเดิม การดำเนินการนี้จะไม่ แสดงหน้าจอการเรียกเก็บเงินแบบให้ผู้ใช้ตัดสินใจ เนื่องจากระบบจะเก็บตัวเลือกของผู้ใช้สำหรับการซื้อเดิมไว้สำหรับการอัปเกรดและดาวน์เกรด การเรียกใช้ launchBillingFlow() ในกรณีนี้จะสร้างโทเค็นธุรกรรมภายนอกใหม่ สำหรับธุรกรรมที่คุณสามารถดึงข้อมูลได้จากโค้ดเรียกกลับ
Kotlin
// The external transaction ID from the current // alternative billing subscription. val externalTransactionId = "your_external_transaction_id" val billingFlowParams = BillingFlowParams.newBuilder() .setProductDetailsParamsList( listOf( BillingFlowParams.ProductDetailsParams.newBuilder() // Fetched using queryProductDetailsAsync. .setProductDetails(productDetailsNewPlan) // offerIdToken can be found in // ProductDetails=>SubscriptionOfferDetails. .setOfferToken(offerTokenNewPlan) .build() ) ) .setSubscriptionUpdateParams( BillingFlowParams.SubscriptionUpdateParams.newBuilder() .setOriginalExternalTransactionId(externalTransactionId) .build() ) .build() val billingResult = billingClient.launchBillingFlow(activity, billingFlowParams) // When the user selects the alternative billing flow, // the UserChoiceBillingListener is triggered.
Java
// The external transaction ID from the current
// alternative billing subscription.
String externalTransactionId = //... ;
BillingFlowParams billingFlowParams =
BillingFlowParams.newBuilder()
.setProductDetailsParamsList(
ImmutableList.of(
ProductDetailsParams.newBuilder()
// Fetched using queryProductDetailsAsync.
.setProductDetails(productDetailsNewPlan)
// offerIdToken can be found in
// ProductDetails=>SubscriptionOfferDetails
.setOfferToken(offerTokenNewPlan)
.build()
)
)
.setSubscriptionUpdateParams(
SubscriptionUpdateParams.newBuilder()
.setOriginalExternalTransactionId(externalTransactionId)
.build()
)
.build();
BillingResult billingResult = billingClient.launchBillingFlow(activity, billingFlowParams);
// When the user selects the alternative billing flow,
// the UserChoiceBillingListener is triggered.
เมื่อการอัปเกรดหรือดาวน์เกรดเสร็จสมบูรณ์ในระบบการเรียกเก็บเงินระบบอื่น คุณต้องรายงานธุรกรรมใหม่โดยใช้โทเค็นธุรกรรมภายนอก ที่ได้รับจากการเรียกใช้ครั้งก่อนสำหรับการซื้อการสมัครใช้บริการใหม่
การสมัครใช้บริการที่ซื้อผ่านระบบการเรียกเก็บเงินของ Google Play
ในทำนองเดียวกัน ผู้ใช้ที่ซื้อการสมัครใช้บริการปัจจุบันผ่านระบบการเรียกเก็บเงินของ Google Play หลังจากที่เลือกแล้วควรเห็นขั้นตอนการอัปเกรดหรือดาวน์เกรด ในระบบการเรียกเก็บเงินของ Google Play วิธีการต่อไปนี้อธิบายวิธีเปิดขั้นตอนการซื้อสำหรับการอัปเกรดหรือดาวน์เกรดผ่านระบบการเรียกเก็บเงินของ Google Play
ระบุ
offerTokenของข้อเสนอที่เลือกสำหรับแพ็กเกจใหม่Kotlin
val offerTokenNewPlan = productDetailsNewPlan.getSubscriptionOfferDetails() ?.getOrNull(selectedOfferIndex) ?.offerToken ?: ""
Java
String offerTokenNewPlan = productDetailsNewPlan .getSubscriptionOfferDetails(selectedOfferIndex) .getOfferToken();ส่งข้อมูลที่ถูกต้องไปยังระบบการเรียกเก็บเงินของ Google Play เพื่อประมวลผลการซื้อใหม่ ซึ่งรวมถึงโทเค็นการซื้อสำหรับการสมัครใช้บริการที่มีอยู่
Kotlin
val billingFlowParams = BillingFlowParams.newBuilder() .setProductDetailsParamsList( listOf( BillingFlowParams.ProductDetailsParams.newBuilder() // Fetched using queryProductDetailsAsync .setProductDetails(productDetailsNewPlan) .setSubscriptionProductReplacementParams( SubscriptionProductReplacementParams.newBuilder() .setReplacementMode( SubscriptionProductReplacementParams.ReplacementMode.CHARGE_FULL_PRICE ) .setOldProductId("old_product_id") .build() ) // offerIdToken can be found in // ProductDetails=>SubscriptionOfferDetails. .setOfferToken(offerTokenNewPlan) .build() ) ) .setSubscriptionUpdateParams( BillingFlowParams.SubscriptionUpdateParams.newBuilder() // purchaseToken can be found in // Purchase#getPurchaseToken .setOldPurchaseToken(oldToken) .build() ) .build() val billingResult = billingClient.launchBillingFlow(activity, billingFlowParams)
Java
BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder() .setProductDetailsParamsList( ImmutableList.of( ProductDetailsParams.newBuilder() // Fetched using queryProductDetailsAsync .setProductDetails(productDetailsNewPlan) // offerIdToken can be found in // ProductDetails=>SubscriptionOfferDetails. .setOfferToken(offerTokenNewPlan) .build() ) ) .setSubscriptionUpdateParams( SubscriptionUpdateParams.newBuilder() // purchaseToken can be found in // Purchase#getPurchaseToken .setOldPurchaseToken(oldToken) .setReplaceProrationMode(BillingFlowParams.ProrationMode.IMMEDIATE_AND_CHARGE_FULL_PRICE) .build() ) .build(); BillingResult billingResult = billingClient.launchBillingFlow(activity, billingFlowParams);
การซื้อนี้จะดำเนินการในระบบการเรียกเก็บเงินของ Google Play และแอปของคุณจะได้รับการเรียกใช้ PurchasesUpdatedListener.onPurchaseUpdated พร้อมผลลัพธ์ของการซื้อ หากการซื้อสำเร็จ เมธอด onPurchaseUpdated() จะได้รับข้อมูลการซื้อใหม่ด้วย และแบ็กเอนด์ของคุณจะได้รับการแจ้งเตือนแบบเรียลไทม์สำหรับนักพัฒนาแอป SUBSCRIPTION_PURCHASED เมื่อดึงข้อมูลสถานะสำหรับการซื้อใหม่ แอตทริบิวต์ linkedPurchaseToken จะลิงก์กับการซื้อการสมัครใช้บริการเดิมเพื่อให้คุณเลิกใช้การสมัครใช้บริการนั้นได้ตามที่แนะนำ
การยกเลิกและการคืนค่าการสมัครใช้บริการ
ผู้ใช้ควรยกเลิกการสมัครใช้บริการได้ทุกเมื่อ เมื่อผู้ใช้ยกเลิกการสมัครใช้บริการ การสิ้นสุดสิทธิ์อาจเลื่อนออกไปจนกว่าจะสิ้นสุดระยะเวลาที่ชำระเงิน ตัวอย่างเช่น หากผู้ใช้ยกเลิกการสมัครใช้บริการรายเดือนเมื่อผ่านไปครึ่งเดือน ผู้ใช้อาจยังคงเข้าถึงบริการได้ต่อไปอีกประมาณ 2 สัปดาห์จนกว่าจะถูกนำสิทธิ์เข้าถึงออก ในช่วงเวลานี้ การสมัครใช้บริการจะยังคงใช้งานได้ในทางเทคนิค ดังนั้นผู้ใช้จึงสามารถใช้บริการได้
ผู้ใช้ตัดสินใจยกเลิกการยกเลิกในช่วงเวลาที่การสมัครใช้บริการยังใช้งานได้อยู่ไม่ใช่เรื่องแปลก ในคู่มือนี้ เราเรียกการดำเนินการนี้ว่า การคืนค่า ส่วนต่อไปนี้อธิบายวิธีจัดการสถานการณ์การคืนค่าในการผสานรวม API การเรียกเก็บเงินระบบอื่น
การสมัครใช้บริการที่ซื้อผ่านระบบการเรียกเก็บเงินระบบอื่น
หากคุณมีรหัสธุรกรรมภายนอกสำหรับการสมัครใช้บริการที่ยกเลิกแล้ว คุณไม่จำเป็นต้องเรียกใช้ launchBillingFlow() เพื่อคืนค่าการสมัครใช้บริการ ดังนั้นจึงไม่ควรใช้รหัสนี้สำหรับการเปิดใช้งานประเภทนี้ หากผู้ใช้คืนค่าการสมัครใช้บริการขณะที่ยังอยู่ในช่วงเวลาที่การสมัครใช้บริการที่ยกเลิกแล้วยังใช้งานได้อยู่ ระบบจะไม่ทำธุรกรรมในเวลานั้น คุณเพียงแค่รายงานการต่ออายุต่อไปเมื่อรอบปัจจุบันหมดอายุและมีการต่ออายุครั้งถัดไป ซึ่งรวมถึงกรณีที่ผู้ใช้ได้รับเครดิตหรือราคาต่ออายุพิเศษเป็นส่วนหนึ่งของการคืนค่า (เช่น โปรโมชันเพื่อกระตุ้นให้ผู้ใช้สมัครใช้บริการต่อ)
การสมัครใช้บริการที่ซื้อผ่านระบบการเรียกเก็บเงินของ Google Play
โดยทั่วไป ผู้ใช้สามารถคืนค่าการสมัครใช้บริการในระบบการเรียกเก็บเงินของ Google Play ได้ สำหรับการสมัครใช้บริการที่ยกเลิกแล้วซึ่งเดิมซื้อผ่านระบบการเรียกเก็บเงินของ Google Play ผู้ใช้อาจเลือกยกเลิกการยกเลิกขณะที่การสมัครใช้บริการยังใช้งานได้ผ่านฟีเจอร์ สมัครใช้บริการอีกครั้ง ของ Google Play ในกรณีดังกล่าว คุณจะได้รับการแจ้งเตือนแบบเรียลไทม์สำหรับนักพัฒนาแอป SUBSCRIPTION_RESTARTED ในแบ็กเอนด์ และระบบจะไม่ ออกโทเค็นการซื้อใหม่ แต่จะใช้โทเค็นเดิมเพื่อดำเนินการสมัครใช้บริการต่อ ดูวิธีจัดการการคืนค่าในระบบการเรียกเก็บเงินของ Google
Play ได้ที่หัวข้อการคืนค่าในคู่มือการจัดการการสมัครใช้บริการ
นอกจากนี้ คุณยังทริกเกอร์การคืนค่าในระบบการเรียกเก็บเงินของ Google Play จากแอปได้โดยเรียกใช้ launchBillingFlow() ดูคำอธิบายวิธีดำเนินการได้ที่หัวข้อก่อนการสมัครใช้บริการจะหมดอายุ -
ในแอป ในกรณีของผู้ใช้ที่ผ่านขั้นตอนการเรียกเก็บเงินแบบให้ผู้ใช้ตัดสินใจสำหรับการซื้อเดิม (ซึ่งถูกยกเลิกแต่ยังใช้งานได้อยู่) ระบบจะตรวจหาตัวเลือกของผู้ใช้โดยอัตโนมัติและแสดงอินเทอร์เฟซผู้ใช้สำหรับการคืนค่าการซื้อเหล่านี้ ระบบจะขอให้ผู้ใช้ยืนยันการซื้อการสมัครใช้บริการอีกครั้งผ่าน Google Play แต่ผู้ใช้ไม่จำเป็นต้องผ่านขั้นตอนตัวเลือกของผู้ใช้อีกครั้ง ในกรณีนี้ ระบบจะออกโทเค็นการซื้อใหม่ให้ผู้ใช้ แบ็กเอนด์ของคุณจะได้รับการแจ้งเตือนแบบเรียลไทม์สำหรับนักพัฒนาแอป SUBSCRIPTION_PURCHASED และระบบจะตั้งค่า linkedPurchaseToken สำหรับสถานะการซื้อใหม่เช่นเดียวกับกรณีการอัปเกรดหรือดาวน์เกรด โดยใช้โทเค็นการซื้อเดิมสำหรับการสมัครใช้บริการที่ยกเลิก
การสมัครใช้บริการอีกครั้ง
หากการสมัครใช้บริการหมดอายุโดยสมบูรณ์ ไม่ว่าจะเป็นเพราะการยกเลิกหรือการชำระเงินไม่สำเร็จโดยไม่มีการกู้คืน (การระงับบัญชีที่หมดอายุ) ผู้ใช้จะต้อง สมัครใช้บริการอีกครั้ง หากต้องการเริ่มสิทธิ์อีกครั้ง
คุณยังเปิดใช้การสมัครใช้บริการอีกครั้งผ่านแอปได้ด้วยการประมวลผลในลักษณะเดียวกับการลงชื่อสมัครใช้มาตรฐาน ผู้ใช้ควรเลือกได้ว่าจะใช้ระบบการเรียกเก็บเงินใด launchBillingFlow() อาจถูกเรียกใช้ในกรณีนี้ ตามที่อธิบายไว้ใน
เปิดขั้นตอนการเรียกเก็บเงินแบบให้ผู้ใช้ตัดสินใจ
ทดสอบการเรียกเก็บเงินระบบอื่น
คุณควรใช้ผู้ทดสอบใบอนุญาตเพื่อทดสอบการผสานรวมการเรียกเก็บเงินระบบอื่น ระบบจะไม่เรียกเก็บเงินจากคุณสำหรับธุรกรรมที่บัญชีผู้ทดสอบใบอนุญาตเริ่มต้น ดูข้อมูลเพิ่มเติมเกี่ยวกับการกำหนดค่าผู้ทดสอบใบอนุญาตได้ที่หัวข้อทดสอบการเรียกเก็บเงินสำหรับการซื้อในแอปด้วยการอนุญาตให้ใช้สิทธิแอปพลิเคชัน
ขั้นตอนถัดไป
เมื่อผสานรวมในแอปเสร็จแล้ว คุณก็พร้อมที่จะผสานรวมแบ็กเอนด์