Dokumen ini menjelaskan cara bermigrasi dari Google Play Billing Library (PBL) 7 atau 8 ke PBL 9 dan cara berintegrasi dengan fitur baru.
Untuk daftar lengkap perubahan pada versi 9.0.0, lihat catatan rilis.
Keterampilan Android
Lihat di GitHubMengupgrade Play Billing Library
android skills add play-billing-library-version-upgradeHelp me upgrade my Play Billing Library implementation.Ringkasan
PBL 9 berisi peningkatan pada API yang ada serta penghapusan API yang sebelumnya tidak digunakan lagi. Versi library ini juga memperkenalkan konteks error yang lebih lengkap melalui kode sub-respons baru.
Kompatibilitas mundur untuk upgrade PBL
Untuk bermigrasi ke PBL 9, Anda perlu mengupdate atau menghapus beberapa referensi API yang ada dari aplikasi, seperti yang dijelaskan dalam catatan rilis dan nanti dalam panduan migrasi ini.
Mengupgrade dari PBL 7 atau 8 ke PBL 9
Untuk mengupgrade dari PBL 7 atau 8 ke PBL 9, lakukan langkah-langkah berikut:
Update versi dependensi Play Billing Library di file
build.gradleaplikasi Anda.dependencies { def billing_version = "9.1.0" implementation "com.android.billingclient:billing:$billing_version" }Jika Anda menggunakan Kotlin, modul KTX Library Layanan Penagihan Google Play berisi ekstensi Kotlin dan dukungan coroutine yang memungkinkan Anda menulis Kotlin idiomatis saat menggunakan Library Layanan Penagihan Google Play. Untuk menyertakan ekstensi ini dalam project Anda, tambahkan dependensi berikut ke file
build.gradleaplikasi Anda seperti yang ditunjukkan:dependencies { val billing_version = "9.1.0" implementation("com.android.billingclient:billing-ktx:$billing_version") }(Hanya berlaku untuk upgrade dari PBL 7 ke PBL 9). Perbarui implementasi metode
queryProductDetailsAsync.Ada perubahan pada tanda tangan metode
ProductDetailsResponseListener.onProductDetailsResponse, yang memerlukan perubahan pada aplikasi Anda untuk penerapanqueryProductDetailsAsync. Untuk mengetahui informasi selengkapnya, lihat Menampilkan ketersediaan produk untuk dibeli.Menangani API yang dihapus.
Tabel berikut mencantumkan API yang dihapus dan API alternatif terkait yang harus Anda gunakan di aplikasi.
Upgrade dari
PBL 9 tidak lagi mendukung API yang tercantum dalam tabel berikut. Jika implementasi Anda menggunakan salah satu API yang dihapus ini, lihat tabel untuk API alternatif yang sesuai.
API yang sebelumnya tidak digunakan lagi telah dihapus API alternatif yang akan digunakan API queryPurchaseHistoryAsync Lihat Membuat Kueri Histori Pembelian. Jika Anda menggunakan queryPurchaseHistoryAsync untuk menentukan kelayakan uji coba gratis, sekarang Anda harus menggunakan ProductDetails.getSubscriptionOfferDetails() untuk menentukan penawaran yang memenuhi syarat bagi pengguna. BillingClient.SkuType BillingClient.ProductType. Konstanta jenis produk INAPP dan SUBS tetap berfungsi serupa dengan konstanta jenis SKU yang tidak digunakan lagi. SkuDetails ProductDetails. Ini adalah model data baru yang mendukung produk sekali beli. SkuDetailsParams Gunakan QueryProductDetailsParams dengan queryProductDetailsAsync. SkuDetailsResponseListener Gunakan ProductDetailsResponseListener dengan queryProductDetailsAsync. QueryPurchaseHistoryParams - Gunakan queryPurchasesAsync untuk pembelian aktif atau tertunda.
- Lacak pembelian yang digunakan di server backend Anda.
- Gunakan Voided Purchases API sisi server untuk pembelian yang dibatalkan atau ditiadakan.
getSkuDetailsList dan setSkuDetailsList Gunakan BillingFlowParams.Builder.setProductDetailsParamsList querySkuDetailsAsync queryProductDetailsAsync enablePendingPurchases() (API tanpa parameter) enablePendingPurchases(PendingPurchasesParams params)
Perhatikan bahwa enablePendingPurchases() yang tidak digunakan lagi secara fungsional setara denganenablePendingPurchases(PendingPurchasesParams.newBuilder().enableOneTimeProducts().build()).queryPurchasesAsync(String skuType, PurchasesResponseListener listener) queryPurchasesAsync Upgrade dari
Tabel berikut mencantumkan API yang dihapus di PBL 9, dan API alternatif terkait yang harus Anda gunakan di aplikasi.
API yang sebelumnya tidak digunakan lagi telah dihapus API alternatif yang akan digunakan BillingClient.SkuType BillingClient.ProductType. Konstanta jenis produk INAPP dan SUBS tetap berfungsi mirip dengan konstanta jenis SKU yang tidak digunakan lagi. SkuDetails ProductDetails. Ini adalah model data baru yang mendukung produk sekali beli. SkuDetailsParams Gunakan QueryProductDetailsParams dengan queryProductDetailsAsync. SkuDetailsResponseListener Gunakan ProductDetailsResponseListener dengan queryProductDetailsAsync. QueryPurchaseHistoryParams - Gunakan queryProductDetailsAsync untuk pembelian aktif atau tertunda.
- Lacak pembelian yang digunakan di server backend Anda.
- Gunakan Voided Purchases API sisi server untuk pembelian yang dibatalkan atau ditiadakan.
getSkuDetailsList dan setSkuDetailsList Gunakan BillingFlowParams.Builder.setProductDetailsParamsList (Direkomendasikan) Aktifkan koneksi ulang layanan otomatis.
Play Billing Library dapat mencoba membuat ulang koneksi layanan secara otomatis jika panggilan API dilakukan saat layanan terputus. Untuk mengetahui informasi selengkapnya, lihat Mengaktifkan koneksi ulang layanan otomatis.
Menangani kode sub-respons baru.
BillingResult yang ditampilkan dari
launchBillingFlow()kini akan menyertakan kolom kode sub-respons. Kolom ini hanya akan diisi dalam beberapa kasus untuk memberikan alasan yang lebih spesifik atas kegagalan tersebut. Kolom sub-respons dapat memiliki nilai berikut:PAYMENT_DECLINED_DUE_TO_INSUFFICIENT_FUNDS- Ditampilkan saat dana pengguna kurang dari harga item yang ingin mereka beli.USER_INELIGIBLE- Ditampilkan saat pengguna tidak memenuhi persyaratan kelayakan yang dikonfigurasi untuk penawaran langganan.NO_APPLICABLE_SUB_RESPONSE_CODE- Nilai default, ditampilkan jika tidak ada kode sub-respons lain yang berlaku.
Langkah migrasi: Update
PurchasesUpdatedListeneratau penanganan hasil yang setara untuk mengenali dan merespons kode sub-respons tertentu ini guna memberikan pengalaman pengguna yang lebih baik. Misalnya, meminta untuk memperbaiki metode pembayaran atau menampilkan pesan error tertentu.Pemahaman tentang reklasifikasi kode error.
Untuk instance tempat aplikasi Google Play Store diblokir oleh sistem (misalnya, dalam mode anak yang disesuaikan OEM), kode respons dari PBL telah berubah dari
ERRORmenjadiBILLING_UNAVAILABLE.Langkah migrasi: Pastikan logika penanganan error Anda mengakomodasi perubahan ini dan tidak mengandalkan penerimaan error umum dalam skenario spesifik ini.
Menangani nullability
DeveloperProvidedBillingDetails.getLinkUri().Jika Anda menggunakan
DeveloperProvidedBillingDetailssebagai bagian dari integrasi pembayaran eksternal,getLinkUri()kini menjadi@Nullable.Langkah migrasi: Untuk menangani perubahan ini dengan aman, pastikan kode integrasi Anda menangani nilai
nulldan string kosong ("") dari metodeDeveloperProvidedBillingDetails.getLinkUri()sebelum mengurai atau meluncurkan intent browser. Contoh:Kotlin
val linkUri = details.linkUri if (!linkUri.isNullOrEmpty()) { val intent = Intent(Intent.ACTION_VIEW, linkUri.toUri()) context.startActivity(intent) }
Java
String linkUri = details.getLinkUri(); if (!android.text.TextUtils.isEmpty(linkUri)) { Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(linkUri)); context.startActivity(intent); }Perubahan opsional.
Mendukung pembelian tertunda untuk paket prabayar. Untuk mengetahui informasi selengkapnya, lihat Menangani Langganan dan Transaksi Tertunda.
Langganan cicilan virtual. Untuk mengetahui informasi selengkapnya, lihat Integrasi Langganan Cicilan.