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

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:

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

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

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

  6. 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 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. Tangani 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

    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);
    }
    
  8. Perubahan opsional.