คู่มือนี้อธิบายวิธีผสานรวม API เพื่อเสนอการเรียกเก็บเงินระบบอื่นพร้อม ตัวเลือกให้ผู้ใช้ตัดสินใจในแอป
การตั้งค่า Play Billing Library
เพิ่มการอ้างอิง Play Billing Library ลงในแอป Android หากต้องการใช้ API การเรียกเก็บเงินระบบอื่น คุณต้องใช้เวอร์ชัน 5.2 ขึ้นไป หากต้องการย้ายข้อมูลจากเวอร์ชันก่อนหน้า ให้ทำตามวิธีการในคู่มือการย้ายข้อมูลก่อนที่จะพยายามใช้การเรียกเก็บเงินระบบอื่น
เชื่อมต่อกับ Google Play
ขั้นตอนแรกในกระบวนการผสานรวมจะเหมือนกับที่อธิบายไว้ในคู่มือการผสานรวมการเรียกเก็บเงินของ Google Play โดยมีการแก้ไขเล็กน้อยเมื่อเริ่มต้น 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()
.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() เมื่อผู้ใช้ขออัปเกรดหรือดาวน์เกรด แทนที่จะระบุออบเจ็กต์ SubscriptionUpdateParams ในพารามิเตอร์ ให้ใช้ setOriginalExternalTransactionId โดยระบุรหัสธุรกรรมภายนอกสำหรับการซื้อครั้งแรก ซึ่งไม่แสดงหน้าจอตัวเลือกของผู้ใช้ เนื่องจากระบบจะเก็บตัวเลือกของผู้ใช้สำหรับการซื้อครั้งแรกไว้สำหรับการอัปเกรดและดาวน์เกรด
การเรียกใช้ launchBillingFlow() ในกรณีนี้
จะสร้างโทเค็นธุรกรรมภายนอกใหม่สำหรับธุรกรรมที่คุณ
เรียกข้อมูลได้จากฟังก์ชันเรียกกลับ
Kotlin
// The external transaction ID from the current
// alternative billing subscription.
val externalTransactionId = //... ;
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(selectedOfferIndex) .getOfferToken()Java
String offerTokenNewPlan = productDetailsNewPlan .getSubscriptionOfferDetails(selectedOfferIndex) .getOfferToken();ส่งข้อมูลที่ถูกต้องไปยังระบบการเรียกเก็บเงินของ Google Play เพื่อประมวลผลการซื้อใหม่ ซึ่งรวมถึงโทเค็นการซื้อสำหรับการสมัครใช้บริการที่มีอยู่
Kotlin
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() // purchaseToken can be found in // Purchase#getPurchaseToken .setOldPurchaseToken(oldToken) .setReplaceProrationMode(BillingFlowParams.ProrationMode.IMMEDIATE_AND_CHARGE_FULL_PRICE) .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() method ยัง
ได้รับข้อมูลการซื้อใหม่ และแบ็กเอนด์จะได้รับ
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() อาจเรียกใช้ในกรณีนี้ตามที่อธิบายไว้ใน
เปิดตัวขั้นตอนการเรียกเก็บเงินแบบให้ผู้ใช้ตัดสินใจ
ทดสอบการเรียกเก็บเงินระบบอื่น
คุณควรใช้ผู้ทดสอบใบอนุญาตเพื่อทดสอบการผสานรวมการเรียกเก็บเงินระบบอื่น ระบบจะไม่เรียกเก็บเงินจากคุณสำหรับธุรกรรมที่บัญชีผู้ทดสอบใบอนุญาตเริ่ม ดูข้อมูลเพิ่มเติมเกี่ยวกับการกำหนดค่าผู้ทดสอบใบอนุญาตได้ที่ทดสอบการเรียกเก็บเงินสำหรับการซื้อในแอปด้วยการอนุญาตให้ใช้สิทธิแอปพลิเคชัน
ขั้นตอนถัดไป
เมื่อผสานรวมในแอปเสร็จแล้ว คุณก็พร้อมที่จะผสานรวมแบ็กเอนด์