Panduan integrasi dalam aplikasi hanya untuk penagihan alternatif

Panduan ini menjelaskan cara mengintegrasikan API untuk menawarkan penagihan alternatif saja (yaitu tanpa pilihan pengguna) di aplikasi yang memenuhi syarat. Untuk mempelajari program ini lebih lanjut, termasuk persyaratan kelayakan dan cakupan geografis, lihat Tentang Penagihan Alternatif.

Penyiapan Play Billing Library

Tambahkan dependensi Play Billing Library ke aplikasi Android. Untuk menggunakan API penagihan alternatif, Anda harus menggunakan versi 6.1 atau yang lebih tinggi.

Menghubungkan ke Google Play

Langkah-langkah pertama dalam proses integrasi sama dengan langkah-langkah yang dijelaskan di Panduan integrasi Layanan Penagihan Google Play, dengan beberapa modifikasi saat melakukan inisialisasi BillingClient Anda:

  • Anda perlu memanggil metode baru untuk menunjukkan bahwa aplikasi Anda hanya menggunakan sistem penagihan alternatif: enableAlternativeBillingOnly.

Contoh berikut menunjukkan inisialisasi BillingClient dengan modifikasi ini:

Kotlin


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

Java

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

Setelah melakukan inisialisasi BillingClient, Anda harus menghubungkan ke Google Play seperti yang dijelaskan dalam panduan integrasi.

Memeriksa Ketersediaan

Aplikasi Anda harus mengonfirmasi bahwa hanya penagihan alternatif yang tersedia dengan memanggil isAlternativeBillingOnlyAvailableAsync.

API ini akan menampilkan BillingResponseCode.OK jika hanya penagihan alternatif yang tersedia. Lihat penanganan respons untuk mengetahui detail tentang cara aplikasi Anda merespons kode respons lainnya.

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.
        }
    });

Dialog informasi untuk pengguna

Untuk berintegrasi dengan penagihan alternatif saja, aplikasi Anda yang memenuhi syarat harus menampilkan layar informasi yang membantu pengguna memahami bahwa penagihan tidak akan dikelola oleh Google Play. Layar informasi harus ditampilkan kepada pengguna dengan memanggil showAlternativeBillingOnlyInformationDialog API sebelum memulai alur penagihan alternatif setiap kali diperlukan. Jika pengguna telah mengonfirmasi dialog, penggunaan API ini biasanya tidak akan menyebabkan dialog ditampilkan lagi. Adakalanya dialog ditampilkan lagi kepada pengguna dalam situasi seperti jika pengguna menghapus cache di perangkatnya.

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);

Jika metode ini menampilkan BillingResponseCode.OK, aplikasi Anda dapat melanjutkan transaksi. Jika BillingResponseCode.USER_CANCELED ditampilkan, aplikasi Anda harus memanggil showAlternativeBillingOnlyInformationDialog untuk menampilkan lagi dialog kepada pengguna. Untuk kode respons lainnya, lihat bagian penanganan respons.

Melaporkan transaksi ke Google Play

Semua transaksi yang dilakukan melalui sistem penagihan alternatif harus dilaporkan ke Google Play dengan memanggil Google Play Developer API dari backend Anda dalam waktu 24 jam, memberikan externalTransactionToken yang diperoleh menggunakan API yang dijelaskan di bawah ini. externalTransactionToken baru harus dibuat untuk setiap pembelian satu kali, setiap langganan baru, dan untuk setiap upgrade/downgrade ke langganan yang ada. Untuk mempelajari cara melaporkan transaksi setelah externalTransactionToken diperoleh, lihat panduan integrasi backend.

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.
        }
    });

Penanganan respons

Metode isAlternativeBillingOnlyAvailableAsync(), showAlternativeBillingOnlyInformationDialog() di atas dan createAlternativeBillingOnlyReportingDetailsAsync() dapat menampilkan respons non-BillingResponseCode.OK jika terjadi error. Penanganan error yang direkomendasikan dijelaskan di bawah ini:

  • ERROR: Ini adalah error internal. Lanjutkan dengan memproses transaksi melalui sistem penagihan alternatif. Transaksi tidak perlu dilaporkan ke Google, termasuk perpanjangan untuk langganan yang terpengaruh.
  • FEATURE_NOT_SUPPORTED: API penagihan alternatif tidak didukung oleh Play Store di perangkat saat ini. Lanjutkan dengan memproses transaksi melalui sistem penagihan alternatif. Transaksi tersebut, serta perpanjangan apa pun untuk langganan yang terpengaruh, tidak perlu dilaporkan ke Google.
  • USER_CANCELED: Panggil showAlternativeBillingOnlyInformationDialog() lagi untuk menampilkan dialog informasi kepada pengguna saat pengguna mencoba melakukan pembelian lagi.
  • BILLING_UNAVAILABLE: Transaksi tidak memenuhi syarat untuk penagihan alternatif saja, sehingga tidak boleh dilanjutkan dalam program ini. Hal ini disebabkan karena pengguna tidak berada di negara yang memenuhi syarat untuk program ini atau akun Anda belum berhasil terdaftar dalam program ini. Jika disebabkan oleh pendaftaran belum berhasil, periksa status pendaftaran Anda di Konsol Play.
  • DEVELOPER_ERROR: Terjadi error dengan permintaan. Gunakan pesan debug untuk mengidentifikasi dan memperbaiki error sebelum melanjutkan.
  • NETWORK_ERROR, SERVICE_DISCONNECTED, SERVICE_UNAVAILABLE: Ini adalah error sementara yang harus dicoba lagi. Jika SERVICE_DISCONNECTED ditampilkan, buat kembali koneksi dengan Google Play sebelum mencoba lagi.

Menguji penagihan alternatif

Penguji lisensi harus digunakan untuk menguji integrasi penagihan alternatif Anda. Anda tidak akan ditagih untuk transaksi yang telah dimulai oleh akun penguji lisensi. Lihat Menguji penagihan via Google Play dengan pemberian lisensi aplikasi untuk mengetahui informasi selengkapnya tentang cara mengonfigurasi penguji lisensi.

Langkah berikutnya

Setelah menyelesaikan integrasi dalam aplikasi, Anda siap untuk mengintegrasikan backend.