คำแนะนำการผสานรวมในแอปสำหรับการเรียกเก็บเงินระบบอื่นแบบให้ผู้ใช้ตัดสินใจ

คู่มือนี้อธิบายวิธีผสานรวม 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

  1. ระบุ offerToken ของข้อเสนอที่เลือกสำหรับแพ็กเกจใหม่

    Kotlin

    val offerTokenNewPlan = productDetailsNewPlan.getSubscriptionOfferDetails()
        ?.getOrNull(selectedOfferIndex)
        ?.offerToken
        ?: ""

    Java

    String offerTokenNewPlan = productDetailsNewPlan
            .getSubscriptionOfferDetails(selectedOfferIndex)
            .getOfferToken();
    
  2. ส่งข้อมูลที่ถูกต้องไปยังระบบการเรียกเก็บเงินของ 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() อาจถูกเรียกใช้ในกรณีนี้ ตามที่อธิบายไว้ใน เปิดขั้นตอนการเรียกเก็บเงินแบบให้ผู้ใช้ตัดสินใจ

ทดสอบการเรียกเก็บเงินระบบอื่น

คุณควรใช้ผู้ทดสอบใบอนุญาตเพื่อทดสอบการผสานรวมการเรียกเก็บเงินระบบอื่น ระบบจะไม่เรียกเก็บเงินจากคุณสำหรับธุรกรรมที่บัญชีผู้ทดสอบใบอนุญาตเริ่มต้น ดูข้อมูลเพิ่มเติมเกี่ยวกับการกำหนดค่าผู้ทดสอบใบอนุญาตได้ที่หัวข้อทดสอบการเรียกเก็บเงินสำหรับการซื้อในแอปด้วยการอนุญาตให้ใช้สิทธิแอปพลิเคชัน

ขั้นตอนถัดไป

เมื่อผสานรวมในแอปเสร็จแล้ว คุณก็พร้อมที่จะผสานรวมแบ็กเอนด์