Catatan rilis Google Play Billing Library

Dokumen ini berisi catatan rilis untuk Google Play Billing Library.

Rilis Google Play Billing Library 9.1.0 (18-06-2026)

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

Ringkasan perubahan

Rilis Google Play Billing Library 9.0.0 (19-05-2026)

Google Play Billing Library versi 9.0.0 dan ekstensi Kotlin kini tersedia. Lihat panduan migrasi PBL 9 jika Anda ingin bermigrasi dari PBL versi sebelumnya.

Ringkasan perubahan

  • Kode error yang diperbarui untuk aktivitas Play Store yang diblokir: Kode error untuk aplikasi Play Store yang diblokir telah diperbarui. Untuk kasus saat aplikasi Google Play Store diblokir oleh sistem (misalnya, dalam mode anak yang disesuaikan OEM), kode respons telah berubah dari ERROR menjadi BILLING_UNAVAILABLE. Selain itu, BillingResult untuk kasus tersebut kini memberikan pesan debug Google Play Store diblokir.

  • Pembaruan nullabilitas untuk penagihan yang disediakan developer: Metode DeveloperProvidedBillingDetails.getLinkUri() telah diperbarui menjadi @Nullable. Perubahan ini mendukung skenario saat URI link langsung untuk pembayaran eksternal tidak tersedia selama tahap pemilihan pembayaran.

    Untuk menangani perubahan ini dengan aman, pastikan kode integrasi Anda menangani nilai null dan string kosong ("") dari metode DeveloperProvidedBillingDetails.getLinkUri() sebelum mengurai atau meluncurkan intent browser.

  • Memperbarui targetSdkVersion ke versi 35.

  • Sekarang Anda dapat menggunakan pesan dalam aplikasi untuk memberi tahu pengguna tentang kenaikan harga yang akan datang dan memerlukan persetujuan pengguna. Hal ini memungkinkan pengguna mengonfirmasi kenaikan harga tanpa keluar dari aplikasi. Pesan untuk kenaikan harga dengan persetujuan pengguna yang belum disetujui ditampilkan mulai pada hari pertama pengguna dapat menyetujui kenaikan harga, dan pesan ditampilkan maksimal sekali setiap 7 hari.

Rilis Google Play Billing Library 8.3.0 (23-12-2025)

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

Ringkasan perubahan

Rilis Google Play Billing Library 8.2.1 (15-12-2025)

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

Perbaikan bug

Rilis Google Play Billing Library 8.2.0 (09-12-2025)

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

Ringkasan perubahan

Rilis Google Play Billing Library 8.1.0 (06-11-2025)

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

Ringkasan perubahan

  • Langganan yang ditangguhkan

    Parameter baru telah ditambahkan ke metode BillingClient.queryPurchasesAsync() untuk menyertakan langganan yang ditangguhkan saat membuat kueri langganan. Langganan yang ditangguhkan masih diatribusikan kepada pengguna, tetapi tidak aktif, baik karena pengguna menjeda langganan atau metode pembayaran perpanjangannya ditolak.

    Objek Purchase yang ditampilkan di pemroses akan menampilkan isSuspended() = true untuk langganan yang ditangguhkan. Dalam hal ini, Anda tidak boleh memberikan akses ke langganan yang dibeli, dan sebagai gantinya, arahkan pengguna ke pusat langganan tempat pengguna dapat mengelola metode pembayaran atau status jeda untuk mengaktifkan kembali langganan.

  • Pembaruan pada langganan:

    • Objek BillingFlowParams.ProductDetailsParams kini memiliki metode setSubscriptionProductReplacementParams() yang dapat Anda gunakan untuk menentukan informasi penggantian tingkat produk.

    • Objek SubscriptionProductReplacementParams memiliki dua metode setter:

      • setOldProductId: Produk lama yang perlu diganti dengan produk dalam ProductDetails saat ini.
      • setReplacementMode: Ini adalah mode penggantian tingkat item. Pada dasarnya, mode ini sama dengan SubscriptionUpdateParams, tetapi pemetaan nilai telah diperbarui. Mode penggantian baru KEEP_EXISTING diperkenalkan yang memungkinkan Anda mempertahankan jadwal pembayaran yang ada tanpa perubahan untuk suatu item.
    • SubscriptionUpdateParams setSubscriptionReplacementMode akan dihentikan penggunaannya. Anda harus menggunakan SubscriptionProductReplacementParams.setReplacementMode sebagai gantinya.

  • Memperbarui minSdkVersion ke versi 23.

  • Mengaktifkan API praorder untuk produk sekali beli

    API ProductDetails.oneTimePurchaseOfferDetails.getPreorderDetails() yang mendapatkan detail praorder kini tersedia untuk digunakan.

  • Google Play Billing Library kini mendukung Kotlin versi 2.2.0.

Rilis Google Play Billing Library 8.0.0 (30-06-2025)

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

Ringkasan perubahan

  • Item dalam aplikasi kini akan disebut sebagai produk sekali beli.

  • Beberapa opsi pembelian dan penawaran untuk produk sekali beli.

    Anda kini dapat memiliki beberapa opsi pembelian dan penawaran untuk produk sekali beli. Hal ini memberi Anda fleksibilitas dalam cara menjual produk dan mengurangi kompleksitas pengelolaannya.

  • Meningkatkan kualitas metode queryProductDetailsAsync().

    Sebelum PBL 8.0.0, metode queryProductDetailsAsync() tidak menampilkan produk yang tidak dapat diambil. Hal ini dapat terjadi karena beberapa alasan, seperti produk tidak ditemukan atau tidak ada penawaran yang tersedia untuk pengguna. Dengan PBL 8.0.0, produk yang belum diambil akan ditampilkan dengan kode status tingkat produk baru yang memberikan informasi tentang produk yang belum diambil. Perhatikan bahwa ada perubahan pada tanda tangan ProductDetailsResponseListener.onProductDetailsResponse() yang memerlukan perubahan pada aplikasi Anda. Untuk mengetahui informasi selengkapnya, lihat memproses hasil.

  • Koneksi ulang layanan otomatis.

    Parameter builder BillingClient.Builder.enableAutoServiceReconnection() baru memungkinkan developer memilih untuk mengaktifkan koneksi ulang layanan otomatis, yang menyederhanakan pengelolaan koneksi dengan menangani koneksi ulang ke Layanan Penagihan Play secara otomatis dan menghilangkan kebutuhan untuk memanggil startConnection() secara manual jika terjadi pemutusan koneksi layanan. Untuk mengetahui informasi selengkapnya, lihat Menyambungkan Kembali Koneksi Secara Otomatis.

  • Kode sub-respons untuk metode launchBillingFlow().

    BillingResult yang ditampilkan dari launchBillingFlow() kini akan mencakup kolom kode sub-respons. Kolom ini hanya akan diisi dalam beberapa kasus untuk memberikan alasan kegagalan yang lebih spesifik. Kolom sub-respons dapat memiliki nilai berikut:

    • PAYMENT_DECLINED_DUE_TO_INSUFFICIENT_FUNDS - Ditampilkan saat dana pengguna kurang dari harga item yang ingin dibeli.
    • USER_INELIGIBLE - Ditampilkan saat pengguna tidak memenuhi persyaratan kelayakan yang dikonfigurasi untuk penawaran langganan.
    • NO_APPLICABLE_SUB_RESPONSE_CODE - Nilai default, ditampilkan saat tidak ada kode sub-respons lain yang berlaku.
  • Menghapus metode queryPurchaseHistory().

    Metode queryPurchaseHistory() yang sebelumnya ditandai sebagai tidak digunakan lagi kini telah dihapus. Lihat Membuat Kueri Histori Pembelian untuk mengetahui detail tentang API alternatif yang dapat digunakan.

  • Menghapus metode querySkuDetailsAsync().

    Metode querySkuDetailsAsync() yang sebelumnya ditandai sebagai tidak digunakan lagi kini telah dihapus. Sebagai gantinya, Anda harus menggunakan queryProductDetailsAsync.

  • Menghapus metode BillingClient.Builder.enablePendingPurchases().

    Metode enablePendingPurchases() tanpa parameter yang sebelumnya ditandai sebagai tidak digunakan lagi kini telah dihapus. Anda harus menggunakan enablePendingPurchases(PendingPurchaseParams params) sebagai gantinya. Perhatikan bahwa enablePendingPurchases() yang tidak digunakan lagi secara fungsional setara dengan enablePendingPurchases(PendingPurchasesParams.newBuilder().enableOneTimeProducts().build()).

  • Menghapus metode queryPurchasesAsync() yang kelebihan beban yang menggunakan skuType.

    Metode queryPurchasesAsync(String skuType, PurchasesResponseListener listener) yang sebelumnya ditandai sebagai tidak digunakan lagi kini telah dihapus. Atau, gunakan queryPurchasesAsync(QueryPurchasesParams queryPurchasesParams, PurchasesResponseListener listener).

Rilis Google Play Billing Library 7.1.1 (03-10-2024)

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

Perbaikan bug

Rilis Google Play Billing Library 7.1.0 (19-09-2024)

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

Ringkasan perubahan

  • Peningkatan keamanan thread terkait status dan pengelolaan koneksi.
  • Memperkenalkan perubahan parsial untuk menguji kode respons BillingResult yang dirilis sepenuhnya di Play Billing Library 7.1.1. Untuk menguji integrasi menggunakan fitur ini, Anda harus mengupgrade ke Play Billing Library 7.1.1. Ada bug yang hanya akan memengaruhi aplikasi dengan pengujian penggantian penagihan diaktifkan dan tidak memengaruhi penggunaan reguler. Untuk mengetahui informasi selengkapnya, lihat Kode respons pengujian BillingResult.

Rilis Google Play Billing Library 7.0.0 (14-05-2024)

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

Ringkasan perubahan

Rilis Google Play Billing Library 6.2.1 (16-04-2024)

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

Ringkasan perubahan

Rilis Google Play Billing Library 6.2.0 (06-03-2024)

Google Play Billing Library 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 Library Layanan Penagihan Google Play 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 Play Billing Library 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 Play Billing Library dan memberikan dukungan yang lebih baik untuk error.

Rilis Library Layanan Penagihan Google Play 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 lebih lanjut cara menggunakan metode ini, 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 berbasis 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 Google Play Billing Library 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)

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

Perbaikan bug

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

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

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

Perbaikan bug

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

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

Google Play Billing Library, ekstensi Kotlin, dan plugin Unity versi 3.0.0 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

  • Memperbarui versi default library Java Play Billing 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, fungsi payload developer tidak digunakan lagi dan akan dihapus dalam rilis mendatang. Untuk mengetahui 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. Developer game yang menggunakan API pembelian dalam aplikasi Unity dapat mengupgrade sekarang untuk memanfaatkan semua fitur Google Play Billing Library 2 dan untuk mempermudah upgrade berikutnya ke versi mendatang Google Play Billing Library.

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 Google Play Billing Library.

Versi ini berisi perubahan berikut.

Ringkasan perubahan

  • Di BillingFlowParams, setOldSku(String oldSku) yang tidak digunakan lagi dan diganti dengan setOldSku(String oldSku, String purchaseToken), untuk membedakan saat beberapa akun di perangkat 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 saat 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 (in-app) atau di luar aplikasi Anda (out-of-app). 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 tertunda (baru di versi 2.0), periode tiga hari dimulai saat pembelian telah berpindah ke status PURCHASED dan tidak berlaku saat pembelian berada dalam status PENDING.

Untuk langganan, Anda harus mengonfirmasi setiap pembelian yang memiliki token pembelian baru. Artinya, semua pembelian awal, perubahan paket, dan pendaftaran ulang harus dikonfirmasi, tetapi Anda tidak perlu mengonfirmasi perpanjangan berikutnya. 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 menyertakan nilai boolean konfirmasi untuk Purchases.products dan Purchases.subscriptions. Sebelum mengonfirmasi pembelian, pastikan 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 Google Play Billing Library.

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 melampirkan parameter payload developer ke pembelian, tetapi hanya saat pembelian diakui atau digunakan. 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 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 yang belum digunakan 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 agar pengujian lebih mudah.
  • 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

  • Google Play Billing Library kini 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.
  • Di class BillingFlowParams, ganti 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 berjenis 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 saat diperpanjang 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 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();

Google Play mendukung mode 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

Sebelumnya, developer dapat menyetel tanda boolean untuk menagih jumlah prorata untuk permintaan upgrade langganan. Mengingat kami mendukung ProrationMode, yang berisi petunjuk prorata yang lebih mendetail, tanda boolean ini tidak lagi didukung.

launchBillingFlow() sekarang akan memicu callback untuk respons yang gagal

Billing Library akan selalu memicu callback PurhcasesUpdatedListener dan menampilkan BillingResponse secara asinkron. Nilai yang ditampilkan secara sinkron dari BillingResponse juga 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 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

  • Izin penagihan tersemat di dalam manifes library. Anda tidak perlu lagi menambahkan izin com.android.vending.BILLING di 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 diupdate agar konsisten (nama dan urutan argumen yang 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 memulai alur penagihan untuk pembelian atau langganan, metode launchBillingFlow() menerima instance BillingFlowParams yang diinisialisasi dengan parameter khusus untuk 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() di-wrap ke dalam 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 daftar objek SkuDetails alih-alih class wrapper sebelumnya untuk memudahkan Anda dan agar konsisten di seluruh 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 di seluruh 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 mencakup beberapa class dan fitur praktis yang dapat Anda gunakan saat mengintegrasikan aplikasi Android dengan Layanan Penagihan Google Play. Library ini juga menyediakan lapisan abstraksi di atas layanan Android Interface Definition Language (AIDL), sehingga memudahkan developer menentukan antarmuka antara aplikasi dan Layanan Penagihan Google Play API.