Langganan dengan add-on memungkinkan Anda memaketkan beberapa produk langganan secara bersamaan yang dapat dibeli, ditagih, dan dikelola secara bersamaan. Langganan katalog produk yang ada dapat ditawarkan dengan lancar sebagai add-on tanpa spesifikasi awal atau konfigurasi tambahan. Anda dapat meluncurkan alur pembelian dengan beberapa produk langganan yang ada, dan menjualnya sebagai add-on.
Pertimbangan
Pertimbangkan poin-poin berikut saat menggunakan fitur langganan dengan add-on:
Langganan dengan add-on hanya didukung untuk paket dasar dengan perpanjangan otomatis.
Semua item dalam pembelian harus memiliki periode penagihan berulang yang sama. Misalnya, Anda tidak dapat memiliki langganan yang ditagih tahunan dengan add-on yang ditagih bulanan.
Anda dapat memiliki maksimum 50 item dalam langganan dengan pembelian add-on.
Fitur ini tidak tersedia di wilayah India (IN) dan Korea Selatan (KR).
Mengintegrasikan dengan Library Layanan Penagihan Play
Bagian ini menjelaskan cara mengintegrasikan langganan dengan fitur add-on dengan Library Layanan Penagihan Play (PBL). Ini mengasumsikan bahwa Anda sudah memahami langkah-langkah integrasi PBL awal seperti, menambahkan dependensi PBL ke aplikasi Anda, melakukan inisialisasi BillingClient, dan terhubung ke Google Play. Bagian ini berfokus pada aspek integrasi PBL yang khusus untuk langganan dengan add-on.
Meluncurkan alur pembelian
Untuk meluncurkan alur pembelian langganan dengan add-on, lakukan langkah-langkah berikut:
Ambil semua item langganan Anda menggunakan metode
BillingClient.queryProductDetailsAsync
.Tetapkan objek
ProductDetailsParams
untuk setiap item.Item yang direpresentasikan oleh objek
ProductDetailsParams
, menentukanProductDetails
yang menunjukkan item langganan, danofferToken
yang memilih langganan tertentubase plan
atauoffer
.Tentukan detail item dalam metode
BillingFlowParams.Builder.setProductDetailsParamsList
. ClassBillingFlowParams
menentukan detail alur pembelian.Contoh berikut menunjukkan cara meluncurkan alur penagihan untuk pembelian langganan dengan beberapa item:
Java
BillingClient billingClient = …; // ProductDetails obtained from queryProductDetailsAsync(). ProductDetailsParams productDetails1 = ...; ProductDetailsParams productDetails2 = ...; ArrayList
productDetailsList = new ArrayList<>(); productDetailsList.add(productDetails1); productDetailsList.add(productDetails2); BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder() .setProductDetailsParamsList(productDetailsList) .build(); billingClient.launchBillingFlow(billingFlowParams);
Aturan yang berlaku untuk item dalam pembelian
- Untuk memastikan tanggal perpanjangan add-on pada akhirnya selaras dengan item dasar, Google Play dapat menyisipkan tagihan prorata setelah fase harga uji coba atau perkenalan.
- Kelayakan penawaran akan dievaluasi secara terpisah untuk setiap item.
Memproses pembelian
Memproses langganan dengan add-on sama dengan memproses
pembelian satu item seperti yang dijelaskan dalam
Mengintegrasikan Library Layanan Penagihan Google Play ke aplikasi Anda. Satu-satunya
perbedaan adalah pengguna dapat menerima beberapa
hak dengan satu pembelian. Pembelian langganan dengan add-on
menampilkan beberapa item yang dapat diambil menggunakan
Purchase.getProducts()
di Library Layanan
Penagihan Google Play, lalu daftar lineItems
di
purchases.subscriptionsv2.get
dari Google Play Developer API.
Mengubah langganan dengan add-on
Setiap perubahan pada langganan Anda dengan add-on akan menghasilkan upgrade atau downgrade. Untuk informasi selengkapnya, lihat mengupgrade atau mendowngrade langganan.
Untuk mengubah atau memulihkan pembelian langganan yang ada dengan add-on di
aplikasi, Anda harus memanggil launchBillingFlow
API dengan parameter
tambahan, dan memastikan hal berikut:
- Selalu panggil
setOldPurchaseToken
dengan token pembelian dari pembelian langganan saat ini. - Untuk mengupgrade, mendowngrade, atau melakukan crossgrade item dasar, panggil
setSubscriptionReplacementMode
untuk menentukan cara perubahan paket harus ditangani antara item dasar langganan lama, dan pembelian langganan baru dengan add-on. Jika tidak, tidak perlu menetapkan parameter ini. - Jika item dasar tidak diubah, Anda masih dapat memanggil
setSubscriptionReplacementMode
untuk menerapkan perilaku penghitungan prorata tertentu. Untuk aturan yang berlaku dalam hal ini, lihat Berlangganan lagi, atau beralih paket dalam langganan yang sama. - Add-on baru akan langsung diterapkan dengan tagihan prorata untuk menyelaraskan tanggal perpanjangan berikutnya dengan item dasar dalam langganan.
- Masa berlaku add-on yang dihapus akan berakhir pada akhir periode penagihan saat ini.
- Saat meluncurkan alur penagihan, Anda harus menentukan semua item aktif dalam langganan dengan add-on, kecuali yang akan dihapus, beserta add-on baru.
Contoh berikut menunjukkan cara memanggil API launchBillingFlow
saat
mengubah pembelian langganan yang ada dengan add-on:
Java
BillingClient billingClient = …; int replacementMode =…; // ProductDetails obtained from queryProductDetailsAsync(). ProductDetailsParams productDetails1 = ...; ProductDetailsParams productDetails2 = ...; ProductDetailsParams productDetails3 = ...; ArrayListnewProductDetailsList = new ArrayList<>(); newProductDetailsList.add(productDetails1); newProductDetailsList.add(productDetails1); newProductDetailsList.add(productDetails1); BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder() .setSubscriptionUpdateParams( SubscriptionUpdateParams.newBuilder() .setOldPurchaseToken(purchaseTokenOfExistingSubscription) // No need to set if change does not affect the base item. .setSubscriptionReplacementMode(replacementMode) .build()) .setProductDetailsParamsList(productDetailsList) .build(); billingClient.launchBillingFlow(billingFlowParams);
Skenario perubahan langganan
Tabel berikut mencantumkan berbagai skenario modifikasi untuk langganan dengan add-on, dan perilaku yang sesuai.
Item yang ada | Item yang diubah | Apakah Anda perlu menetapkan mode penggantian? | Perilaku |
---|---|---|---|
A (item dasar), B | A (item dasar) | Tidak | Item B dijadwalkan untuk penghapusan yang ditangguhkan. |
A | A (item dasar), B | Tidak | Item B langsung ditambahkan dengan tagihan prorata. |
A (item dasar), B | A (item dasar), C | Tidak |
|
A (item dasar), B | B (item dasar) | Tidak | A dijadwalkan untuk penghapusan yang ditangguhkan. |
A (item dasar), B | C (item dasar) | Ya |
|
A (item dasar), B | C (item dasar), B | Ya | Penggantian untuk A -> C bergantung pada
setSubscriptionReplacementMode . |
A (item dasar), B | C (item dasar), D | Ya |
|
Notifikasi developer real time
Kolom subscriptionId
tidak disediakan di RTDN untuk pembelian
langganan dengan add-on, yang berisi beberapa hak item.
Sebagai gantinya, Anda dapat menggunakan Play Developer API untuk mendapatkan pembelian dan
melihat hak item terkait.
Perubahan harga untuk pelanggan lama
Mengubah harga langganan untuk pelanggan lama langganan dengan pembelian add-on mirip dengan mengubah harga langganan langganan satu item seperti yang dijelaskan di Mengubah harga langganan. Namun, ada beberapa batasan dan perbedaan fungsional seperti yang dijelaskan di bagian ini.
Mengakhiri kohor harga lama
Mengakhiri kelompok lama juga memengaruhi langganan dengan pembelian add-on. Aturan berikut berlaku:
Semua kenaikan harga keikutsertaan yang belum dibayar harus memiliki waktu perpanjangan yang sama dengan harga baru. Jika item dalam langganan dengan pembelian add-on memiliki kenaikan harga dengan persetujuan pengguna yang belum dikonfirmasi oleh pengguna, kenaikan harga dengan persetujuan pengguna baru untuk item lain dalam pembelian akan diabaikan kecuali jika menghasilkan waktu perpanjangan yang sama dari penerapan harga baru dengan kenaikan harga yang ada dalam status TERTUNDA. Setelah pengguna mengonfirmasi kenaikan harga, perubahan harga yang lebih baru akan didaftarkan. Selain itu, pengguna hanya dapat menyetujui semua kenaikan harga keikutsertaan yang belum dikonfirmasi sekaligus.
Contoh:
- Pertimbangkan langganan dengan add-on (item A dan B), yang diperpanjang pada tanggal 7 setiap bulan.
- Item A memiliki migrasi harga yang sedang berlangsung dari $7 menjadi $10, dan kenaikan harga diperkirakan akan berlaku pada 7 Juli.
- Migrasi harga baru dari $5 menjadi $6, dimulai untuk item B pada 2 Juni. Karena kenaikan harga keikutsertaan dimulai 37 hari setelah migrasi, kenaikan harga paling awal untuk item B akan dilakukan pada 7 Agustus.
Dalam skenario ini, hingga pengguna menyetujui perubahan harga untuk item A (hingga dalam status CONFIRMED), perubahan harga untuk item B tidak terdaftar untuk pembelian langganan ini, dan SubscriptionPurchaseV2 tidak menampilkan detail perubahan harga untuk item B. Setelah pengguna mengonfirmasi perubahan harga untuk item A, perubahan harga item B akan dimulai. Pengguna hanya akan menerima kenaikan harga keikutsertaan item B setelah menyetujui kenaikan keikutsertaan untuk item A.
Email Google Play berisi daftar semua item dengan kenaikan atau penurunan harga yang berlaku pada hari yang sama.
Membatalkan langganan dengan add-on
Pengguna dapat membatalkan seluruh pembelian langganan dengan add-on di Pusat Langganan Play, dan Anda hanya dapat membatalkan seluruh pembelian langganan dengan add-on menggunakan Google Play Developer API.
Jika pembelian langganan dibatalkan tanpa dicabut, tidak ada item dalam pembelian yang akan diperpanjang secara otomatis, tetapi pengguna akan terus memiliki akses ke item yang berhak hingga periode penagihan terkait berakhir.
Mencabut dan mengembalikan dana langganan dengan add-on
Berikut adalah beberapa panduan untuk mencabut dan mengembalikan dana langganan:
Gunakan Konsol Play untuk melakukan pengembalian dana berdasarkan jumlah untuk Pesanan tertentu tanpa mencabut akses ke langganan.
Panggil
orders.refund
untuk mengembalikan dana pembayaran langganan tertentu yang telah dilakukan pengguna sepenuhnya tanpa mencabut akses ke langganan.Panggil
purchases.subscriptionsv2.revoke
untuk segera mencabut akses ke semua item langganan. Dengan API ini, Anda dapat:Cabut akses ke semua item dan berikan pengembalian dana secara prorata.
Saat mencabut langganan dengan add-on menggunakan pengembalian dana prorata, pengembalian dana akan diberikan untuk pesanan terbaru setiap item dengan jumlah prorata berdasarkan waktu yang tersisa hingga perpanjangan berikutnya.
Cabut akses untuk semua item dan berikan FullRefund.
Cabut akses setiap item dengan pengembalian dana penuh pada item tersebut.
Mencabut setiap item dalam langganan dengan add-on
Untuk mencabut setiap item langganan dalam langganan dengan
add-on tanpa mencabut seluruh pembelian, panggil
purchases.subscriptionsv2.revoke
dengan kolom ItemBasedRefund
ditetapkan di RevocationContext
. productId
item yang harus
dicabut dan dikembalikan dananya dapat ditetapkan di kolom ItemBasedRefund
.
Kolom ItemBasedRefund
dapat ditetapkan untuk pembelian dengan satu atau beberapa
item langganan yang diperpanjang otomatis.
- Jika masih ada item aktif yang tersisa dalam pembelian langganan
setelah mencabut item yang ditentukan dalam
ItemBasedRefund
, hanya item tersebut yang akan dicabut, dan dikembalikan dananya sepenuhnya tanpa mengganggu status langganan. - Jika tidak ada item aktif yang tersisa dalam pembelian langganan setelah
membatalkan item yang ditentukan dalam
ItemBasedRefund
, item tersebut akan dibatalkan, dikembalikan dananya sepenuhnya, dan langganan akan dibatalkan.
Pertimbangan
- Saat menggunakan
ItemBasedRefund
, hanya satu item yang dapat dicabut sekaligus. Permintaan dapat dipanggil beberapa kali jika item yang berbeda perlu dicabut. - Jika pembelian langganan berada dalam salah satu status pembayaran ditolak, atau
item yang ditentukan dalam
ItemBasedRefund
tidak dimiliki atau sudah tidak berlaku, penolakan item akan diblokir. - Penolakan item tidak didukung dalam langganan prabayar.
Masa berlaku item selama penolakan pembayaran
Untuk pembelian langganan dengan add-on, perpanjangan tertentu mungkin hanya perlu memperluas sebagian hak item, tanpa memengaruhi item dengan tanggal habis masa berlaku di masa mendatang.
Terlepas dari item yang terlibat dalam perpanjangan, jika pembayaran perpanjangan ditolak, pembelian langganan secara keseluruhan akan memasuki masa tenggang dan penangguhan akun seperti yang dijelaskan dalam dokumentasi berikut.
Pilihan periode pemulihan
Karena masa tenggang itu sendiri masih memberikan hak pengguna, setelah pembelian langganan dengan add-on, pembayaran perpanjangan ditolak, item dengan masa tenggang minimum di antara semua item aktif akan dipilih, dan masa tenggang serta masa penangguhan akunnya sebagai periode pemulihan akan diterapkan untuk perpanjangan ini.
Item aktif mencakup item yang aktif dalam pembelian langganan dengan add-on tepat sebelum upaya perpanjangan, mengecualikan item yang baru ditambahkan (yang tidak akan berhak hingga setelah pemulihan), dan mengecualikan item yang tidak lagi aktif karena penghapusan atau penolakan.
Setelan penangguhan akun item dengan masa tenggang minimum yang dipilih akan diterapkan. Jika ada lebih dari satu item dengan masa tenggang minimum, tetapi periode penangguhan akun yang berbeda, periode penangguhan akun terpanjang akan diterapkan.
Masa tenggang
Jika pembayaran perpanjangan langganan ditolak, pembelian langganan akan memasuki status masa tenggang. Selama masa tenggang, pengguna akan terus memiliki akses ke semua item aktif dari periode perpanjangan sebelumnya. Setelah masa tenggang, jika metode pembayaran belum diperbaiki, seluruh pembelian langganan akan ditangguhkan. Jika ada item lain yang mencapai tanggal perpanjangan selama masa tenggang, upaya tagihan baru akan dimulai untuk item tersebut setelah langganan pulih dari penolakan pembayaran.
Penangguhan akun
Saat pembelian langganan dalam penangguhan akun, akses ke semua item langganan akan ditangguhkan hingga pembayaran dipulihkan.
Jika langganan dalam penangguhan akun dipulihkan, pembelian langganan akan tetap ada apa adanya. Jika langganan tidak dipulihkan, masa berlaku item dalam penolakan pembayaran akan berakhir, dan akses ke item lainnya akan dilanjutkan selama sisa periode penagihannya.
Contoh:
Pengguna memiliki langganan Paket Dasar Saya yang diperpanjang pada tanggal 1 setiap bulan, lalu pada 15 Agustus, menambahkan Paket add-on senilai $10 per bulan dengan uji coba gratis tujuh hari. Tidak ada item yang menetapkan masa tenggang, dan keduanya memiliki periode penangguhan akun selama 30 hari.
Pada 22 Agustus, pengguna ditagih $2,90 (10*9/31) untuk penghitungan prorata hingga 31 Agustus, tetapi masa berlaku metode pembayaran pengguna berakhir sebelum tanggal tersebut, dan langganan mengalami penolakan pembayaran pada 22 Agustus.
Saat langganan memasuki penangguhan akun karena penolakan pembayaran, pengguna tidak memiliki akses ke item apa pun dalam langganan dengan add-on. Waktu yang tersisa untuk item yang tidak diperpanjang akan diberikan kembali kepada pengguna saat langganan keluar dari penangguhan akun, baik karena pembayaran telah dipulihkan atau dibatalkan.
Pada contoh sebelumnya, langganan memasuki penangguhan akun pada 22 Agustus.
Jika akun dipulihkan pada 25 Agustus, sebelum tanggal perpanjangan yang lebih luas pada 1 September, pengguna akan mendapatkan kembali akses ke Paket Dasar Saya, dan Paket add-on pada hari yang sama. Tanggal penagihan berikutnya diubah menjadi 4 September.
Jika akun tidak dipulihkan setelah 30 hari, langganan akan dibatalkan pada 21 September dan pengguna akan kehilangan akses ke Paket add-on, serta melanjutkan akses ke Paket Dasar Saya hingga 30 September.
Dalam contoh ini, Anda harus mendapatkan expiryTime
yang diperbarui untuk SEMUA item dalam
langganan dengan add-on, karena beberapa item dapat melanjutkan haknya setelah
masa tenggang dan penangguhan akun.
Pelaporan dan rekonsiliasi keuangan
Gunakan Laporan penghasilan untuk merekonsiliasi langganan aktif Anda dengan transaksi di Play. Setiap item baris transaksi memiliki ID pesanan. Dengan pembelian yang mewakili beberapa item, laporan Penghasilan dan Perkiraan penjualan akan menyertakan baris terpisah untuk setiap transaksi seperti tagihan, biaya, pajak, dan pengembalian dana, untuk setiap item yang terlibat.
Untuk dasbor di Konsol Play:
Statistik pendapatan yang ditampilkan di bagian Pelaporan keuangan di konsol diperinci menurut item.
Pengelolaan pesanan mencerminkan pembelian langganan dengan add-on, dan menampilkan daftar item yang dibeli. Dari pengelolaan pesanan, Anda dapat mencabut, membatalkan, atau mengembalikan dana pembelian pengguna sepenuhnya.