Bermigrasi ke Google Play Billing Library 9 dari versi 7 atau 8

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.

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:

  1. Update versi dependensi Play Billing Library di file build.gradle aplikasi 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.gradle aplikasi Anda seperti yang ditunjukkan:

    dependencies {
      val billing_version = "9.1.0"
      implementation("com.android.billingclient:billing-ktx:$billing_version")
    }
    
  2. (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 penerapan queryProductDetailsAsync. Untuk mengetahui informasi selengkapnya, lihat Menampilkan ketersediaan produk untuk dibeli.

  3. 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 dengan enablePendingPurchases(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
    getSkuDetailsList dan setSkuDetailsList Gunakan BillingFlowParams.Builder.setProductDetailsParamsList

  4. (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.

  5. 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 PurchasesUpdatedListener atau 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.

  6. 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 ERROR menjadi BILLING_UNAVAILABLE.

    Langkah migrasi: Pastikan logika penanganan error Anda mengakomodasi perubahan ini dan tidak mengandalkan penerimaan error umum dalam skenario spesifik ini.

  7. Menangani nullability DeveloperProvidedBillingDetails.getLinkUri().

    Jika Anda menggunakan DeveloperProvidedBillingDetails sebagai bagian dari integrasi pembayaran eksternal, getLinkUri() kini menjadi @Nullable.

    Langkah migrasi: 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. Contoh:

    Kotlin

    Java

    String linkUri = details.getLinkUri();
    if (!android.text.TextUtils.isEmpty(linkUri)) {
      Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(linkUri));
      context.startActivity(intent);
    }
    
  8. Perubahan opsional.