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

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

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

    Kotlin

    val offerTokenNewPlan = productDetailsNewPlan
         .getSubscriptionOfferDetails(selectedOfferIndex)
         .getOfferToken()
    

    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)
                        // 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() อาจเรียกใช้ในกรณีนี้ตามที่อธิบายไว้ใน เปิดตัวขั้นตอนการเรียกเก็บเงินแบบให้ผู้ใช้ตัดสินใจ

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

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

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

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