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

คู่มือนี้อธิบายวิธีผสานรวม API เพื่อเสนอการเรียกเก็บเงินระบบอื่นเท่านั้น (กล่าวคือ แบบไม่ให้ผู้ใช้ตัดสินใจ) ในแอปที่มีสิทธิ์ หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับโปรแกรมเหล่านี้ รวมถึงข้อกำหนดของการได้รับสิทธิ์และขอบเขตทางภูมิศาสตร์ โปรดดูเกี่ยวกับ การเรียกเก็บเงิน

การตั้งค่า Play Billing Library

เพิ่มการพึ่งพา Play Billing Library ลงในแอป Android วิธีใช้ API การเรียกเก็บเงินระบบอื่นที่คุณต้องใช้ในเวอร์ชัน 6.1 ขึ้นไป

เชื่อมต่อกับ Google Play

ขั้นตอนแรกในกระบวนการผสานรวมจะเหมือนกับที่อธิบายไว้ใน คู่มือการผสานรวม Google Play Billing โดยมีการแก้ไขเล็กน้อย การเริ่มต้น BillingClient

  • คุณต้องเรียกใช้เมธอดใหม่เพื่อระบุว่าแอปของคุณใช้เฉพาะ ระบบการเรียกเก็บเงินระบบอื่น: enableAlternativeBillingOnly

ตัวอย่างต่อไปนี้แสดงการเริ่มต้น BillingClient ด้วยรายการเหล่านี้ การแก้ไข:

Kotlin


var billingClient = BillingClient.newBuilder(context)
    .enableAlternativeBillingOnly()
    .build()

Java

private BillingClient billingClient = BillingClient.newBuilder(context)
    .enableAlternativeBillingOnly()
    .build();

หลังจากเริ่มต้น BillingClient แล้ว คุณจะต้องสร้างการเชื่อมต่อเพื่อ Google Play ตามที่อธิบายไว้ในคู่มือการผสานรวม

กำลังตรวจสอบห้องว่าง

แอปของคุณควรยืนยันว่าการเรียกเก็บเงินระบบอื่นพร้อมใช้งานผ่านการโทรเท่านั้น isAlternativeBillingOnlyAvailableAsync

API นี้จะส่งคืน BillingResponseCode.OK ถ้าการเรียกเก็บเงินระบบอื่นเท่านั้นคือ พร้อมใช้งาน โปรดดูรายละเอียดเกี่ยวกับวิธีที่แอปควรทำในการจัดการการตอบกลับ ตอบสนองโค้ดตอบกลับอื่นๆ

Kotlin


billingClient.isAlternativeBillingOnlyAvailableAsync(object:
    AlternativeBillingOnlyAvailabilityListener {
        override fun onAlternativeBillingOnlyAvailabilityResponse(
            billingResult: BillingResult) {
            if (billingResult.responseCode !=  BillingResponseCode.OK) {
                // Handle failures such as retrying due to network errors,
                // handling alternative billing only being unavailable, etc.
                return
            }

            // Alternative billing only is available. Continue with steps in
            // the guide.
        }
    });

Java


billingClient.isAlternativeBillingOnlyAvailable(
    new AlternativeBillingOnlyAvailabilityListener() {
        @Override
        public void onAlternativeBillingOnlyAvailabilityResponse(
            BillingResult billingResult) {
            if (billingResult.getResponseCode() != BillingResponseCode.OK) {
                 // Handle failures such as retrying due to network errors,
                 // handling alternative billing only being unavailable,
                 // etc.
                return;
            }

            // Alternative billing only is available. Continue with steps in
            // the guide.
        }
    });

กล่องโต้ตอบข้อมูลสำหรับผู้ใช้

หากต้องการผสานรวมกับการเรียกเก็บเงินระบบอื่นเท่านั้น แอปที่มีสิทธิ์ของคุณต้องแสดง หน้าจอข้อมูลซึ่งช่วยให้ผู้ใช้ทราบว่าจะไม่มีการจัดการการเรียกเก็บเงิน โดย Google Play หน้าจอข้อมูลจะต้องแสดงต่อผู้ใช้ด้วยการเรียก showAlternativeBillingOnlyInformationDialog API ก่อนเริ่ม ขั้นตอนการเรียกเก็บเงินระบบอื่นในแต่ละครั้ง หากผู้ใช้รับทราบ กล่องโต้ตอบ การใช้ API นี้มักจะไม่ส่งผลให้กล่องโต้ตอบแสดงขึ้น อีกครั้ง อาจมีบางครั้งที่กล่องโต้ตอบแสดงต่อผู้ใช้อีกครั้งในสถานการณ์ต่างๆ เช่น เมื่อผู้ใช้ล้างแคชในอุปกรณ์

Kotlin


// An activity reference from which the alternative billing only information
// dialog will be launched.
val activity : Activity = ...;

val listener : AlternativeBillingOnlyInformationDialogListener =
    AlternativeBillingOnlyInformationDialogListener { 
        override fun onAlternativeBillingOnlyInformationDialogResponse(
            billingResult: BillingResult) {
            // check billingResult
        }
}

val billingResult =
    billingClient.showAlternativeBillingOnlyInformationDialog(activity,
        listener)

Java


// An activity reference from which the alternative billing only information
// dialog will be launched.
Activity activity = ...;

AlternativeBillingOnlyInformationDialogListener listener =
    new AlternativeBillingOnlyInformationDialogListener() {
        @Override
        public void onAlternativeBillingOnlyInformationDialogResponse(
            BillingResult billingResult) {
                // check billingResult
            }
    };

BillingResult billingResult =
    billingClient.showAlternativeBillingOnlyInformationDialog(activity,
        listener);

หากเมธอดนี้แสดงเป็น BillingResponseCode.OK แสดงว่าแอปของคุณสามารถดำเนินการต่อได้ พร้อมทำธุรกรรม ในกรณีที่เป็น BillingResponseCode.USER_CANCELED แอปของคุณควรเรียก showAlternativeBillingOnlyInformationDialog เพื่อแสดง แก่ผู้ใช้อีกครั้ง สำหรับโค้ดตอบกลับอื่นๆ โปรดดูที่การจัดการการตอบกลับ

การรายงานธุรกรรมไปยัง Google Play

ต้องรายงานธุรกรรมทั้งหมดที่ดำเนินการผ่านระบบการเรียกเก็บเงินระบบอื่น ไปยัง Google Play โดยเรียกใช้ Google Play Developer API จากแบ็กเอนด์ของคุณภายใน 24 ชั่วโมง โดยให้ externalTransactionToken ที่ได้รับจากการใช้ API ที่อธิบายไว้ด้านล่าง ควรสร้าง externalTransactionToken ใหม่สำหรับแต่ละ การซื้อครั้งเดียว การสมัครใช้บริการใหม่แต่ละครั้ง และสำหรับการอัปเกรด/ดาวน์เกรดเป็น ที่มีอยู่ ในการเรียนรู้วิธีรายงานธุรกรรม ได้รับ externalTransactionToken โปรดดูคู่มือการผสานรวมแบ็กเอนด์

Kotlin

billingClient.createAlternativeBillingOnlyReportingDetailsAsync(object:
    AlternativeBillingOnlyReportingDetailsListener {
        override fun onAlternativeBillingOnlyTokenResponse(
            billingResult: BillingResult,
            alternativeBillingOnlyReportingDetails:
                AlternativeBillingOnlyReportingDetails?) {
            if (billingResult.responseCode !=  BillingResponseCode.OK) {
                // Handle failures such as retrying due to network errors.
                return
            }

            val externalTransactionToken =
                alternativeBillingOnlyReportingDetails?
                    .externalTransactionToken

            // Send transaction token to backend and report to Google Play.
        }
    });

Java


billingClient.createAlternativeBillingOnlyReportingDetailsAsync(
    new AlternativeBillingOnlyReportingDetailsListener() {
        @Override
        public void onAlternativeBillingOnlyTokenResponse(
            BillingResult billingResult,
            @Nullable AlternativeBillingOnlyReportingDetails
                alternativeBillingOnlyReportingDetails) {
            if (billingResult.getResponseCode() != BillingResponseCode.OK) {
                // Handle failures such as retrying due to network errors.
                return;
            }

            String transactionToken =
                alternativeBillingOnlyReportingDetails
                .getExternalTransactionToken();

            // Send transaction token to backend and report to Google Play.
        }
    });

การจัดการการตอบกลับ

วิธีการข้างต้น isAlternativeBillingOnlyAvailableAsync(), showAlternativeBillingOnlyInformationDialog() และ createAlternativeBillingOnlyReportingDetailsAsync() อาจกลับมา non-BillingResponseCode.OK ในกรณีที่เกิดข้อผิดพลาด คำแนะนำ การจัดการข้อผิดพลาดจะอธิบายไว้ด้านล่างนี้

  • ERROR: นี่เป็นข้อผิดพลาดภายใน โปรดอย่าทำธุรกรรม โปรดลองอีกครั้งโดยการโทร showAlternativeBillingOnlyInformationDialog() เพื่อแสดงข้อมูล กล่องโต้ตอบกับผู้ใช้ในครั้งถัดไปที่ผู้ใช้ พยายามทำการซื้อเลย
  • FEATURE_NOT_SUPPORTED: ไม่รองรับ API การเรียกเก็บเงินระบบอื่นโดย Play Store ในอุปกรณ์ที่ใช้อยู่ โปรดอย่าทำธุรกรรม
  • USER_CANCELED: อย่าทำธุรกรรมต่อ โทร showAlternativeBillingOnlyInformationDialog() อีกครั้งเพื่อแสดง ต่อไปเมื่อผู้ใช้พยายามทำ การซื้อ
  • BILLING_UNAVAILABLE: ธุรกรรมนี้ไม่มีสิทธิ์สำหรับตัวเลือกอื่น การเรียกเก็บเงินเท่านั้น ดังนั้นจึงไม่ควรดำเนินการต่อภายใต้โปรแกรมนี้ นี่คือ เนื่องจากผู้ใช้ไม่ได้อยู่ในประเทศที่มีสิทธิ์เข้าร่วมโปรแกรมนี้ หรือ บัญชีของคุณยังลงทะเบียนเข้าร่วมโปรแกรมไม่สำเร็จ หากเป็น หลังจากนั้น ให้ตรวจสอบสถานะการลงทะเบียนของคุณใน Play Developer Console
  • DEVELOPER_ERROR: มีข้อผิดพลาดเกี่ยวกับคำขอ ใช้ข้อความแก้ไขข้อบกพร่อง เพื่อระบุและแก้ไขข้อผิดพลาดก่อนดำเนินการต่อ
  • NETWORK_ERROR, SERVICE_DISCONNECTED, SERVICE_UNAVAILABLE: ต่อไปนี้คือ ข้อผิดพลาดชั่วคราวที่ควรลองอีกครั้ง ในกรณีที่ SERVICE_DISCONNECTED สร้างการเชื่อมต่อกับ Google Play อีกครั้งก่อนวันที่ กำลังลองอีกครั้ง

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

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

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

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