เอกสารนี้อธิบายวิธีผสานรวม API ของ Play Billing Library เพื่อเสนอการชำระเงินภายนอกในแอปที่มีสิทธิ์ ดูข้อมูลเพิ่มเติมเกี่ยวกับโปรแกรมนี้ได้ที่ข้อกำหนดของโปรแกรม
การตั้งค่า Play Billing Library
เพิ่มการอ้างอิง Play Billing Library ลงในแอป Android หากต้องการใช้ API การชำระเงินภายนอก คุณต้องใช้เวอร์ชัน 8.3 ขึ้นไป หากต้องการย้ายข้อมูลจากเวอร์ชันก่อนหน้า ให้ทำตามวิธีการในคู่มือการย้ายข้อมูลเพื่ออัปเกรดก่อนเริ่มการผสานรวม
เริ่มต้นไคลเอ็นต์การเรียกเก็บเงิน
ขั้นตอนแรกในกระบวนการผสานรวมจะเหมือนกับขั้นตอนที่ อธิบายไว้ในคู่มือการผสานรวมการเรียกเก็บเงินของ Google Play โดยมีการปรับเปลี่ยนเล็กน้อยเมื่อเริ่มต้น BillingClient ดังนี้
- คุณต้องเรียกใช้เมธอด
enableBillingProgram(EnableBillingProgramParams)ใหม่เพื่อระบุว่าต้องการเสนอการชำระเงินภายนอก - คุณต้องลงทะเบียน
DeveloperProvidedBillingListenerเพื่อจัดการกรณีที่ผู้ใช้เลือกชำระเงินในเว็บไซต์หรือแอปการชำระเงิน
ตัวอย่างต่อไปนี้แสดงการเริ่มต้น BillingClient ด้วยการแก้ไขเหล่านี้
Kotlin
val purchasesUpdatedListener =
PurchasesUpdatedListener { billingResult, purchases ->
// Handle new Google Play purchase.
}
val developerProvidedBillingListener =
DeveloperProvidedBillingListener { details ->
// Handle user selection for developer provided billing option.
}
val billingClient = BillingClient.newBuilder(context)
.setListener(purchasesUpdatedListener)
.enablePendingPurchases()
.enableBillingProgram(
EnableBillingProgramParams.newBuilder()
.setBillingProgram(BillingProgram.EXTERNAL_PAYMENTS)
.setDeveloperProvidedBillingListener(developerProvidedBillingListener)
.build())
.build()
Java
private PurchasesUpdatedListener purchasesUpdatedListener = new PurchasesUpdatedListener() {
@Override
public void onPurchasesUpdated(BillingResult billingResult, List<Purchase> purchases) {
// Handle new Google Play purchase.
}
};
private DeveloperProvidedBillingListener developerProvidedBillingListener =
new DeveloperProvidedBillingListener() {
@Override
public void onUserSelectedDeveloperBilling(
DeveloperProvidedBillingDetails details) {
// Handle user selection for developer provided billing option.
}
};
private BillingClient billingClient = BillingClient.newBuilder(context)
.setListener(purchasesUpdatedListener)
.enablePendingPurchases()
.enableBillingProgram(
EnableBillingProgramParams.newBuilder()
.setBillingProgram(BillingProgram.EXTERNAL_PAYMENTS)
.setDeveloperProvidedBillingListener(developerProvidedBillingListener)
.build())
.build();
เชื่อมต่อกับ Google Play
หลังจากเริ่มต้น BillingClient แล้ว ให้เชื่อมต่อกับ Google Play ตามที่อธิบายไว้
ในเชื่อมต่อกับ Google Play
ตรวจสอบสิทธิ์ของผู้ใช้
หลังจากเชื่อมต่อกับ Google Play แล้ว คุณสามารถตรวจสอบว่าผู้ใช้มีสิทธิ์เข้าร่วมโปรแกรมการชำระเงินภายนอกหรือไม่โดยเรียกใช้เมธอด isBillingProgramAvailableAsync() เมธอดนี้จะแสดงผล BillingResponseCode.OK หากผู้ใช้มีสิทธิ์
ตัวอย่างต่อไปนี้แสดงวิธีตรวจสอบสิทธิ์
Kotlin
billingClient.isBillingProgramAvailableAsync(
BillingProgram.EXTERNAL_PAYMENTS,
object : BillingProgramAvailabilityListener {
override fun onBillingProgramAvailabilityResponse(
billingProgram: Int, billingResult: BillingResult) {
if (billingResult.responseCode != BillingResponseCode.OK) {
// Handle failures such as retrying due to network errors,
// handling external payments unavailable, etc.
return
}
// External payments are available. Can proceed with generating an
// external transaction token.
})
Java
billingClient.isBillingProgramAvailableAsync(
BillingProgram.EXTERNAL_PAYMENTS,
new BillingProgramAvailabilityListener() {
@Override
public void onBillingProgramAvailabilityResponse(
int billingProgram, BillingResult billingResult) {
if (billingResult.getResponseCode() != BillingResponseCode.OK) {
// Handle failures such as retrying due to network errors,
// handling external payments unavailable, etc.
return;
}
// External payments are available. Can proceed with generating an external transaction token.
}
});
ดูรายละเอียดเกี่ยวกับวิธีที่แอปควรตอบสนองต่อรหัสการตอบกลับอื่นๆ ได้ที่ส่วนการจัดการการตอบกลับ หากใช้ส่วนขยาย Kotlin คุณจะใช้โครูทีน Kotlin ได้โดยไม่ต้องกำหนด Listener แยกต่างหาก
แสดงผลิตภัณฑ์ที่พร้อมจำหน่าย
คุณแสดงผลิตภัณฑ์ที่พร้อมจำหน่ายต่อผู้ใช้ได้ในลักษณะเดียวกับการผสานรวมระบบการเรียกเก็บเงินของ Google Play เมื่อผู้ใช้เห็นผลิตภัณฑ์ที่พร้อมจำหน่ายและเลือกผลิตภัณฑ์ที่จะซื้อ ให้เปิดตัวขั้นตอนการชำระเงินภายนอกตามที่อธิบายไว้ในส่วนการเปิดตัวขั้นตอนการชำระเงินภายนอก
เตรียมโทเค็นธุรกรรมภายนอก
หากต้องการรายงานธุรกรรมภายนอกไปยัง Google Play คุณต้องมีโทเค็นธุรกรรมภายนอกที่สร้างจาก Play Billing Library ต้องสร้างโทเค็นธุรกรรมภายนอกใหม่ทุกครั้งที่ผู้ใช้เข้าชมเว็บไซต์หรือแอปภายนอกผ่าน API การชำระเงินภายนอก ซึ่งทำได้ด้วยการเรียกใช้ API createBillingProgramReportingDetailsAsync ควรสร้างโทเค็น
ทันทีก่อนที่จะเรียกใช้ launchBillingFlow
Kotlin
val params =
BillingProgramReportingDetailsParams.newBuilder()
.setBillingProgram(BillingProgram.EXTERNAL_PAYMENTS)
.build()
billingClient.createBillingProgramReportingDetailsAsync(
params,
object : BillingProgramReportingDetailsListener {
override fun onCreateBillingProgramReportingDetailsResponse(
billingResult: BillingResult,
billingProgramReportingDetails: BillingProgramReportingDetails?) {
if (billingResult.responseCode != BillingResponseCode.OK) {
// Handle failures such as retrying due to network errors.
return
}
val externalTransactionToken =
billingProgramReportingDetails?.externalTransactionToken
// Persist the external transaction token locally. Pass it to
// the external website using DeveloperBillingOptionParams when
// launchBillingFlow is called.
}
})
Java
BillingProgramReportingDetailsParams params =
BillingProgramReportingDetailsParams.newBuilder()
.setBillingProgram(BillingProgram.EXTERNAL_PAYMENTS)
.build();
billingClient.createBillingProgramReportingDetailsAsync(
params,
new BillingProgramReportingDetailsListener() {
@Override
public void onCreateBillingProgramReportingDetailsResponse(
BillingResult billingResult,
@Nullable BillingProgramReportingDetails
billingProgramReportingDetails) {
if (billingResult.getResponseCode() != BillingResponseCode.OK) {
// Handle failures such as retrying due to network errors.
return;
}
String transactionToken =
billingProgramReportingDetails.getExternalTransactionToken();
// Persist the external transaction token locally. Pass it to
// the external website using DeveloperBillingOptionParams when
// launchBillingFlow is called.
}
});
หากใช้ส่วนขยาย Kotlin คุณจะใช้โครูทีน Kotlin ได้โดยไม่ต้องกำหนด Listener แยกต่างหาก
เปิดตัวขั้นตอนการชำระเงินภายนอก
เปิดตัวขั้นตอนการชำระเงินภายนอกโดยเรียกใช้ launchBillingFlow()
คล้ายกับการเปิดตัวขั้นตอนการซื้อด้วยการผสานรวมระบบการเรียกเก็บเงินของ Google Play
แต่มีพารามิเตอร์เพิ่มเติม
DeveloperBillingOptionParams ที่ระบุว่าแอปของคุณต้องการ
เปิดใช้ขั้นตอนการชำระเงินภายนอกสำหรับการซื้อนี้
DeveloperBillingOptionParams ต้องมีข้อมูลต่อไปนี้
billingProgramตั้งค่าเป็นโปรแกรมการเรียกเก็บเงินEXTERNAL_PAYMENTSlinkURIไปยังปลายทางของลิงก์launchModeตั้งค่าเป็นLAUNCH_IN_EXTERNAL_BROWSER_OR_APPหาก Google Play ควรเปิดลิงก์ หรือCALLER_WILL_LAUNCH_LINKหากแอปของคุณ จะเปิดลิงก์
เมื่อแอปเรียกใช้ launchBillingFlow() โดยมี
DeveloperBillingOptionParams ระบบการเรียกเก็บเงินของ Google Play
จะทำการตรวจสอบต่อไปนี้
- ระบบจะตรวจสอบว่าประเทศ Google Play ของผู้ใช้เป็นประเทศที่รองรับการชำระเงินภายนอกหรือไม่ (เช่น ประเทศที่รองรับ) หากประเทศ Google Play ของผู้ใช้ได้รับการรองรับ Google Play จะตรวจสอบว่าได้เปิดใช้
การชำระเงินภายนอกหรือไม่ตามการกำหนดค่าของ
BillingClient และมีการระบุ
DeveloperBillingOptionParamsหรือไม่- หากเปิดใช้การชำระเงินภายนอกไว้ ขั้นตอนการซื้อจะแสดง UX ของ ตัวเลือกของผู้ใช้
- หากไม่ได้เปิดใช้การชำระเงินภายนอก ขั้นตอนการซื้อจะแสดง UX ของระบบการเรียกเก็บเงินมาตรฐานของ Google Play โดยไม่มีตัวเลือกให้ผู้ใช้
- หากประเทศ Google Play ของผู้ใช้ไม่ใช่ประเทศที่รองรับ ขั้นตอนการซื้อจะแสดง UX ของระบบการเรียกเก็บเงินมาตรฐานของ Google Play โดยไม่มี ตัวเลือกให้ผู้ใช้ตัดสินใจ
ประเทศใน Play ของผู้ใช้เป็นประเทศที่รองรับ |
ประเทศ Play ของผู้ใช้ไม่ใช่ประเทศที่รองรับ |
|
เปิดใช้การชำระเงินภายนอก (การตั้งค่า BillingClient และ launchBillingFlow) |
ผู้ใช้เห็น UX ตัวเลือกของผู้ใช้ |
ผู้ใช้เห็น UX ของระบบการเรียกเก็บเงินมาตรฐานของ Google Play |
ไม่ได้เปิดใช้การชำระเงินภายนอก (ไม่ได้เปิดใช้ระหว่างการตั้งค่า BillingClient หรือไม่ได้ระบุ DeveloperBillingOptionParams เพื่อเรียกใช้ launchBillingFlow) |
ผู้ใช้เห็น UX ของระบบการเรียกเก็บเงินมาตรฐานของ Google Play |
ผู้ใช้เห็น UX ของระบบการเรียกเก็บเงินมาตรฐานของ Google Play |
ข้อมูลโค้ดต่อไปนี้แสดงวิธีสร้างDeveloperBillingOptionParams
Kotlin
val developerBillingOptionParams =
DeveloperBillingOptionParams.newBuilder()
.setBillingProgram(BillingProgram.EXTERNAL_PAYMENTS)
.setLinkUri("https://www.example.com/external/purchase")
.setLaunchMode(
DeveloperBillingOptionParams.LaunchMode.LAUNCH_IN_EXTERNAL_BROWSER_OR_APP)
.build()
Java
DeveloperBillingOptionParams developerBillingOptionParams =
DeveloperBillingOptionParams.newBuilder()
.setBillingProgram(BillingProgram.EXTERNAL_PAYMENTS)
.setLinkUri("https://www.example.com/external/purchase")
.setLaunchMode(
DeveloperBillingOptionParams.LaunchMode.LAUNCH_IN_EXTERNAL_BROWSER_OR_APP)
.build();
จัดการการเลือกของผู้ใช้
วิธีจัดการขั้นตอนการซื้อที่เหลือจะแตกต่างกันไป ขึ้นอยู่กับว่าผู้ใช้เลือกใช้ระบบการเรียกเก็บเงินของ Google Play หรือเลือกชำระเงินในเว็บไซต์ของคุณ
เมื่อผู้ใช้เลือกชำระเงินในเว็บไซต์หรือแอปการชำระเงิน
หากผู้ใช้เลือกชำระเงินในเว็บไซต์ของคุณ Google Play จะเรียกใช้
DeveloperProvidedBillingListener เพื่อแจ้งให้แอปทราบว่าผู้ใช้เลือก
ชำระเงินในเว็บไซต์หรือแอปการชำระเงินของคุณ โดยเฉพาะอย่างยิ่ง ระบบจะเรียกใช้เมธอด onUserSelectedDeveloperBilling()
หากแอปตั้งค่า launchMode เป็น LAUNCH_IN_EXTERNAL_BROWSER_OR_APP Google Play จะเปิดลิงก์ หากตั้งค่า launchMode เป็น
CALLER_WILL_LAUNCH_LINK แอปของคุณมีหน้าที่เปิดลิงก์
เมื่อลิงก์ผู้ใช้กับแอปการชำระเงิน คุณมีหน้าที่รับผิดชอบในการตรวจสอบว่า
ผู้ใช้ได้ติดตั้งแอปการชำระเงินในอุปกรณ์ของตนแล้ว
ใช้โทเค็นนี้เพื่อรายงานธุรกรรมที่เกิดจากตัวเลือกนี้ตามที่อธิบายไว้ ในคู่มือการผสานรวมแบ็กเอนด์
เมื่อผู้ใช้เลือกระบบการเรียกเก็บเงินของ Google Play
หากผู้ใช้เลือกระบบการเรียกเก็บเงินของ Google Play ผู้ใช้จะดำเนินการซื้อผ่าน Google Play ต่อไป
- ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีจัดการการซื้อในแอปใหม่ผ่านระบบการเรียกเก็บเงินของ Google Play ได้ที่การประมวลผลการซื้อในคู่มือการผสานรวมไลบรารี
- ดูการสมัครใช้บริการใหม่ในคู่มือการจัดการการสมัครใช้บริการเพื่อรับ คำแนะนำเพิ่มเติมสำหรับการซื้อการสมัครใช้บริการ
จัดการการเปลี่ยนแปลงในการสมัครใช้บริการ
สำหรับนักพัฒนาแอปที่ใช้การชำระเงินภายนอก ระบบจะต้องประมวลผลการซื้อ
ผ่านระบบการเรียกเก็บเงินของ Google Play หรือรายงานด้วย
externalTransactionId ทั้งนี้ขึ้นอยู่กับตัวเลือกของผู้ใช้ การเปลี่ยนแปลงการสมัครใช้บริการที่มีอยู่
ซึ่งประมวลผลผ่านเว็บไซต์ของนักพัฒนาแอปสามารถ
ทำผ่านระบบการเรียกเก็บเงินเดียวกันได้จนกว่าจะหมดอายุ
ส่วนนี้จะอธิบายวิธีจัดการสถานการณ์การเปลี่ยนแปลงการสมัครใช้บริการที่พบบ่อย
โฟลว์การอัปเกรดและดาวน์เกรด
การเปลี่ยนแปลงแพ็กเกจการสมัครใช้บริการ รวมถึงขั้นตอนการอัปเกรดและดาวน์เกรด ควรได้รับการจัดการแตกต่างกันไปโดยขึ้นอยู่กับว่าการสมัครใช้บริการนั้นซื้อผ่านระบบการเรียกเก็บเงินของ Google Play หรือผ่านเว็บไซต์ของนักพัฒนาแอป
ระบบจะจัดการส่วนเสริมที่ขึ้นอยู่กับการสมัครใช้บริการที่มีอยู่ ใช้การชำระเงินวิธีเดียวกัน และปรับการเรียกเก็บเงินตามรอบให้ตรงกันเป็นการอัปเกรด สำหรับส่วนเสริมอื่นๆ ผู้ใช้ควรเลือกได้ว่าจะใช้ระบบการเรียกเก็บเงินใด เริ่มประสบการณ์การซื้อใหม่โดยใช้ launchBillingFlow() ตามที่อธิบายไว้ในการเปิดตัวขั้นตอนการชำระเงินภายนอก
การสมัครใช้บริการที่ซื้อผ่านเว็บไซต์ของนักพัฒนาแอปหรือแอปการชำระเงิน
สำหรับการสมัครใช้บริการที่ซื้อผ่านเว็บไซต์ของนักพัฒนาแอป หรือแอปการชำระเงินหลังจากที่ผู้ใช้เลือกแล้ว ผู้ใช้ที่ขออัปเกรดหรือ ดาวน์เกรดควรดำเนินการผ่านเว็บไซต์ของนักพัฒนาแอปหรือแอปการชำระเงิน โดยไม่ต้องผ่านประสบการณ์การเลือกของผู้ใช้อีกครั้ง
โดยให้เรียกใช้ launchBillingFlow() เมื่อผู้ใช้ขออัปเกรดหรือดาวน์เกรด แทนที่จะระบุพารามิเตอร์อื่นๆ ภายใต้ออบเจ็กต์
SubscriptionUpdateParams ให้ใช้
setOriginalExternalTransactionId() โดยระบุรหัสธุรกรรมภายนอก
สำหรับการซื้อครั้งแรก
นอกจากนี้ คุณต้องระบุ DeveloperBillingOptionParams ในการเรียกนี้ด้วย การดำเนินการนี้จะไม่แสดงหน้าจอตัวเลือกของผู้ใช้ เนื่องจากระบบจะเก็บตัวเลือกของผู้ใช้สำหรับการซื้อครั้งแรกไว้สำหรับการอัปเกรดและดาวน์เกรด คุณต้องสร้างโทเค็นธุรกรรมภายนอกใหม่สำหรับธุรกรรมนี้ตามที่อธิบายไว้ที่นี่
เมื่ออัปเกรดหรือดาวน์เกรดเสร็จสมบูรณ์โดยใช้เว็บไซต์ของนักพัฒนาแอปหรือแอปการชำระเงิน คุณจะต้องรายงานธุรกรรมใหม่โดยใช้โทเค็นธุรกรรมภายนอกที่ได้รับผ่านการเรียกก่อนหน้าสำหรับการซื้อการสมัครใช้บริการใหม่
การสมัครใช้บริการที่ซื้อผ่านระบบการเรียกเก็บเงินของ Google Play
ในทำนองเดียวกัน ผู้ใช้ที่ซื้อการสมัครใช้บริการปัจจุบันผ่านระบบการเรียกเก็บเงินของ Google Play
หลังจากที่ผู้ใช้เลือกแล้วควรจะเห็นขั้นตอนการเรียกเก็บเงินมาตรฐานของ Google Play ต้องไม่ตั้งค่า DeveloperBillingOptionParams ในการเรียก launchBillingFlow
การยกเลิกและการคืนค่าการสมัครใช้บริการ
ผู้ใช้ควรยกเลิกการสมัครใช้บริการได้ทุกเมื่อ เมื่อ ผู้ใช้ยกเลิกการสมัครใช้บริการ ระบบอาจเลื่อนการสิ้นสุดสิทธิ์ จนกว่าระยะเวลาที่ชำระเงินจะสิ้นสุดลง ตัวอย่างเช่น หากผู้ใช้ยกเลิกการสมัครใช้บริการรายเดือนในช่วงกลางเดือน ผู้ใช้อาจยังคงเข้าถึงบริการได้ต่อไปอีกประมาณ 2 สัปดาห์จนกว่าระบบจะนำสิทธิ์เข้าถึงออก ในช่วง นี้ การสมัครใช้บริการจะยังคงมีผลในทางเทคนิค ผู้ใช้จึงสามารถ ใช้บริการได้
ผู้ใช้จำนวนไม่น้อยเลือกที่จะยกเลิกการยกเลิกในช่วงระยะเวลาที่ใช้งานอยู่ นี้ ในคู่มือนี้ เราจะเรียกการดำเนินการนี้ว่าการกู้คืน ส่วนต่อไปนี้จะอธิบายวิธีจัดการสถานการณ์การคืนค่าในการผสานรวม API การชำระเงินภายนอก
การสมัครใช้บริการที่ซื้อผ่านเว็บไซต์ของนักพัฒนาแอป
หากคุณมีรหัสธุรกรรมภายนอกสำหรับการสมัครใช้บริการที่ยกเลิกไปแล้ว คุณไม่จำเป็นต้องเรียกใช้ launchBillingFlow() เพื่อคืนค่าการสมัครใช้บริการ ดังนั้นจึงไม่ควรใช้รหัสธุรกรรมภายนอกสำหรับการเปิดใช้งานประเภทนี้ หากผู้ใช้กู้คืนการสมัครใช้บริการขณะที่ยังอยู่ในช่วงเวลาที่ใช้งานได้ของการสมัครใช้บริการที่ยกเลิกไปแล้ว จะไม่มีการทำธุรกรรมในขณะนั้น คุณเพียงแค่รายงานการต่ออายุต่อไปเมื่อรอบปัจจุบันหมดอายุและมีการต่ออายุครั้งถัดไป ซึ่งรวมถึงกรณีที่ผู้ใช้ได้รับเครดิตหรือราคาต่ออายุพิเศษเป็นส่วนหนึ่งของการคืนค่า (เช่น โปรโมชันเพื่อกระตุ้นให้ผู้ใช้สมัครใช้บริการต่อ)
การสมัครใช้บริการที่ซื้อผ่านระบบการเรียกเก็บเงินของ Google Play
โดยทั่วไปแล้ว ผู้ใช้จะคืนค่าการสมัครใช้บริการในระบบการเรียกเก็บเงินของ Google Play ได้ สำหรับการสมัครใช้บริการที่ยกเลิกไปแล้วซึ่งซื้อผ่านระบบการเรียกเก็บเงินของ Google Play ในตอนแรก ผู้ใช้สามารถเลือกที่จะยกเลิกการยกเลิกได้ในขณะที่การสมัครใช้บริการยังใช้งานได้ผ่านฟีเจอร์สมัครใช้บริการอีกครั้งของ Google Play ในกรณีนี้ คุณจะได้รับการแจ้งเตือนแบบเรียลไทม์สำหรับนักพัฒนาแอป SUBSCRIPTION_RESTARTED ในแบ็กเอนด์ และจะไม่มีการออกโทเค็นการซื้อใหม่ แต่จะใช้โทเค็นเดิมเพื่อต่ออายุการสมัครใช้บริการ ดูวิธีจัดการการคืนค่าในระบบการเรียกเก็บเงินของ Google Play ได้ที่การคืนค่าใน คู่มือการจัดการการสมัครใช้บริการ
นอกจากนี้ คุณยังเรียกใช้การคืนค่าในระบบการเรียกเก็บเงินของ Google Play จากแอปได้โดยเรียกใช้ launchBillingFlow() ดูคำอธิบายวิธีดำเนินการนี้ได้ที่
ก่อนการสมัครใช้บริการจะหมดอายุ - ในแอป
ในกรณีของผู้ใช้ที่ผ่านขั้นตอนการเลือกของผู้ใช้สำหรับการ
ซื้อครั้งแรก (ซึ่งถูกยกเลิกแต่ยังใช้งานได้) ระบบจะ
ตรวจหาตัวเลือกของผู้ใช้โดยอัตโนมัติและแสดงอินเทอร์เฟซผู้ใช้สำหรับ
การกู้คืนการซื้อเหล่านี้ ระบบจะขอให้ผู้ใช้ยืนยันการซื้อการสมัครใช้บริการอีกครั้งผ่าน Google Play แต่ผู้ใช้ไม่จำเป็นต้องทำตามขั้นตอนการเลือกของผู้ใช้อีกครั้ง ในกรณีนี้ ระบบจะออกโทเค็นการซื้อใหม่ให้แก่ผู้ใช้
แบ็กเอนด์จะได้รับการแจ้งเตือนแบบเรียลไทม์สำหรับนักพัฒนาแอป SUBSCRIPTION_PURCHASED และค่า linkedPurchaseToken สำหรับสถานะการซื้อใหม่จะได้รับการตั้งค่าเช่นเดียวกับกรณีการอัปเกรดหรือดาวน์เกรด โดยมีโทเค็นการซื้อเก่าสำหรับการสมัครใช้บริการที่ถูกยกเลิก
การสมัครใช้บริการอีกครั้ง
หากการสมัครใช้บริการหมดอายุโดยสมบูรณ์ ไม่ว่าจะเกิดจากการยกเลิกหรือ การชำระเงินถูกปฏิเสธโดยไม่มีการกู้คืน (การระงับบัญชีที่หมดอายุ) ผู้ใช้ ต้องสมัครใช้บริการอีกครั้งหากต้องการเริ่มสิทธิ์ใหม่
นอกจากนี้ คุณยังเปิดใช้การสมัครใช้บริการอีกครั้งผ่านแอปได้ด้วยการประมวลผลในลักษณะเดียวกับการลงชื่อสมัครใช้มาตรฐาน
ผู้ใช้ควรเลือกได้ว่าจะใช้ระบบการเรียกเก็บเงินใด
launchBillingFlow() อาจถูกเรียกใช้ในกรณีนี้ตามที่อธิบายไว้ในการเปิดตัวขั้นตอนการชำระเงินภายนอก
การจัดการคำตอบ
เมื่อเกิดข้อผิดพลาด เมธอด isBillingProgramAvailableAsync() ,
createBillingProgramReportingDetailsAsync(), launchBillingFlow() อาจ
แสดง BillingResponseCode อื่นที่ไม่ใช่ BillingResponseCode.OK พิจารณา
จัดการรหัสการตอบกลับเหล่านี้ดังนี้
BillingResponseCode.ERROR: นี่คือข้อผิดพลาดภายใน อย่า ทำธุรกรรมหรือเปิดเว็บไซต์ภายนอก ลองอีกครั้งโดย เรียกใช้ API อีกครั้งBillingResponseCode.FEATURE_NOT_SUPPORTED: Play Store ไม่รองรับ API การชำระเงินภายนอกในอุปกรณ์ปัจจุบัน อย่า ทำธุรกรรมหรือเปิดเว็บไซต์ภายนอกBillingResponseCode.DEVELOPER_ERROR: คำขอมีข้อผิดพลาด ใช้ข้อความแก้ไขข้อบกพร่องเพื่อระบุและแก้ไขข้อผิดพลาดก่อน ดำเนินการต่อBillingResponseCode.USER_CANCELED: อย่าเปิดเว็บไซต์หรือแอปภายนอก ให้เรียกใช้launchBillingFlow()อีกครั้งเพื่อแสดงกล่องโต้ตอบข้อมูลแก่ผู้ใช้ในครั้งถัดไปที่คุณพยายามนำผู้ใช้ออกนอกแอปBillingResponseCode.BILLING_UNAVAILABLE: ธุรกรรมนี้ไม่มีสิทธิ์สำหรับการชำระเงินภายนอก ดังนั้นการเรียกเก็บเงินจากนักพัฒนาแอปจึงไม่พร้อมให้บริการภายใต้โปรแกรมนี้ สาเหตุอาจเป็นเพราะผู้ใช้ไม่ได้อยู่ในประเทศที่มีสิทธิ์สำหรับโปรแกรมนี้ หรือบัญชีของคุณยังไม่ได้ลงทะเบียนเข้าร่วมโปรแกรมนี้สำเร็จ หากเป็นกรณีหลัง ให้ตรวจสอบ สถานะการลงทะเบียนใน Play Developer ConsoleBillingResponseCode.NETWORK_ERRORBillingResponseCode.SERVICE_DISCONNECTEDBillingResponseCode.SERVICE_UNAVAILABLE: ข้อผิดพลาดเหล่านี้เป็นข้อผิดพลาดชั่วคราว ซึ่งควรจัดการด้วยนโยบายการลองใหม่ที่เหมาะสม ในกรณีของSERVICE_DISCONNECTEDให้สร้างการเชื่อมต่อกับ Google Play อีกครั้งก่อนที่จะลองอีกครั้ง
ทดสอบลิงก์การชำระเงินภายนอก
คุณควรใช้ผู้ทดสอบใบอนุญาตเพื่อทดสอบการผสานรวมการชำระเงินภายนอก ระบบจะไม่เรียกเก็บเงินจากคุณสำหรับธุรกรรมที่เริ่มต้นโดยบัญชีผู้ทดสอบใบอนุญาต ดูข้อมูลเพิ่มเติมเกี่ยวกับการกำหนดค่าผู้ทดสอบใบอนุญาตได้ที่ ทดสอบการเรียกเก็บเงินสำหรับการซื้อในแอปด้วยการอนุญาตให้ใช้สิทธิแอปพลิเคชัน
ขั้นตอนถัดไป
หลังจากผสานรวมในแอปเสร็จแล้ว คุณก็พร้อมที่จะผสานรวมแบ็กเอนด์