Catatan rilis Google Play Billing Library

Topik ini berisi catatan rilis untuk Library Layanan Penagihan Google Play.

Rilis Library Layanan Penagihan Google Play 6.2.0 (06-03-2024)

Library Layanan Penagihan Google Play versi 6.2.0 dan ekstensi Kotlin kini tersedia.

Ringkasan perubahan

Rilis Google Play Billing Library 6.1.0 (14-11-2023)

Google Play Billing Library versi 6.1.0 dan ekstensi Kotlin kini tersedia.

Ringkasan perubahan

Rilis Google Play Billing Library 6.0.1 (22-06-2023)

Library Layanan Penagihan Google Play versi 6.0.1 dan ekstensi Kotlin kini tersedia.

Ringkasan perubahan

Mengupdate Play Billing Library agar kompatibel dengan Android 14.

Rilis Library Layanan Penagihan Google Play 6.0 (10-05-2023)

Library Layanan Penagihan Google Play versi 6.0.0 dan ekstensi Kotlin kini tersedia.

Ringkasan perubahan

  • Menambahkan enum ReplacementMode baru untuk menggantikan ProrationMode.

    Perhatikan bahwa ProrationMode masih tersedia untuk alasan kompatibilitas mundur.

  • Menghapus ID pesanan untuk pembelian PENDING.

    Sebelumnya, ID pesanan akan selalu dibuat meskipun pembelian tertunda. Mulai versi 6.0.0, ID pesanan tidak akan dibuat untuk pembelian yang tertunda, dan untuk pembelian ini, ID pesanan akan diisi setelah pembelian dipindahkan ke status PURCHASED.

  • Menghapus metode queryPurchases dan launchPriceConfirmationFlow.

    Metode queryPurchases dan launchPriceConfirmationFlow yang sebelumnya ditandai sebagai tidak digunakan lagi kini telah dihapus di Library Layanan Penagihan Play 6.0.0. Developer harus menggunakan queryPurchasesAsync, bukan queryPurchases. Untuk alternatif launchPriceConfirmationFlow, lihat Perubahan harga.

  • Menambahkan kode respons error jaringan baru.

    Kode respons error jaringan baru, NETWORK_ERROR, telah ditambahkan mulai dari PBL versi 6.0.0. Kode ini ditampilkan saat terjadi error karena ada masalah koneksi jaringan. Error koneksi jaringan ini sebelumnya dilaporkan sebagai SERVICE_UNAVAILABLE.

  • Memperbarui SERVICE_UNAVAILABLE dan SERVICE_TIMEOUT.

    Mulai dari PBL versi 6.0.0, error karena waktu tunggu dalam pemrosesan habis akan ditampilkan sebagai SERVICE_UNAVAILABLE, bukan SERVICE_TIMEOUT saat ini.

    Perilaku ini tidak berubah pada PBL versi sebelumnya.

  • Menghapus SERVICE_TIMEOUT.

    Mulai PBL versi 6.0.0, SERVICE_TIMEOUT tidak akan ditampilkan lagi. PBL versi sebelumnya akan tetap menampilkan kode ini.

  • Menambahkan logging tambahan.

    Rilis Library Layanan Penagihan Play 6 menyertakan logging tambahan, yang memberikan insight tentang penggunaan API (seperti keberhasilan dan kegagalan) serta masalah koneksi layanan. Informasi ini akan digunakan untuk meningkatkan performa Library Layanan Penagihan Play dan memberikan dukungan yang lebih baik untuk error.

Rilis Google Play Billing Library 5.2.1 (22-06-2023)

Library Layanan Penagihan Google Play versi 5.2.1 dan ekstensi Kotlin kini tersedia.

Ringkasan perubahan

Mengupdate Play Billing Library agar kompatibel dengan Android 14.

Rilis Library Layanan Penagihan Google Play 5.2 (06-04-2023)

Library Layanan Penagihan Google Play versi 5.2.0 dan ekstensi Kotlin kini tersedia.

Ringkasan perubahan

Rilis Library Layanan Penagihan Google Play 5.1 (31-10-2022)

Library Layanan Penagihan Google Play versi 5.1.0 dan ekstensi Kotlin kini tersedia.

Versi ini berisi perubahan berikut.

Ringkasan perubahan

Rilis Library Layanan Penagihan Google Play 5.0 (11-05-2022)

Library Layanan Penagihan Google Play versi 5.0.0 dan ekstensi Kotlin kini tersedia.

Versi ini berisi perubahan berikut.

Ringkasan perubahan

  • Memperkenalkan model baru untuk langganan, termasuk entitas baru yang memungkinkan Anda membuat beberapa penawaran untuk satu produk langganan. Untuk informasi selengkapnya, lihat panduan migrasi.
  • Menambahkan BillingClient.queryProductDetailsAsync() untuk menggantikan BillingClient.querySkuDetailsAsync().
  • Menambahkan metode setIsOfferPersonalized() untuk persyaratan pengungkapan penetapan harga yang dipersonalisasi Uni Eropa. Untuk mempelajari cara menggunakan metode ini lebih lanjut, lihat Menunjukkan harga yang dipersonalisasi.
  • Menghapus queryPurchases(), yang sebelumnya tidak digunakan lagi dan digantikan oleh queryPurchasesAsync yang diperkenalkan di Library Layanan Penagihan Google Play 4.0.0.
  • launchPriceChangeFlow tidak digunakan lagi dan akan dihapus dalam rilis mendatang. Untuk mempelajari alternatif lebih lanjut, lihat Meluncurkan alur konfirmasi perubahan harga.
  • Menghapus setVrPurchaseFlow(), yang sebelumnya digunakan saat membuat instance alur pembelian. Pada versi sebelumnya, metode ini mengalihkan pengguna untuk menyelesaikan pembelian di perangkat Android mereka. Setelah Anda menghapus metode ini, pengguna akan menyelesaikan pembelian melalui alur pembelian standar.

Rilis Library Layanan Penagihan Google Play 4.1 (23-02-2022)

Library Layanan Penagihan Google Play versi 4.1.0 dan ekstensi Kotlin kini tersedia.

Versi ini berisi perubahan berikut.

Ringkasan perubahan

Rilis Library Layanan Penagihan Google Play 4.0 (18-05-2021)

Library Layanan Penagihan Google Play versi 4.0.0 dan ekstensi Kotlin kini tersedia.

Ringkasan perubahan

Rilis Library Layanan Penagihan Google Play 3.0.3 (12-03-2021)

Library Layanan Penagihan Google Play versi 3.0.3, ekstensi Kotlin, dan plugin Unity kini tersedia.

Perbaikan Bug Java dan Kotlin

  • Memperbaiki kebocoran memori saat endConnection() dipanggil.
  • Memperbaiki masalah saat Library Layanan Penagihan Google Play digunakan oleh aplikasi yang menggunakan mode peluncuran tugas tunggal. Callback onPurchasesUpdated() akan dipicu saat aplikasi dilanjutkan dari peluncur Android dan dialog penagihan terlihat sebelum ditangguhkan.

Perbaikan Bug Unity

  • Update ke Java versi 3.0.3 untuk memperbaiki kebocoran memori dan menyelesaikan masalah yang mencegah pembelian saat aplikasi dilanjutkan dari peluncur Android dan dialog penagihan terlihat sebelum ditangguhkan.

Rilis Library Layanan Penagihan Google Play 3.0.2 (24-11-2020)

Library Layanan Penagihan Google Play versi 3.0.2 dan ekstensi Kotlin kini tersedia.

Perbaikan bug

  • Memperbaiki bug di ekstensi Kotlin saat coroutine gagal dengan error "Already resumed".
  • Memperbaiki referensi yang belum terselesaikan saat ekstensi Kotlin digunakan dengan library kotlinx.coroutines versi 1.4+.

Rilis Library Layanan Penagihan Google Play 3.0.1 (30-09-2020)

Library Layanan Penagihan Google Play versi 3.0.1 dan ekstensi Kotlin kini tersedia.

Perbaikan bug

  • Memperbaiki bug yang menyebabkan jika aplikasi dihentikan dan dipulihkan selama alur penagihan. PurchasesUpdatedListener mungkin tidak dipanggil dengan hasil pembelian.

Rilis Library Layanan Penagihan Google Play 3.0 (08-06-2020)

Library Layanan Penagihan Google Play versi 3.0.0, ekstensi Kotlin, dan plugin Unity kini tersedia.

Ringkasan perubahan

  • Menghapus dukungan SKU yang diberikan.
  • Menghapus parameter ChildDirected dan UnderAgeOfConsent.
  • Menghapus metode payload developer yang tidak digunakan lagi.
  • Menghapus metode BillingFlowParams.setAccountId() dan BillingFlowParams.setDeveloperId() yang tidak digunakan lagi.
  • Menghapus metode BillingFlowParams.setOldSkus(String oldSku) dan BillingFlowParams.addOldSku(String oldSku) yang tidak digunakan lagi.
  • Menambahkan anotasi nullability.

Perbaikan bug

  • SkuDetails.getIntroductoryPriceCycles() sekarang menampilkan int, bukan String.
  • Memperbaiki bug yang menyebabkan alur penagihan dianggap memiliki parameter tambahan meskipun tidak ada parameter tambahan yang ditetapkan.

Rilis Library Layanan Penagihan Google Play 2.2.1 (20-05-2020)

Library Layanan Penagihan Google Play versi 2.2.1 sekarang tersedia.

Perbaikan bug

  • Mengupdate versi default Java library Layanan Penagihan Play yang menjadi dependensi ekstensi Kotlin.

Rilis Library Layanan Penagihan Google Play 2.2.0 dan dukungan Unity (23-03-2020)

Layanan Penagihan Google Play versi 2.2.0 menyediakan fungsi yang membantu developer memastikan pembelian diatribusikan kepada pengguna yang benar. Perubahan ini menggantikan kebutuhan mem-build solusi kustom berdasarkan payload developer. Sebagai bagian dari update ini, fungsionalitas payload developer kini sudah tidak digunakan lagi dan akan dihapus pada rilis mendatang. Untuk informasi selengkapnya, termasuk alternatif yang direkomendasikan, lihat Payload developer.

Library Penagihan Layanan Penagihan Google Play 2 untuk Unity

Selain versi Java dan Kotlin Library Layanan Penagihan Google Play 2 saat ini, kami juga merilis versi library yang dapat digunakan dengan Unity. Sekarang developer game yang menggunakan API pembelian dalam aplikasi Unity dapat mengupgrade untuk memanfaatkan semua fitur Library Layanan Penagihan Google Play 2 dan untuk memudahkan upgrade selanjutnya ke versi Library Layanan Penagihan Google Play yang akan datang.

Untuk mempelajari lebih lanjut, lihat Menggunakan Layanan Penagihan Google Play dengan Unity.

Ringkasan perubahan

Rilis Library Layanan Penagihan Google Play 2.1.0 dan Rilis Ekstensi Kotlin 2.1.0 (10-12-2019)

Library Layanan Penagihan Google Play versi 2.1.0 dan ekstensi Kotlin baru sekarang tersedia. Ekstensi Kotlin Library Layanan Penagihan Play menyediakan alternatif API idiomatis untuk konsumsi Kotlin, yang mengutamakan coroutine dan keamanan null yang lebih baik. Untuk contoh kode, lihat Menggunakan Library Layanan Penagihan Google Play.

Versi ini berisi perubahan berikut.

Ringkasan perubahan

  • Di BillingFlowParams, setOldSku(String oldSku) tidak digunakan lagi dan diganti dengan setOldSku(String oldSku, String purchaseToken), untuk menghilangkan kerancuan saat beberapa akun di perangkat tersebut memiliki SKU yang sama.

Rilis Library Layanan Penagihan Google Play 2.0.3 (05-08-2019)

Library Layanan Penagihan Google Play versi 2.0.3 kini telah tersedia.

Perbaikan bug

  • Memperbaiki bug yang menyebabkan querySkuDetailsAsync() terkadang mengalami kegagalan dengan kode DEVELOPER_ERROR, bukan menampilkan hasil yang sukses.

Rilis Library Layanan Penagihan Google Play 2.0.2 (08-07-2019)

Google Play Billing Library versi 2.0.2 kini tersedia. Rilis ini berisi pembaruan pada dokumentasi referensi dan tidak mengubah fungsi library.

Rilis Library Layanan Penagihan Google Play 2.0.1 (06-06-2019)

Library Layanan Penagihan Google Play versi 2.0.1 sekarang tersedia. Versi ini berisi perubahan berikut.

Perbaikan bug

  • Memperbaiki bug yang menyebabkan pesan debug ditampilkan sebagai null dalam beberapa kasus.
  • Memperbaiki potensi masalah kebocoran memori.

Rilis Library Layanan Penagihan Google Play 2.0 (07-05-2019)

Library Layanan Penagihan Google Play versi 2.0 sekarang tersedia. Versi ini berisi perubahan berikut.

Pembelian harus dikonfirmasi dalam waktu tiga hari

Google Play mendukung pembelian produk dari dalam aplikasi Anda (dalam aplikasi) atau di luar aplikasi Anda (di luar aplikasi). Agar Google Play dapat memberikan pengalaman pembelian yang konsisten di mana pun pengguna membeli produk Anda, Anda harus mengonfirmasi semua pembelian yang diterima melalui Library Layanan Penagihan Google Play sesegera mungkin setelah memberikan hak kepada pengguna. Jika Anda tidak mengonfirmasi pembelian dalam waktu tiga hari, pengguna akan otomatis menerima pengembalian dana, dan Google Play akan mencabut pembelian tersebut. Untuk transaksi yang tertunda (baru dalam versi 2.0), rentang waktu tiga hari ini dimulai saat pembelian telah beralih ke status PURCHASED dan tidak berlaku selama pembelian berstatus PENDING.

Untuk langganan, Anda harus mengonfirmasi setiap pembelian yang memiliki token pembelian baru. Ini berarti semua pembelian awal, perubahan paket, dan pendaftaran ulang harus dikonfirmasi, tetapi Anda tidak perlu mengonfirmasi perpanjangan selanjutnya. Untuk menentukan apakah pembelian memerlukan konfirmasi, Anda dapat memeriksa kolom konfirmasi pada pembelian.

Objek Purchase kini menyertakan metode isAcknowledged() yang menunjukkan apakah pembelian telah dikonfirmasi atau belum. Selain itu, Google Play Developer API juga menyertakan nilai boolean konfirmasi untuk Purchases.products dan Purchases.subscriptions. Sebelum mengonfirmasi pembelian, pastikan Anda menggunakan metode ini untuk menentukan apakah pembelian telah dikonfirmasi atau belum.

Anda dapat mengonfirmasi pembelian menggunakan salah satu metode berikut:

  • Untuk produk habis pakai, gunakan consumeAsync(), yang tersedia dalam API klien.
  • Untuk produk tidak habis pakai, gunakan acknowledgePurchase(), yang tersedia dalam API klien.
  • Metode acknowledge() baru juga tersedia dalam API Server.

BillingFlowParams.setSku() telah dihapus

Metode BillingFlowParams#setSku() yang sebelumnya sudah tidak digunakan lagi telah dihapus dalam rilis ini. Sebelum merender produk dalam alur pembelian, Anda sekarang harus memanggil BillingClient.querySkuDetailsAsync(), yang meneruskan objek SkuDetails yang menjadi hasilnya ke BillingFlowParams.Builder.setSkuDetails().

Untuk contoh kode, lihat Menggunakan Library Layanan Penagihan Google Play.

Payload developer didukung

Library Layanan Penagihan Google Play versi 2.0 menambahkan dukungan untuk payload developer—string arbitrer yang dapat ditambahkan ke pembelian. Anda dapat menambahkan parameter payload developer ke pembelian, tetapi hanya setelah pembelian dikonfirmasi atau dipakai. Hal ini berbeda dengan payload developer di AIDL, karena payload dapat ditentukan saat memulai alur pembelian. Karena pembelian kini dapat diinisialisasi dari luar aplikasi, perubahan ini memastikan bahwa Anda selalu memiliki kesempatan untuk menambahkan payload ke pembelian.

Untuk mengakses payload dalam library yang baru, objek Purchase kini menyertakan metode getDeveloperPayload().

Penawaran yang konsisten

Saat Anda menawarkan SKU diskon, Google Play sekarang menampilkan harga asli SKU tersebut sehingga Anda dapat menunjukkan kepada pengguna bahwa mereka mendapatkan diskon.

SkuDetails berisi dua metode baru untuk mengambil harga SKU asli:

Transaksi yang tertunda

Pada library Layanan Penagihan Google Play versi 2.0, Anda harus mendukung pembelian yang memerlukan tindakan tambahan sebelum hak diberikan. Misalnya, pengguna mungkin memilih untuk membeli produk dalam aplikasi Anda di toko fisik menggunakan uang tunai. Hal ini berarti transaksi diselesaikan di luar aplikasi Anda. Dalam skenario ini, sebaiknya Anda hanya memberikan izin setelah pengguna menyelesaikan transaksi tersebut.

Untuk mengaktifkan pembelian tertunda, panggil enablePendingPurchases() sebagai bagian dari proses inisialisasi aplikasi Anda.

Gunakan Purchase.getPurchaseState() untuk menentukan apakah status pembelian adalah PURCHASED atau PENDING. Perlu diketahui bahwa sebaiknya Anda hanya memberikan izin jika pembelian tersebut berstatus PURCHASED. Anda harus memeriksa pembaruan status Purchase dengan melakukan hal berikut:

  1. Saat memulai aplikasi, panggil BillingClient.queryPurchases() untuk mengambil daftar produk tidak habis pakai yang terkait dengan pengguna.
  2. Panggil Purchase.getPurchaseState() pada setiap objek Purchase yang ditampilkan.
  3. Implementasikan metode onPurchasesUpdated() untuk merespons perubahan pada objek Purchase.

Selain itu, Google Play Developer API menyertakan status PENDING untuk Purchases.products. Transaksi yang tertunda tidak didukung untuk langganan.

Rilis ini juga memperkenalkan jenis notifikasi developer real-time baru, OneTimeProductNotification. Jenis notifikasi ini berisi satu pesan yang nilainya antara ONE_TIME_PRODUCT_PURCHASED atau ONE_TIME_PRODUCT_CANCELED. Jenis notifikasi ini hanya dikirim untuk pembelian yang terkait dengan metode pembayaran yang tertunda, seperti uang tunai.

Saat mengonfirmasi pembelian tertunda, pastikan Anda hanya melakukan konfirmasi jika pembelian berstatus PURCHASED, bukan PENDING.

Perubahan API

Library Layanan Penagihan Google Play versi 2.0 memuat beberapa perubahan API untuk mendukung fitur baru dan memperjelas fungsionalitas yang telah ada.

consumeAsync

consumeAsync() sekarang menggunakan objek ConsumeParams, bukan purchaseToken. ConsumeParams berisi purchaseToken serta payload developer opsional.

Versi consumeAsync() sebelumnya telah dihapus dalam rilis ini.

queryPurchaseHistoryAsync

Untuk meminimalkan kebingungan, queryPurchaseHistoryAsync() kini menampilkan objek PurchaseHistoryRecord, bukan Purchase. Objek PurchaseHistoryRecord sama dengan objek Purchase, tetapi objek pertama hanya mencerminkan nilai yang ditampilkan oleh queryPurchaseHistoryAsync() dan tidak berisi kolom autoRenewing, orderId, dan packageName. Perlu diketahui bahwa tidak ada yang berubah dengan data yang ditampilkan; queryPurchaseHistoryAsync() menampilkan data yang sama seperti sebelumnya.

Nilai BillingResult yang ditampilkan

API yang sebelumnya menampilkan nilai bilangan bulat BillingResponse kini menampilkan objek BillingResult. BillingResult berisi bilangan bulat BillingResponse serta string debug yang dapat Anda gunakan untuk mendiagnosis error. String debug ini menggunakan lokal en-US dan tidak dimaksudkan untuk ditampilkan kepada pengguna akhir.

Perbaikan bug

Rilis Library Layanan Penagihan Google Play 1.2.2 (07-03-2019)

Library Layanan Penagihan Google Play versi 1.2.2 sekarang tersedia. Versi ini berisi perubahan berikut.

Perbaikan bug

  • Perbaikan untuk masalah threading yang diperkenalkan pada v1.2.1. Panggilan latar belakang tidak lagi memblokir thread utama.

Perubahan lainnya

  • Meskipun penggunaan thread utama tetap direkomendasikan, sekarang Anda dapat membuat instance Library Layanan Penagihan Google Play dari thread latar belakang.
  • Pembuatan instance telah dimigrasikan sepenuhnya ke thread latar belakang untuk mengurangi kemungkinan terjadinya ANR (aplikasi tidak merespons).

Rilis Library Layanan Penagihan Play 1.2.1 (04-03-2019)

Library Layanan Penagihan Google Play versi 1.2.1 sekarang tersedia. Versi ini berisi perubahan berikut.

Perubahan utama

Perubahan lainnya

  • Menambahkan konstruktor publik untuk PurchasesResult dan SkuDetailsResult guna mempermudah pengujian.
  • Objek SkuDetails dapat menggunakan metode baru, getOriginalJson().
  • Semua panggilan layanan AIDL kini ditangani oleh thread latar belakang.

Perbaikan bug

  • Pemroses callback null tidak lagi diteruskan ke API publik.

Rilis Library Layanan Penagihan Google Play 1.2 (18-10-2018)

Library Layanan Penagihan Google Play versi 1.2 sekarang tersedia. Versi ini berisi perubahan berikut.

Ringkasan perubahan

  • Library Layanan Penagihan Google Play sekarang dilisensikan berdasarkan Perjanjian Lisensi Software Development Kit Android.
  • Menambahkan API launchPriceChangeConfirmationFlow, yang meminta pengguna untuk meninjau perubahan dalam proses pada harga langganan.
  • Menambahkan dukungan untuk mode penghitungan prorata baru, DEFERRED, saat mengupgrade atau mendowngrade langganan pengguna.
  • Dalam class BillingFlowParams, mengganti setSku() dengan setSkuDetails().
  • Perbaikan bug minor dan pengoptimalan kode.

Konfirmasi perubahan harga

Anda sekarang dapat mengubah harga langganan di Konsol Google Play serta meminta pengguna meninjau dan menerima harga baru saat mereka membuka aplikasi Anda.

Untuk menggunakan API ini, buat objek PriceChangeFlowParams menggunakan skuDetails dari produk langganan, lalu panggil launchPriceChangeConfirmationFlow(). Implementasikan PriceChangeConfirmationListener untuk menangani hasilnya saat alur konfirmasi perubahan harga selesai, seperti dalam cuplikan kode berikut:

Kotlin

val priceChangeFlowParams = PriceChangeFlowParams.newBuilder()
    .setSkuDetails(skuDetailsOfThePriceChangedSubscription)
    .build()

billingClient.launchPriceChangeConfirmationFlow(activity,
        priceChangeFlowParams,
        object : PriceChangeConfirmationListener() {
            override fun onPriceChangeConfirmationResult(responseCode: Int) {
                // Handle the result.
            }
        })

Java

PriceChangeFlowParams priceChangeFlowParams =
        PriceChangeFlowParams.newBuilder()
    .setSkuDetails(skuDetailsOfThePriceChangedSubscription)
    .build();

billingClient.launchPriceChangeConfirmationFlow(activity,
        priceChangeFlowParams,
        new PriceChangeConfirmationListener() {
            @Override
            public void onPriceChangeConfirmationResult(int responseCode) {
                // Handle the result.
            }
        });

Alur konfirmasi perubahan harga menampilkan dialog yang berisi informasi harga baru, yang meminta pengguna untuk menerima harga baru tersebut. Alur ini menampilkan kode respons dengan jenis BillingClient.BillingResponse.

Mode penghitungan prorata baru

Saat mengupgrade atau mendowngrade langganan pengguna, Anda dapat menggunakan mode penghitungan prorata baru, DEFERRED. Mode ini memperbarui langganan pengguna pada perpanjangan berikutnya. Untuk mempelajari lebih lanjut cara menetapkan mode penghitungan prorata ini, lihat Menetapkan mode penghitungan prorata.

Metode baru untuk menetapkan detail SKU

Dalam class BillingFlowParams, metode setSku() sudah tidak digunakan lagi. Perubahan ini dimaksudkan untuk mengoptimalkan alur Layanan Penagihan Google Play.

Saat membuat instance BillingFlowParams baru dalam klien penagihan via Google Play, sebaiknya kerjakan dengan objek JSON secara langsung menggunakan setSkuDetails(), seperti dalam cuplikan kode berikut:

Dalam class Builder BillingFlowParams, metode setSku() sudah tidak digunakan lagi. Sebaiknya gunakan metode setSkuDetails() seperti dalam cuplikan kode berikut ini. Objek yang diteruskan ke objek setSkuDetails() berasal dari metode querySkuDetailsAsync().

Kotlin

private lateinit var mBillingClient: BillingClient
private val mSkuDetailsMap = HashMap<String, SkuDetails>()

private fun querySkuDetails() {
    val skuDetailsParamsBuilder = SkuDetailsParams.newBuilder()
    mBillingClient.querySkuDetailsAsync(skuDetailsParamsBuilder.build()
    ) { responseCode, skuDetailsList ->
        if (responseCode == 0) {
            for (skuDetails in skuDetailsList) {
                mSkuDetailsMap[skuDetails.sku] = skuDetails
            }
        }
    }
}

private fun startPurchase(skuId: String) {
    val billingFlowParams = BillingFlowParams.newBuilder()
    .setSkuDetails(mSkuDetailsMap[skuId])
    .build()
}

Java

private BillingClient mBillingClient;
private Map<String, SkuDetails> mSkuDetailsMap = new HashMap<>();

private void querySkuDetails() {
    SkuDetailsParams.Builder skuDetailsParamsBuilder
            = SkuDetailsParams.newBuilder();
    mBillingClient.querySkuDetailsAsync(skuDetailsParamsBuilder.build(),
            new SkuDetailsResponseListener() {
                @Override
                public void onSkuDetailsResponse(int responseCode,
                        List<SkuDetails> skuDetailsList) {
                    if (responseCode == 0) {
                        for (SkuDetails skuDetails : skuDetailsList) {
                            mSkuDetailsMap.put(skuDetails.getSku(), skuDetails);
                        }
                    }
                }
            });
}

private void startPurchase(String skuId) {
    BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder()
            .setSkuDetails(mSkuDetailsMap.get(skuId))
            .build();
}

Rilis Library Layanan Penagihan Play 1.1 (07-05-2018)

Library Layanan Penagihan Google Play versi 1.1 sekarang tersedia. Versi ini berisi perubahan berikut.

Ringkasan perubahan

  • Menambahkan dukungan untuk menentukan mode penghitungan prorata dalam BillingFlowParams saat mengupgrade/mendowngrade langganan yang sudah ada.
  • Tanda boolean replaceSkusProration dalam BillingFlowParams kini sudah tidak didukung lagi. Sebagai gantinya, gunakan replaceSkusProrationMode.
  • launchBillingFlow() kini akan memicu callback untuk respons yang gagal.

Perubahan perilaku

Library Layanan Penagihan Google Play versi 1.1 memuat perubahan perilaku berikut ini.

Developer dapat menetapkan replaceSkusProrationMode dalam class BillingFlowParams

ProrationMode memberikan detail lebih lanjut tentang jenis penghitungan prorata saat mengupgrade atau mendowngrade langganan pengguna.

Kotlin

BillingFlowParams.newBuilder()
    .setSku(skuId)
    .setType(billingType)
    .setOldSku(oldSku)
    .setReplaceSkusProrationMode(replaceSkusProrationMode)
    .build()

Java

BillingFlowParams.newBuilder()
    .setSku(skuId)
    .setType(billingType)
    .setOldSku(oldSku)
    .setReplaceSkusProrationMode(replaceSkusProrationMode)
    .build();

Saat ini, Google Play mendukung mode penghitungan prorata berikut:

IMMEDIATE_WITH_TIME_PRORATION Penggantian akan langsung diterapkan, dan waktu habis masa berlaku yang baru akan dihitung secara prorata dan dikreditkan atau ditagihkan kepada pengguna. Ini merupakan perilaku default saat ini.
IMMEDIATE_AND_CHARGE_PRORATED_PRICE Penggantian akan langsung diterapkan, dan siklus penagihan tetap sama. Harga untuk periode yang tersisa akan ditagih.

Catatan: Opsi ini hanya tersedia untuk upgrade langganan.

IMMEDIATE_WITHOUT_PRORATION Penggantian akan langsung diterapkan, dan harga baru akan ditagih pada waktu pengulangan berikutnya. Siklus penagihan tetap sama.

replaceSkusProration sudah tidak didukung lagi dalam class BillingFlowParams

Dulu, developer dapat menetapkan flag boolean untuk menagih jumlah prorata untuk permintaan upgrade langganan. Mengingat kami mendukung ProrationMode, yang berisi petunjuk penghitungan prorata yang lebih mendetail, flag boolean ini tidak lagi didukung.

launchBillingFlow() sekarang akan memicu callback untuk respons yang gagal

Library Penagihan akan selalu memicu callback PurhcasesUpdatedListener dan menampilkan BillingResponse secara asinkron. Nilai tersinkron BillingResponse yang ditampilkan juga akan dipertahankan.

Perbaikan bug

  • Keluar lebih awal dengan benar dalam metode asinkron saat koneksi layanan terputus.
  • Objek parameter Builder tidak lagi mengubah objek yang telah dibuat.
  • Masalah 68087141: launchBillingFlow() kini akan memicu callback untuk respons yang gagal.

Rilis Library Layanan Penagihan Google Play 1.0 (19-09-2017, Pengumuman)

Library Layanan Penagihan Google Play versi 1.0 sekarang tersedia. Versi ini berisi perubahan berikut.

Perubahan penting

  • Menyematkan izin penagihan dalam manifes library. Anda tidak perlu lagi menambahkan izin com.android.vending.BILLING dalam manifes Android.
  • Builder baru ditambahkan ke class BillingClient.Builder.
  • Memperkenalkan pola builder untuk class SkuDetailsParams yang akan digunakan pada metode untuk mengkueri SKU.
  • Beberapa metode API telah diperbarui agar konsisten (urutan dan nama argumen yang ditampilkan tetap sama).

Perubahan perilaku

Google Play Billing Library versi 1.0 berisi perubahan perilaku berikut ini.

Class BillingClient.Builder

BillingClient.Builder kini diinisialisasi melalui pola newBuilder:

Kotlin

billingClient = BillingClient.newBuilder(context).setListener(this).build()

Java

billingClient = BillingClient.newBuilder(context).setListener(this).build();

Metode launchBillingFlow sekarang dipanggil menggunakan class BillingFlowParams

Untuk menginisialisasi alur penagihan bagi pembelian atau langganan, metode launchBillingFlow() akan menerima instance BillingFlowParams yang diinisialisasi dengan parameter khusus permintaan:

Kotlin

BillingFlowParams.newBuilder().setSku(skuId)
        .setType(billingType)
        .setOldSku(oldSku)
        .build()

// Then, use the BillingFlowParams to start the purchase flow
val responseCode = billingClient.launchBillingFlow(builder.build())

Java

BillingFlowParams.newBuilder().setSku(skuId)
                              .setType(billingType)
                              .setOldSku(oldSku)
                              .build();

// Then, use the BillingFlowParams to start the purchase flow
int responseCode = billingClient.launchBillingFlow(builder.build());

Cara baru untuk mengkueri produk yang tersedia

Argumen untuk metode queryPurchaseHistoryAsync() dan querySkuDetailsAsync() telah digabungkan ke pola Builder:

Kotlin

val params = SkuDetailsParams.newBuilder()
params.setSkusList(skuList)
        .setType(itemType)
billingClient.querySkuDetailsAsync(params.build(), object : SkuDetailsResponseListener() {
    ...
})

Java

SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder();
params.setSkusList(skuList)
        .setType(itemType);
billingClient.querySkuDetailsAsync(params.build(), new SkuDetailsResponseListener() {...})

Hasilnya kini ditampilkan melalui kode hasil dan sejumlah objek SkuDetails, bukan class wrapper sebelumnya, agar lebih memudahkan Anda dan agar konsisten dalam semua API kami:

Kotlin

fun onSkuDetailsResponse(@BillingResponse responseCode: Int, skuDetailsList: List<SkuDetails>)

Java

public void onSkuDetailsResponse(@BillingResponse int responseCode, List<SkuDetails> skuDetailsList)

Urutan parameter diubah pada metode onConsumeResponse()

Urutan argumen untuk onConsumeResponse dari antarmuka ConsumeResponseListener telah diubah agar konsisten dalam semua API kami:

Kotlin

fun onConsumeResponse(@BillingResponse responseCode: Int, outToken: String)

Java

public void onConsumeResponse(@BillingResponse int responseCode, String outToken)

Objek PurchaseResult kini tidak digabungkan lagi

PurchaseResult kini tidak digabungkan lagi agar konsisten dalam semua API kami:

Kotlin

fun onPurchaseHistoryResponse(@BillingResponse responseCode: Int, purchasesList: List<Purchase>)

Java

void onPurchaseHistoryResponse(@BillingResponse int responseCode, List<Purchase> purchasesList)

Perbaikan bug

Rilis Pratinjau Developer 1 (12-06-2017, Pengumuman)

Pratinjau developer diluncurkan untuk menyederhanakan proses pengembangan yang berhubungan dengan penagihan, agar developer dapat memfokuskan upaya mereka dalam mengimplementasikan logika khusus aplikasi Android, seperti arsitektur aplikasi dan struktur navigasi.

Library ini menyertakan beberapa class dan fitur praktis yang dapat Anda gunakan saat mengintegrasikan aplikasi Android dengan Google Play Billing API. Library ini juga menyediakan lapisan abstraksi selain layanan Android Interface Definition Language (AIDL), yang memudahkan developer untuk menentukan antarmuka antara aplikasi dan Google Play Billing API.