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

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

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

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

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

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