Dokumen ini menjelaskan cara melakukan migrasi dari Library Layanan Penagihan Google Play (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.
Ringkasan
PBL 9 berisi peningkatan pada API yang ada beserta penghapusan API yang sebelumnya tidak digunakan lagi. Versi pustaka ini juga memperkenalkan konteks error yang lebih kaya melalui kode sub-respons baru.
Kompatibilitas mundur untuk upgrade PBL
Untuk bermigrasi ke PBL 9, Anda harus memperbarui atau menghapus beberapa referensi API yang ada dari aplikasi Anda, seperti yang dijelaskan dalam catatan rilis dan selanjutnya 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:
Perbarui versi dependensi Play Billing Library di file
build.gradleaplikasi Anda.dependencies { def billing_version = "9.0.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.0.0" implementation("com.android.billingclient:billing-ktx:$billing_version") }(Hanya berlaku untuk upgrade dari PBL 7 ke PBL 9). Perbarui penerapan metode
queryProductDetailsAsync.Ada perubahan pada tanda tangan metode
ProductDetailsResponseListener.onProductDetailsResponse, yang memerlukan perubahan pada aplikasi Anda untuk penerapanqueryProductDetailsAsync. Untuk mengetahui informasi selengkapnya, lihat Menampilkan produk yang tersedia untuk dibeli.Menangani API yang dihapus.
Tabel berikut mencantumkan API yang dihapus dan API alternatif yang sesuai yang harus Anda gunakan di aplikasi Anda.
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 dapat digunakan API queryPurchaseHistoryAsync Lihat Mengueri Histori Pembelian. Jika Anda menggunakan queryPurchaseHistoryAsync untuk menentukan kelayakan uji coba gratis, Anda kini 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 dibatalkan.
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 yang sesuai yang harus Anda gunakan di aplikasi Anda.
API yang sebelumnya tidak digunakan lagi telah dihapus API alternatif yang dapat digunakan 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 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 dibatalkan.
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 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 dibelinya.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: Perbarui penanganan hasil
PurchasesUpdatedListeneratau yang setara untuk mengenali dan merespons kode sub-respons spesifik 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 kasus saat aplikasi 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.
Tangani 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.getLinkUri() if (!linkUri.isNullOrEmpty()) { val intent = Intent(Intent.ACTION_VIEW, Uri.parse(linkUri)) 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.