Topik ini menjelaskan cara menangani peristiwa siklus proses langganan, seperti perpanjangan dan berakhirnya masa berlaku. Topik ini juga menjelaskan fitur langganan lainnya, seperti menawarkan promosi dan memungkinkan pengguna mengelola langganan sendiri.
Sebelum membaca topik ini, pastikan Anda telah membaca Mengintegrasikan Library Layanan Penagihan Google Play ke dalam aplikasi untuk petunjuk umum tentang cara menjual dan mengelola produk di aplikasi.
Jika Anda belum mengonfigurasi produk langganan untuk aplikasi, lihat Membuat dan mengonfigurasi produk.
Ringkasan langganan
Langganan memberikan serangkaian manfaat yang dapat diakses pengguna selama jangka waktu tertentu. Misalnya, langganan dapat memberikan hak kepada pengguna untuk mengakses layanan streaming musik.
Anda dapat memiliki beberapa langganan dalam satu aplikasi, baik untuk memberikan serangkaian manfaat yang berbeda, maupun tingkat yang berbeda dari serangkaian manfaat tunggal (misalnya, tingkat "Silver" dan "Gold").
Melalui paket dasar dan penawaran, Anda dapat membuat beberapa konfigurasi untuk produk langganan yang sama. Misalnya, Anda dapat membuat penawaran perkenalan untuk pengguna yang belum pernah berlangganan ke aplikasi Anda. Demikian pula, Anda dapat membuat penawaran upgrade untuk pengguna yang sudah berlangganan.
Untuk ringkasan mendetail tentang produk langganan, paket dasar, dan penawaran, lihat dokumentasi di Pusat Bantuan Konsol Play.
Menangani siklus proses langganan
Langganan yang sudah dibeli dapat melalui berbagai perubahan status pada
siklus prosesnya dan aplikasi perlu
merespons setiap perubahan. Untuk memeriksa status langganan, aplikasi Anda dapat membuat
kueri menggunakan
BillingClient.queryPurchasesAsync()
di
Library Layanan Penagihan Google Play atau
Purchases.subscriptionsv2:get
di Google Play Developer API.
BillingClient.queryPurchasesAsync() |
Purchases.subscriptionsv2:get |
|||||
Status | Is returned? | isAutoRenewing | Is returned? | expiryTime | subscriptionState | autoRenewing |
Aktif | Ya | Benar | Ya | Mendatang | SUBSCRIPTION_STATE_ACTIVE |
Benar |
Dibatalkan | Ya | Salah | Ya | Mendatang | SUBSCRIPTION_STATE_CANCELED |
Salah |
Dalam masa tenggang | Ya | Benar | Ya | Mendatang (akhir masa tenggang) | SUBSCRIPTION_STATE_IN_GRACE_PERIOD |
Benar |
Ditangguhkan | Tidak | T/A | Ya | Sudah lewat (akhir masa berlaku yang ditetapkan atau akhir masa tenggang, jika ada) | SUBSCRIPTION_STATE_ON_HOLD |
Benar |
Dijeda | Tidak | T/A | Ya | Sudah lewat | SUBSCRIPTION_STATE_PAUSED |
Benar |
Sudah berakhir | Tidak | T/A | Ya | Sudah lewat | SUBSCRIPTION_STATE_EXPIRED |
Salah |
Jika aplikasi Anda menyimpan status langganan di server backend yang aman, Anda
harus memproses perubahan status menggunakan
Notifikasi developer real time
untuk memastikan status tetap sinkron. SubscriptionNotification
dikirim
untuk peristiwa yang memengaruhi status langganan seperti perpanjangan dan
pembatalan.
Aplikasi perlu menangani perubahan status yang dijelaskan di bagian berikut.
Langganan baru
Pastikan Anda mengikuti rekomendasi kami untuk
menangani pembelian baru. Saat
dibeli, langganan kemudian ditampilkan oleh
BillingClient.queryPurchasesAsync()
,
dan
SubscriptionNotification
dengan jenis notifikasi
SUBSCRIPTION_PURCHASED
akan dikirim. Saat menerima notifikasi
ini, Anda harus mengirimkan kueri ke Google Play Developer API untuk mendapatkan
status langganan
terbaru.
Resource langganan terlihat mirip dengan contoh berikut: Perhatikan bahwa
resource akan memiliki acknowledgementState
bernilai
ACKNOWLEDGEMENT_STATE_PENDING
hingga Anda mengonfirmasi pembelian:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
"startTime": "2022-04-22T18:39:58.270Z",
"regionCode": "US",
"subscriptionState": "SUBSCRIPTION_STATE_ACTIVE",
"latestOrderId": "GPA.3333-4137-0319-36762",
"acknowledgementState": "ACKNOWLEDGEMENT_STATE_PENDING", // need to acknowledge new purchases
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": next_renewal_date,
"autoRenewingPlan": {
"autoRenewEnabled": true
}
}
],
}
Perpanjangan
Jika berhasil diperpanjang, langganan akan terus
ditampilkan oleh
BillingClient.queryPurchasesAsync()
.
Notifikasi SUBSCRIPTION_RENEWED
juga dikirim saat langganan diperpanjang.
Aplikasi harus memastikan pengguna masih berhak menikmati langganan, lalu
memperbarui status langganan dengan expiryTime
baru yang disediakan
di
resource langganan
yang ditampilkan dari Google Play Developer API. Resource langganan terlihat mirip dengan
contoh berikut:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
"startTime": "2022-04-22T18:39:58.270Z",
"regionCode": "US",
"subscriptionState": "SUBSCRIPTION_STATE_ACTIVE",
"latestOrderId": "GPA.3333-4137-0319-36762",
"acknowledgementState": "ACKNOWLEDGEMENT_STATE_ACKNOWLEDGED",
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": next_renewal_date,
"autoRenewingPlan": {
"autoRenewEnabled": true
}
}
]
}
Berakhirnya masa berlaku
Setelah masa berlaku langganan berakhir, langganan tidak lagi ditampilkan di
BillingClient.queryPurchasesAsync()
dan pengguna akan kehilangan akses ke langganan.
SubscriptionNotification
dengan jenis SUBSCRIPTION_EXPIRED
juga dikirim saat langganan
berakhir. Saat menerima notifikasi ini, Anda harus mengirimkan kueri
ke Google Play Developer API untuk mendapatkan
status langganan terbaru.
Resource langganan terlihat mirip dengan contoh berikut:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_EXPIRED",
...
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": expiration_time_in_past,
...
}
],
}
Pembatalan
Pengguna dapat membatalkan langganan secara sukarela dari Play Store atau langganan akan dibatalkan secara otomatis jika tidak dipulihkan setelah memasuki penangguhan akun. Saat membatalkan langganan, pengguna mempertahankan akses ke konten tersebut hingga akhir siklus penagihan saat ini. Saat siklus penagihan berakhir, akses akan dicabut.
Jika dibatalkan saat masa berlakunya belum berakhir, langganan
akan ditampilkan dari
BillingClient.queryPurchasesAsync()
.
Membatalkan langganan akan memicu notifikasi SUBSCRIPTION_CANCELED
.
Saat Anda menerima notifikasi ini,
resource langganan
yang ditampilkan dari Google Play Developer API memiliki subscriptionState
yang disetel ke "SUBSCRIPTION_STATE_CANCELED",
dan expiryTime
berisi tanggal pengguna kehilangan akses
ke langganan. Jika expiryTime
sudah berlalu, pengguna
akan langsung kehilangan akses. Jika tidak, pengguna akan tetap memiliki akses hingga masa berlaku langganan berakhir. Resource langganan terlihat mirip dengan contoh berikut:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_CANCELED",
...
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": expiration_time,
...
}
],
}
Aplikasi dapat melihat cancelReason
di
resource langganan
yang ditampilkan dari Google Play Developer API untuk mempelajari alasan pembatalan langganan
(misalnya, pelanggan membatalkan atau mengalami masalah penagihan). Jika
langganan dibatalkan oleh pengguna, Anda dapat melihat kolom
cancelSurveyResult
untuk mengetahui alasan pengguna membatalkan langganan.
Aplikasi mungkin perlu menampilkan pesan yang memberi tahu pengguna bahwa langganan mereka dibatalkan, seperti "Langganan Anda akan berakhir pada _tanggal. Aplikasi juga dapat menyediakan deep link ke Google Play Store agar pengguna dapat memulihkan langganan.
Jika pesan ini ditampilkan, sebaiknya tawarkan juga opsi untuk menutup pesan secara permanen.
Selain itu, pesan pembatalan mungkin terasa mengganggu, terutama bagi pengguna yang membatalkan langganan secara manual (bukan pembatalan yang disebabkan oleh metode pembayaran yang sudah habis masa berlakunya). Anda dapat memilih untuk tidak memberi tahu pengguna yang membatalkan langganan secara manual.
Pencabutan
Langganan dapat dicabut dari pengguna karena berbagai sebab,
termasuk karena aplikasi mencabut langganan menggunakan
Purchases.subscriptions:revoke
atau karena penagihan balik pada pembelian. Dalam situasi ini, aplikasi harus
segera mencabut akses pengguna. Langganan yang dicabut
tidak lagi ditampilkan dari
BillingClient.queryPurchasesAsync()
.
SubscriptionNotification
dengan jenis SUBSCRIPTION_REVOKED
juga dikirim saat hal ini terjadi. Saat
notifikasi ini dikirim,
resource langganan
yang ditampilkan dari Google Play Developer API memiliki subscriptionState
yang disetel sebagai "SUBSCRIPTION_STATE_EXPIRED"
,
dan expiryTime
berisi tanggal pengguna kehilangan
akses ke langganan. Resource langganan terlihat mirip dengan
contoh berikut:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_EXPIRED",
...
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": expiration_time,
...
}
],
}
Penangguhan akun
Penangguhan akun adalah status langganan yang dimulai ketika metode pembayaran pengguna gagal dan semua masa tenggang yang terkait telah berakhir tanpa penyelesaian pembayaran. Saat langganan memasuki penangguhan akun, Anda harus memblokir akses ke konten atau layanan Anda. Masa penangguhan akun berlangsung hingga 30 hari.
Selama penangguhan akun, langganan tidak ditampilkan oleh
BillingClient.queryPurchasesAsync()
.
Selama penangguhan akun, Anda harus menangani semua pembatalan, pemulihan, atau pembelian kembali langganan sesuai kebutuhan.
Saat pengguna memasuki penangguhan akun, Anda harus memanfaatkan Notifikasi developer real time untuk memberi tahu pengguna alasan ditangguhkannya akses ke langganan. Berikan pesan di aplikasi yang berisi petunjuk tentang cara memperbaiki metode pembayaran mereka dan mendapatkan kembali akses ke langganan. Pesan Anda harus berisi link ke setelan langganan Google Play sehingga pengguna dapat memperbaiki metode pembayarannya. Contohnya, Anda dapat menggunakan pesan yang mirip dengan pesan berikut:
"There is a problem with your subscription. Click here to go to the
Google Play subscription settings to fix your payment method."
Jika pengguna dapat mengakses konten langganan di luar aplikasi, Anda mungkin perlu mengirimkan notifikasi push atau email kepada pengguna untuk memberi tahu bahwa langganan mereka tidak aktif lagi.
Jika pelanggan dapat memperbaiki masalah pembayaran, Anda dapat menampilkan pesan di aplikasi yang memberi tahu pengguna saat langganan mereka dipulihkan. Contohnya, Anda dapat menggunakan pesan yang mirip dengan pesan berikut:
"Your form of payment was updated, and your subscription has
been recovered."
Dengan Notifikasi developer real time,
Anda akan menerima
SubscriptionNotification
dengan jenis SUBSCRIPTION_ON_HOLD
saat langganan
memasuki status penangguhan akun. Panggil
Google Play Developer API
dari server backend yang aman untuk mendapatkan informasi
langganan baru. Selama penangguhan akun, expiryTime
resource langganan
disetel ke stempel waktu yang lalu:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_ON_HOLD",
...
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": timestamp_in_past,
...
}
],
}
Setelah pengguna memperbaiki metode pembayaran, langganan akan dikembalikan ke status aktif, lalu Anda harus memulihkan akses ke konten langganan.
Jika hanya mengandalkan
queryPurchasesAsync()
untuk menentukan apakah pengguna berhak menikmati langganan, aplikasi
harus otomatis menangani pemulihan langganan dari penangguhan akun.
Jika aplikasi menyinkronkan status langganan dengan server, Anda harus memproses
SubscriptionNotification
dengan jenis SUBSCRIPTION_RECOVERED
agar mendapatkan notifikasi saat langganan dipulihkan dan pengguna akan mendapatkan akses
kembali. Jika Anda membuat kueri langganan setelah menerima notifikasi
ini, expiryTime
akan disetel ke stempel waktu yang akan
datang:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_ACTIVE",
...
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": next_renewal_date,
...
}
],
}
Jika pengguna tidak memperbaiki metode pembayaran sebelum masa penangguhan akun berakhir,
Anda akan menerima Notifikasi developer
real time SUBSCRIPTION_CANCELED
. Untuk petunjuk tentang cara menangani pembatalan, lihat
pembatalan langganan. Jika Anda membuat kueri langganan
yang dibatalkan dengan cara ini, expiryTime
yang ditampilkan akan disetel
ke stempel waktu yang lalu:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_CANCELED",
...
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": timestamp_in_past,
...
}
],
}
Akses dan pemulihan penangguhan akun
Contoh berikut menunjukkan linimasa untuk langganan yang memasuki status penangguhan akun, lalu melakukan pemulihan saat pengguna memperbaiki metode pembayarannya.
Serupa dengan contoh sebelumnya, linimasa ini mewakili langganan yang pertama kali memasuki masa tenggang sebelum memasuki penangguhan akun.
Perhatikan hal berikut:
- Selama masa tenggang, pengguna masih memiliki akses ke manfaat langganan.
- Sebelum langganan memasuki penangguhan akun, Google akan melakukan upaya tambahan untuk menagih metode pembayaran hingga 24 jam. Pengguna masih memiliki manfaat langganan selama periode ini. Setelah periode percobaan ulang ini berlalu, langganan akan memasuki penangguhan akun, dan pengguna akan kehilangan akses ke manfaat langganan.
- Jika langganan dipulihkan selama masa tenggang, tanggal perpanjangan tidak direset.
- Saat langganan dipulihkan dari penangguhan akun, tanggal perpanjangan akan direset.
Masa tenggang
Jika masa tenggang diaktifkan, langganan akan memasuki masa tenggang jika terjadi masalah pembayaran di akhir siklus penagihan. Selama masa ini, pengguna masih memiliki akses ke langganan, sementara Google Play mencoba memperpanjang langganan. Anda dapat menentukan durasi masa tenggang dari setelan produk dalam aplikasi di Konsol Google Play.
Jika hanya mengandalkan
queryPurchasesAsync()
untuk memeriksa apakah pengguna berhak menikmati langganan, aplikasi harus
otomatis menangani masa tenggang karena queryPurchasesAsync()
akan terus
menampilkan pembelian yang dibatalkan sebelum tanggal habis masa berlaku.
Jika aplikasi menyinkronkan status langganan dengan backend, Anda harus
memproses
SubscriptionNotification
dengan jenis SUBSCRIPTION_IN_GRACE_PERIOD
agar menerima notifikasi saat pengguna memasuki masa tenggang. Saat
pengguna berada dalam masa tenggang,
resource langganan
berisi autoRenewEnabled = true
.
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_IN_GRACE_PERIOD",
...
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": timestamp_in_future,
"autoRenewingPlan": {
"autoRenewEnabled": true
}
}
],
}
Saat pengguna memasuki masa tenggang, tampilkan pesan di aplikasi yang memberitahukan cara memperbaiki metode pembayaran mereka. Jika tidak, pengguna akan kehilangan akses ke langganan saat masa tenggang berakhir. Pesan ini dapat memberikan deep link ke Google Play Store untuk membantu pengguna mengelola langganan mereka.
Setelah pengguna memperbaiki metode pembayaran, langganan akan segera diperpanjang dan aplikasi dapat menangani perpanjangan seperti yang dijelaskan dalam perpanjangan.
Jika pengguna tidak memperbaiki metode pembayaran selama masa tenggang, langganan akan memasuki penangguhan akun.
Akses dan pemulihan masa tenggang tanpa penangguhan akun
Contoh berikut menunjukkan linimasa untuk langganan yang memasuki masa tenggang, lalu melakukan pemulihan saat pengguna memperbaiki metode pembayaran. Dalam contoh ini, langganan tidak mendukung penangguhan akun, sehingga setelah masa tenggang berakhir, pengguna akan kehilangan manfaat langganan.
Perhatikan hal berikut:
- Selama masa tenggang, pengguna masih memiliki akses ke manfaat langganan.
- Jika langganan dipulihkan selama masa tenggang, tanggal perpanjangan tidak direset.
Langganan dijeda
Anda dapat mencegah churn sukarela dengan memungkinkan pengguna menjeda langganan. Saat Anda mengaktifkan fitur jeda, pengguna dapat memilih untuk menjeda langganan untuk jangka waktu antara satu minggu dan tiga bulan, bergantung pada periode pengulangannya. Setelah diaktifkan, opsi jeda akan muncul di pusat langganan dan di alur pembatalan. Perlu diketahui bahwa langganan tahunan tidak dapat dijeda, dan batas jeda selama satu minggu dan tiga bulan dapat berubah sewaktu-waktu.
Agar pengguna dapat menjeda langganan, lakukan langkah berikut:
- Login ke Konsol Google Play.
- Pilih aplikasi, lalu buka Keberadaan di Store > Produk dalam aplikasi > Langganan.
- Luaskan bagian Setelan langganan.
- Centang Aktifkan Jeda.
Jeda langganan hanya berlaku setelah periode penagihan saat ini berakhir. Selama dijeda, langganan tidak dapat diakses oleh pengguna. Pada akhir periode jeda, langganan dilanjutkan dan Google berupaya memperpanjang langganan tersebut. Jika dapat dilanjutkan, langganan akan aktif kembali. Jika langganan tidak dapat dilanjutkan karena masalah pembayaran, pengguna akan memasuki status penangguhan akun, seperti ditunjukkan pada Gambar 1:

Pengguna juga dapat memilih untuk melanjutkan langganan secara manual kapan saja selama periode jeda, seperti ditunjukkan pada gambar 2. Jika pengguna melanjutkan secara manual, tanggal penagihan berubah ke tanggal melanjutkan manual.

Jika langganan pengguna dijeda, langganan tersebut tidak akan ditampilkan oleh
queryPurchasesAsync()
.
Jika dilanjutkan, langganan pun akan ditampilkan oleh
queryPurchasesAsync()
.
Jika aplikasi Anda menyinkronkan status langganan dengan server backend yang aman, Anda harus memproses Notifikasi developer real time untuk mempertahankan status. Notifikasi ini juga memungkinkan Anda untuk memberi tahu pengguna di aplikasi bahwa mereka telah menjeda langganan dan tidak memiliki akses ke langganan tersebut. Anda juga harus menyediakan cara bagi pengguna untuk melanjutkan langganan secara manual menggunakan deep link ke Google Play.
SubscriptionNotification
dengan jenis SUBSCRIPTION_PAUSE_SCHEDULE_CHANGED
dikirim saat pengguna mulai menjeda langganan. Untuk saat ini,
pengguna dapat mengakses langganan, dan
resource langganan
berisi autoRenewing = true
, paymentState = 1
(Pembayaran Diterima), serta
nilai untuk expiryTime
dan autoResumeTimeMillis
di masa mendatang.
SubscriptionNotification
dengan jenis SUBSCRIPTION_PAUSED
dikirim saat
langganan mulai dijeda. Untuk saat ini, pengguna dapat kehilangan akses
langganan, dan
resource langganan
berisi autoRenewing = true
, dan paymentState = 0
(tertunda),
nilai untuk autoResumeTimeMillis
di masa mendatang, dan nilai untuk
expiryTime
yang sudah lewat.
SubscriptionNotification
dengan jenis SUBSCRIPTION_RENEWED
dikirim jika
langganan dilanjutkan secara otomatis pada akhir periode jeda
atau jika pengguna memilih untuk melanjutkan langganan secara manual. Hal ini harus
ditangani seperti yang dijelaskan dalam perpanjangan.
SubscriptionNotification
dengan jenis SUBSCRIPTION_ON_HOLD
dikirim jika
terjadi kegagalan pembayaran saat mencoba melanjutkan langganan. Hal ini
harus ditangani seperti yang dijelaskan di bagian penangguhan akun.
Pemulihan
Langganan yang dibatalkan tetap terlihat di aplikasi Play Store hingga tanggal habis masa berlakunya. Pengguna dapat memulihkan langganan yang dibatalkan sebelum habis masa berlakunya dengan mengklik Berlangganan lagi (sebelumnya Pulihkan) di bagian Langganan di aplikasi Google Play Store.

Jika hanya mengandalkan
queryPurchasesAsync()
untuk menentukan apakah pengguna berhak menikmati langganan, aplikasi harus menangani pemulihan secara otomatis, karena queryPurchasesAsync()
terus
menampilkan pembelian yang dibatalkan sebelum tanggal habis masa berlaku. Langganan
yang dipulihkan akan terus diperpanjang seolah-olah tidak dibatalkan.
Jika aplikasi menyinkronkan status langganan dengan backend, Anda harus
memproses
SubscriptionNotification
dengan jenis SUBSCRIPTION_RESTARTED
.
Setelah menerima notifikasi, aplikasi Anda dapat meresponsnya, mencatat bahwa langganan
kini disetel agar diperpanjang, dan berhenti menampilkan pesan pemulihan
di aplikasi. Resource langganan terlihat mirip dengan contoh berikut:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_ACTIVE",
...
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": next_renewal_date
...
}
],
}
Upgrade, downgrade, dan pendaftaran ulang
Saat pengguna mengupgrade, mendowngrade, atau mendaftarkan ulang aplikasi Anda sebelum langganan berakhir, langganan lama akan menjadi tidak valid, dan langganan baru akan dibuat dengan token pembelian baru.
Selain itu,
resource langganan
yang ditampilkan dari Google Play Developer API akan berisi
linkedPurchaseToken
yang menunjukkan pembelian lama yang digunakan pelanggan untuk
mengupgrade, mendowngrade, atau berlangganan lagi. Anda dapat menggunakan linkedPurchaseToken
untuk mencari langganan lama dan mengidentifikasi akun pengguna yang ada agar dapat mengaitkan pembelian baru dengan akun yang sama.
Sebelum menawarkan opsi upgrade, downgrade, atau pendaftaran ulang di aplikasi, Anda harus mengonfirmasi langganan yang ada. Perubahan atau pendaftaran ulang paket apa pun akan diblokir jika langganan lama masih menunggu konfirmasi.
Setelah paket diubah atau didaftarkan ulang, kami juga mengharuskan Anda untuk mengonfirmasi pembelian langganan yang baru. Cara yang direkomendasikan adalah menggunakan Google Play Developer API untuk mengonfirmasi pembelian sehingga terhindar dari pembatalan pembelian. Resource langganan terlihat mirip dengan contoh berikut:
{
"kind": "androidpublisher#subscriptionPurchaseV2",
...
"subscriptionState": "SUBSCRIPTION_STATE_ACTIVE",
"linkedPurchaseToken": old_purchase_token,
...
"lineItems": [
{
"productId": "sub_variant_plan01",
"expiryTime": next_renewal_date,
"autoRenewingPlan": {
"autoRenewEnabled": true
}
}
],
}
Integrasi paket prabayar
Paket prabayar tidak diperpanjang secara otomatis setelah masa berlakunya habis. Untuk memperpanjang hak langganan tanpa hambatan, pengguna harus menambah saldo paket prabayar untuk langganan yang sama.
Untuk menambah saldo, luncurkan alur penagihan seperti yang Anda lakukan dengan pembelian asli. Anda tidak perlu menunjukkan bahwa pembelian merupakan penambahan saldo.
Penambahan saldo paket prabayar selalu menggunakan mode
penghitungan prorata IMMEDIATE_AND_CHARGE_FULL_PRICE
, dan Anda tidak perlu menetapkan mode ini secara eksplisit.
Pengguna akan langsung ditagih untuk periode penagihan penuh,
dan hak mereka diperpanjang menurut durasi yang ditentukan dalam penambahan saldo.
Setelah menambah saldo, kolom berikut di
objek hasil Purchase
diupdate untuk menunjukkan pembelian penambahan saldo terbaru:
- Id pesanan
- Waktu pembelian
- Tanda tangan
- Token pembelian
- Dikonfirmasi
Kolom Purchase
berikut selalu berisi data yang sama dengan yang ada dalam
pembelian asli:
- Nama paket
- Status pembelian
- Produk
- Perpanjangan otomatis
Konfirmasi pembelian prabayar
Serupa dengan perpanjangan langganan secara otomatis, Anda harus mengonfirmasi paket prabayar setelah pembelian. Pembelian awal maupun penambahan saldo apa pun harus dikonfirmasi. Untuk mengetahui informasi selengkapnya, lihat Memproses pembelian.
Karena durasi paket prabayar cenderung pendek, penting untuk mengonfirmasi pembelian sesegera mungkin.
Paket prabayar dengan durasi satu minggu atau lebih harus dikonfirmasi dalam waktu tiga hari.
Paket prabayar dengan durasi kurang dari satu minggu harus dikonfirmasi dalam waktu setengah dari durasi paket. Misalnya, developer memiliki waktu 1,5 hari untuk mengonfirmasi paket prabayar tiga hari.
Menggunakan deep link untuk memungkinkan pengguna mengelola langganan
Sebagai developer, Anda harus memudahkan pelanggan untuk mengelola langganan mereka. Aplikasi harus menyertakan link di layar preferensi atau setelan yang memungkinkan pengguna untuk mengelola langganan. Contoh link ini ditunjukkan pada gambar 4.

Pada pengendali klik link ini, tambahkan logika untuk menentukan apakah pengguna memiliki
langganan yang masih berlaku untuk aplikasi, yang mana expiryTime
di
masa mendatang atau autoRenewing
ditetapkan ke true
.
Setiap productId
langganan cocok dengan ID produk yang Anda tetapkan
saat membuatnya di Konsol Play. Untuk menentukan
productId
langganan yang sudah ada secara terprogram, buat kueri
backend aplikasi Anda untuk daftar langganan yang terkait dengan pengguna tertentu.
Jika pengguna memiliki langganan yang masih berlaku, Anda dapat mengarahkan mereka ke URL yang mirip dengan URL berikut ini, dengan mengganti "your-sub-product-id" dan "your-app-package" dengan ID langganan dan info paket aplikasi:
https://play.google.com/store/account/subscriptions?sku=your-sub-product-id&package=your-app-package
Jika pengguna tidak memiliki langganan yang masih berlaku dalam aplikasi, gunakan URL berikut untuk mengarahkan mereka ke halaman yang menampilkan semua langganan mereka, seperti yang ditunjukkan pada gambar 5 dan 6:
https://play.google.com/store/account/subscriptions


Anda dapat menemukan kode contoh untuk logika link langganan di aplikasi contoh Classy Taxi.
Mengizinkan pengguna mengupgrade, mendowngrade, atau mengubah langganan
Anda dapat menawarkan berbagai tingkat langganan kepada pengguna, seperti paket dasar dan paket premium. Gambar 7 menampilkan layar yang menawarkan dua tingkat langganan:

Pengguna harus dapat mengakses layar yang serupa dengan gambar 7 untuk mengupgrade atau mendowngrade langganan. Saat mengupgrade atau mendowngrade langganan, Anda dapat menyetel mode penghitungan prorata yang menentukan cara perubahan memengaruhi pelanggan.
Tabel berikut mencantumkan mode penghitungan prorata yang tersedia:
Mode penghitungan prorata | Deskripsi |
---|---|
IMMEDIATE_WITH_TIME_PRORATION |
Langganan ini langsung diupgrade atau didowngrade. Semua sisa waktu disesuaikan berdasarkan perbedaan harga dan dikreditkan ke langganan baru dengan memajukan tanggal penagihan berikutnya. Ini merupakan perilaku default. |
IMMEDIATE_AND_CHARGE_PRORATED_PRICE |
Langganan ini langsung diupgrade dan siklus penagihannya tetap sama. Perbedaan harga untuk periode yang tersisa akan ditagih kepada pengguna. |
IMMEDIATE_WITHOUT_PRORATION |
Langganan ini langsung diupgrade atau didowngrade, dan harga baru akan dikenakan saat langganan diperpanjang. Siklus penagihan tetap sama. |
DEFERRED |
Langganan diupgrade atau didowngrade hanya jika langganan diperpanjang. |
IMMEDIATE_AND_CHARGE_FULL_PRICE |
Langganan ini diupgrade atau didowngrade dan pengguna akan langsung dikenai biaya penuh untuk hak baru. Nilai yang tersisa dari langganan sebelumnya akan dipindahkan ke hak yang sama, atau dihitung prorata sesuai waktu saat beralih ke hak yang berbeda. |
Jika pengguna mengubah hak langganan, Anda harus menentukan tarif penghitungan prorata saat runtime. Untuk perubahan hak, Anda tidak dapat menentukan mode penghitungan prorata default melalui Konsol Google Play.
Jika pengguna tidak mengubah hak langganan, Anda dapat menggunakan
mode penghitungan prorata default yang dikonfigurasi melalui Konsol Play. Anda juga
dapat mengganti perilaku ini dengan menentukan mode penghitungan prorata dalam
SubscriptionUpdateParams
. Perhatikan pembatasan berikut:
- Saat mengupgrade, mendowngrade, atau melakukan pengalihan langganan yang sama
ke paket prabayar dari paket prabayar atau paket perpanjangan
otomatis, satu-satunya mode penghitungan prorata yang diizinkan adalah
IMMEDIATE_AND_CHARGE_FULL_PRICE
. Jika Anda menentukan mode penghitungan prorata lainnya, pembelian akan gagal dan error akan ditampilkan kepada pengguna. - Saat beralih paket dalam langganan yang sama ke paket perpanjangan
otomatisdari paket prabayar, mode penghitungan prorata yang valid adalah
IMMEDIATE_AND_CHARGE_FULL_PRICE
danIMMEDIATE_WITHOUT_PRORATION
. Jika Anda menentukan mode penghitungan prorata lainnya, pembelian akan gagal dan error akan ditampilkan kepada pengguna.
Contoh penghitungan prorata
Untuk memahami cara kerja setiap mode penghitungan prorata, perhatikan skenario berikut:
Sandra memiliki langganan konten online dari aplikasi Country Gardener. Saat ini, ia memiliki langganan bulanan di versi konten Tingkat 1 yang kontennya hanya berisi teks. Biaya langganan ini sebesar $2 per bulan dan diperpanjang pada tanggal 1 setiap bulan.
Pada tanggal 15 April, Sandra memilih untuk mengupgrade langganan ke versi tahunan Tingkat 2 yang berisi pembaruan video dan biayanya $36 per tahun.
Saat mengupgrade langganan, developer memilih mode penghitungan prorata. Daftar berikut ini menjelaskan pengaruh setiap mode penghitungan prorata terhadap langganan Sandra:
IMMEDIATE_WITH_TIME_PRORATION
- Langganan Tingkat 1 milik Sandra akan langsung berakhir. Karena ia sudah membayar untuk sebulan penuh (1-30 April), tetapi diupgrade di pertengahan masa berlaku langganan, maka biaya langganan setengah bulan ($1) akan diterapkan ke langganan yang baru. Namun, karena langganan baru tersebut berbiaya $36 per tahun, saldo kredit $1 hanya mencakup 10 hari (16-25 April) sehingga pada tanggal 26 April, ia dikenai biaya $36 untuk langganan baru dan $36 lagi pada tanggal 26 April setiap tahun berikutnya.
IMMEDIATE_AND_CHARGE_PRORATED_PRICE
- Mode ini dapat digunakan karena harga langganan Tingkat 2 per unit waktu ($36/tahun = $3/bulan) lebih besar daripada harga langganan Tingkat 1 per unit waktu ($2/bulan). Langganan Tingkat 1 milik Sandra akan langsung berakhir. Karena dia sudah membayar untuk sebulan penuh, tetapi hanya memakai separuhnya, biaya langganan setengah bulan ($1) akan diterapkan ke langganan yang baru. Namun, karena biaya langganan baru tersebut adalah $36/tahun, biaya langganan untuk 15 hari yang tersisa adalah $1,50 sehingga ia dikenai selisih biaya $0,50 untuk langganan barunya. Pada tanggal 1 Mei, dia dikenai biaya $36 untuk tingkat langganan barunya dan $36 lagi pada tanggal 1 Mei setiap tahun berikutnya.
IMMEDIATE_WITHOUT_PRORATION
- Langganan Tingkat 1 milik Sandra akan langsung diupgrade ke Tingkat 2 tanpa biaya tambahan, serta pada tanggal 1 Mei dia dikenai biaya $36 untuk tingkat langganan barunya dan $36 lagi pada tanggal 1 Mei setiap tahun berikutnya.
DEFERRED
- Langganan Tingkat 1 milik Sandra berlanjut hingga habis masa berlakunya, yaitu pada tanggal 30 April. Pada tanggal 1 Mei, langganan Tingkat 2 mulai berlaku, dan Sandra dikenai biaya $36 untuk tingkat langganan barunya.
IMMEDIATE_AND_CHARGE_FULL_PRICE
- Langganan Tingkat 1 milik Sandra akan langsung berakhir. Langganan Tingkat 2-nya dimulai hari ini dan dia dikenai biaya $36. Karena ia sudah membayar untuk sebulan penuh, tetapi hanya memakai separuhnya, biaya langganan setengah bulan ($1) akan diterapkan ke langganan yang baru. Karena biaya langganan baru sebesar $36/tahun, ia akan mendapatkan 1/36 tahun ditambahkan ke periode langganannya (~10 hari). Oleh karena itu, tagihan Sandra yang berikutnya adalah 1 tahun 10 hari dari hari ini sebesar $36. Setelah itu, Sandra akan dikenai biaya $36 setiap tahun berikutnya.
Saat memilih mode penghitungan prorata, pastikan untuk meninjau rekomendasi penghitungan prorata kami.
Aplikasi Anda dapat menawarkan upgrade atau downgrade kepada pengguna menggunakan langkah yang sama seperti meluncurkan alur pembelian. Namun, saat melakukan upgrade atau downgrade, Anda harus memberikan detail untuk langganan saat ini, langganan berikutnya (setelah upgrade atau downgrade), dan mode penghitungan prorata yang digunakan, seperti yang ditunjukkan dalam contoh berikut:
String offerToken = productDetails
.getSubscriptionOfferDetails(selectedOfferIndex)
.getOfferToken();
BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder()
.setProductDetailsParamsList(
ImmuableList.of(
ProductDetailsParams.newBuilder()
// fetched via queryProductDetailsAsync
.setProductDetails(productDetails)
// offerToken can be found in
// ProductDetails=>SubscriptionOfferDetails
.setOfferToken(offerToken)
.build()))
.setSubscriptionUpdateParams(
SubscriptionUpdateParams.newBuilder()
// purchaseToken can be found in Purchase#getPurchaseToken
.setOldSkuPurchaseToken("old_purchase_token")
.setReplaceSkusProrationMode(ProrationMode.IMMEDIATE_AND_CHARGE_FULL_PRICE)
.build())
.build();
BillingResult billingResult = billingClient.launchBillingFlow(activity, billingFlowParams);
// process purchase results from PurchasesUpdatedListener registered with BillingClient
public void onPurchaseUpdated(BillingResult billingResult, @Nullable List<Purchase> purchases) {
// check BillingResult
// process returned Purchase list, e.g. grant entitlement
}
Untuk penggantian langsung pada mode penghitungan prorata, aplikasi menerima
pembelian baru di
PurchasesUpdatedListener
.
Pembelian juga tersedia di
BillingClient.queryPurchasesAsync()
.
Saat Anda menerima token pembelian, ikuti
proses verifikasi
yang sama seperti saat memverifikasi token pembelian baru. Pastikan untuk mengonfirmasi pembelian ini
dengan
BillingClient.acknowledgePurchase()
dari Library Layanan Penagihan Google Play atau
Purchases.subscriptions:acknowledge
dari Google Play Developer API.
Google Play Developer API akan menampilkan linkedPurchaseToken
di
resource langganan.
Pastikan untuk membatalkan validasi token yang diberikan dalam linkedPurchaseToken
guna
memastikan bahwa token lama tidak digunakan untuk mendapatkan akses ke layanan Anda. Lihat
Upgrade, downgrade, dan pendaftaran ulang
untuk mendapatkan informasi tentang penanganan pembelian upgrade dan downgrade.
Untuk mode penggantian yang ditangguhkan, aplikasi menerima panggilan ke
PurchasesUpdatedListener
dengan pembelian paket langganan awal dan status apakah
upgrade atau downgrade berhasil. Hingga penggantian mulai berlaku,
BillingClient.queryPurchasesAsync()
akan tetap menampilkan pembelian paket langganan awal. Setelah
paket baru mulai berlaku, queryPurchasesAsync()
akan menampilkan data pembelian langganan baru dan notifikasi SUBSCRIPTION_RENEWED
akan dikirim ke server backend
aman. Untuk penggantian yang ditangguhkan,
sangat disarankan untuk memproses notifikasi ini dan mengonfirmasi
pembelian menggunakan
Purchases.subscriptions:acknowledge
.
linkedPurchaseToken
dalam resource langganan dapat digunakan untuk menentukan
pengguna mana di backend langganan yang harus diperbarui haknya
dengan yang baru, jika berlaku. Aplikasi tidak boleh mengandalkan pengguna
membuka aplikasi dan mengonfirmasi melalui
BillingClient.acknowledgePurchase()
,
karena pengguna tersebut mungkin tidak membuka aplikasi selama tiga hari sejak perubahan paket
diterapkan.
Mengupgrade dengan penawaran uji coba gratis atau harga perkenalan
Setelan kelayakan uji coba gratis berlaku jika pengguna melakukan upgrade atau downgrade. Anda dapat menyesuaikan setelan kelayakan uji coba gratis di Konsol Google Play.
Perhatikan hal berikut:
- Jika pengguna hanya dapat menerima satu uji coba gratis di semua langganan yang tersedia di aplikasi, paket yang dituju setelah perubahan tidak akan menyediakan uji coba gratis atau harga perkenalan.
- Jika Anda memberikan satu uji coba gratis per produk langganan, paket yang dituju mungkin menyediakan uji coba gratis atau harga perkenalan.
Tabel berikut menjelaskan perilaku setiap mode penghitungan prorata jika paket baru dan lama sama-sama menyediakan uji coba gratis, dan pengguna melakukan upgrade selama uji coba gratis:
Satu uji coba gratis per aplikasi | Satu uji coba gratis per produk langganan | |
IMMEDIATE_WITH_TIME_PRORATION | Pengguna akan langsung kehilangan uji coba gratis. Sisa periode uji coba gratis dikonversi ke periode gratis yang setara di tingkat baru berdasarkan perbedaan harga. | Pengguna kehilangan uji coba gratis sebelumnya, tetapi akan langsung memulai uji coba gratis baru. Selain itu, sisa periode uji coba gratis dari tingkat yang lama dikonversi ke periode gratis yang setara di tingkat baru dan ditambahkan ke uji coba gratis yang baru. |
IMMEDIATE_AND_CHARGE_PRORATED_PRICE |
Pengguna akan langsung kehilangan uji coba gratis. Perbedaan harga untuk periode yang tersisa akan ditagih kepada pengguna. Tanggal penagihan berikutnya tetap tidak berubah. Catatan: Opsi ini hanya tersedia untuk upgrade langganan, dengan harga per unit waktu yang dinaikkan. |
|
IMMEDIATE_WITHOUT_PRORATION | Pengguna akan langsung diupgrade ke tingkat baru. Pengguna tetap memiliki akses uji coba gratis ke tingkat baru hingga periode penagihan sebelumnya berakhir. | |
DEFERRED | Pengguna tetap memiliki akses uji coba gratis ke langganan lama hingga tanggal penagihan berikutnya. | |
IMMEDIATE_AND_CHARGE_FULL_PRICE | Pengguna akan langsung kehilangan uji coba gratis. Harga langganan yang baru akan ditagihkan kepada pengguna. Tanggal penagihan berikutnya adalah periode langganan baru ditambah sisa waktu dari uji coba gratis. |
Untuk memahami cara kerja transisi uji coba gratis dalam kasus default berupa satu uji coba gratis per aplikasi, perhatikan skenario berikut:
Maria memiliki langganan konten online dari aplikasi Country Gardener. Saat ini, ia memiliki langganan bulanan ke versi konten Tingkat 1 yang kontennya hanya berisi teks. Biaya langganan ini sebesar $10/bulan, dan dia berlangganan pada 1 April. Dia menikmati periode uji coba gratis 30 hari karena baru berlangganan untuk pertama kalinya, sehingga pembayaran pertamanya jatuh tempo pada tanggal 1 Mei.
Pada tanggal 15 April, Maria memilih untuk mengupgrade langganan ke Tingkat 2, yang berisi pembaruan video dan berbiaya $20/bulan. Langganan kedua ini juga memiliki periode uji coba selama 30 hari.
Daftar berikut ini menjelaskan cara transisi uji coba gratis untuk setiap mode penghitungan prorata:
IMMEDIATE_WITH_TIME_PRORATION
- Maria langsung diupgrade ke Tingkat 2. Karena Maria melakukan upgrade di pertengahan masa berlaku langganan, biaya langganan setengah bulan (15 hari senilai $10/bulan) diterapkan ke langganan barunya. Namun, karena langganan baru dikenai biaya $20/bulan, saldo 15 hari hanya cukup untuk membayar langganan untuk 7,5 hari. Maria tidak memenuhi syarat untuk menerima uji coba gratis lainnya ke Tingkat 2, sehingga mulai tanggal 22 April, dia dikenai biaya sebesar $20 setiap bulan.IMMEDIATE_AND_CHARGE_PRORATED_PRICE
- Mode ini dapat digunakan karena harga langganan Tingkat 2 per unit waktu ($20/bulan) lebih besar daripada harga langganan Tingkat 1 per unit waktu ($10/bulan). Langganan Tingkat 1 milik Maria akan langsung diupgrade ke Tingkat 2, dan dia akan kehilangan uji coba gratisnya. Karena tanggal penagihan berikutnya untuk Maria adalah 1 Mei, ia dikenai biaya $10 hari ini untuk membayar paruh kedua di bulan April, lalu mulai 1 Mei, ia dikenai biaya $20 setiap bulan.IMMEDIATE_WITHOUT_PRORATION
- Langganan Tingkat 1 milik Maria akan langsung diupgrade ke Tingkat 2. Maria tetap memiliki uji coba gratisnya hingga 30 April dan kini memiliki akses ke konten Tingkat 2. Mulai 1 Mei, ia dikenai biaya $20 setiap bulan.DEFERRED
- Langganan Tingkat 1 milik Maria berlanjut hingga pembayaran berikutnya jatuh tempo pada 1 Mei. Pada 1 Mei, langganan Tingkat 2 mulai berlaku dan Maria dikenai biaya $20 pada tanggal 1 setiap bulan.IMMEDIATE_AND_CHARGE_FULL_PRICE
- Langganan Tingkat 1 milik Maria akan langsung diupgrade ke Tingkat 2, dan dia akan kehilangan uji coba gratisnya. Ia dikenai biaya sebesar $20 hari ini. Karena Maria memiliki 15 hari lagi dalam uji coba gratisnya, tanggal penagihan berikutnya adalah 1 bulan + 15 hari dari sekarang, atau 1 Juli. Mulai 1 Juli, ia dikenai biaya $20 setiap bulan.
Daftar berikut ini menjelaskan perilaku transisi jika developer hanya mengizinkan satu uji coba gratis per langganan:
IMMEDIATE_WITH_TIME_PRORATION
- Maria langsung diupgrade ke Tingkat 2. Karena Maria melakukan upgrade di pertengahan masa berlaku langganan, maka biaya langganan setengah bulan (15 hari senilai $10/bulan) diterapkan ke langganan barunya. Namun, karena langganan baru dikenai biaya $20/bulan, saldo 15 hari hanya cukup untuk membayar langganan untuk 7,5 hari. Maria memenuhi syarat untuk menerima uji coba gratis lainnya ke Tingkat 2, sehingga ia tidak dikenai biaya untuk 37,5 hari berikutnya. Mulai 22 Mei, ia dikenai biaya $20 setiap bulan.IMMEDIATE_AND_CHARGE_PRORATED_PRICE
- Mode ini dapat digunakan karena harga langganan Tingkat 2 per unit waktu ($20/bulan) lebih besar daripada harga langganan Tingkat 1 per unit waktu ($10/bulan). Langganan Tingkat 1 milik Maria akan langsung diupgrade ke Tingkat 2, dan dia akan kehilangan uji coba gratisnya. Karena tanggal penagihan berikutnya untuk Maria adalah 1 Mei, ia dikenai biaya $10 hari ini untuk membayar paruh kedua di bulan April, lalu mulai 1 Mei, ia dikenai biaya $20 setiap bulan.IMMEDIATE_WITHOUT_PRORATION
- Langganan Tingkat 1 milik Maria akan langsung diupgrade ke Tingkat 2. Maria tetap memiliki uji coba gratisnya hingga 30 April dan kini memiliki akses ke Tingkat 2.DEFERRED
- Langganan Tingkat 1 milik Maria berlanjut hingga pembayaran berikutnya jatuh tempo pada 1 Mei. Pada 1 Mei, langganan Tingkat 2 mulai berlaku dan Maria dikenai biaya $20 pada tanggal 1 setiap bulan.IMMEDIATE_AND_CHARGE_FULL_PRICE
- Langganan Tingkat 1 milik Maria akan langsung diupgrade ke Tingkat 2, dan dia akan kehilangan uji coba gratisnya. Ia dikenai biaya sebesar $20 hari ini. Karena Maria memiliki 15 hari lagi dalam uji coba gratisnya, tanggal penagihan berikutnya adalah 1 bulan + 15 hari dari sekarang, atau 1 Juli. Mulai 1 Juli, ia dikenai biaya $20 setiap bulan.
Rekomendasi penghitungan prorata
Tabel berikut menunjukkan berbagai skenario penghitungan prorata serta rekomendasi kami untuk setiap skenario:
Skenario | Mode penghitungan prorata yang direkomendasikan | Hasil |
---|---|---|
Melakukan upgrade ke tingkat yang lebih mahal | IMMEDIATE_AND_CHARGE_PRORATED_PRICE |
Pengguna akan langsung menerima akses dengan tetap memiliki periode penagihan yang sama. |
Melakukan downgrade ke tingkat yang lebih murah | DEFERRED |
Pengguna sudah membeli tingkat yang lebih mahal, jadi mereka tetap memiliki akses hingga tanggal penagihan berikutnya. |
Mengubah periode pengulangan di tingkat yang sama (misalnya, bulanan menjadi tahunan) | DEFERRED |
Pengguna akan membayar dengan harga pengulangan yang baru pada tanggal penagihan berikutnya. |
Melakukan upgrade saat sedang dalam uji coba gratis dan tetap memiliki akses ke uji coba | IMMEDIATE_WITHOUT_PRORATION |
Pengguna tetap memiliki akses uji coba gratis, tetapi melakukan upgrade ke tingkat yang lebih tinggi selama sisa periode uji coba tersebut. |
Melakukan upgrade saat sedang dalam uji coba gratis, tetapi mengakhiri akses ke uji coba gratis | IMMEDIATE_AND_CHARGE_PRORATED_PRICE |
Pengguna akan langsung menerima akses ke tingkat baru, tetapi tidak lagi memiliki akses uji coba gratis. |
Pengelolaan pelanggan
Dengan menggunakan Notifikasi developer real time, Anda dapat mendeteksi secara real time saat pengguna memutuskan untuk melakukan pembatalan. Saat pengguna melakukan pembatalan sebelum masa berlaku langganannya berakhir, Anda dapat mengirimkan notifikasi push atau pesan dalam aplikasi untuk meminta mereka berlangganan lagi.
Setelah pengguna membatalkan langganannya, Anda dapat mencoba menarik kembali mereka, baik di aplikasi maupun melalui Play Store. Tabel berikut ini menjelaskan berbagai skenario langganan beserta tindakan menarik kembali pelanggan dan persyaratan aplikasi terkait.
Sebelum akhir masa berlaku langganan | Setelah akhir masa berlaku langganan | |||
Dalam aplikasi | Di Play Store | Dalam aplikasi | Di Play Store | |
Fitur menarik kembali pelanggan | Langganan dalam aplikasi | Pulihkan | Langganan dalam aplikasi | Berlangganan lagi |
Pengguna melalui alur pembayaran | Ya | Tidak | Ya | Ya |
Langganan pengguna tetap terkait dengan SKU yang sama | Pengguna dapat mendaftar untuk SKU yang sama maupun berbeda | Ya | Pengguna dapat mendaftar untuk SKU yang sama maupun berbeda | Ya |
Membuat token pembelian baru | Ya | Tidak | Ya | Ya |
Diaktifkan secara default | Tidak | Ya, semua developer perlu mendukungnya | Tidak |
Aplikasi tanpa Library Penagihan 2.0 atau yang lebih tinggi: Tidak Aplikasi dengan Library Penagihan 2.0 atau yang lebih tinggi: Ya. Developer dapat memilih untuk tidak ikut di Konsol. |
Saat pengguna ditagih |
Jika menggunakan SKU yang sama: akhir periode penagihan saat ini. Jika menggunakan SKU yang berbeda: bergantung pada mode penghitungan prorata. |
Akhir periode penagihan saat ini | Segera | Segera |
Perlu implementasi | Sediakan UI pendaftaran ulang di aplikasi Anda |
Deteksi perubahan dalam status langganan Sediakan deep link ke Play Store |
Sediakan UI pendaftaran ulang di aplikasi Anda | Tangani pembelian di luar aplikasi |
Sebelum akhir masa berlaku langganan - dalam aplikasi
Untuk langganan yang telah dibatalkan tetapi masa berlakunya belum habis, Anda dapat mengizinkan pelanggan memulihkan langganan di aplikasi dengan menerapkan alur pembelian produk dalam aplikasi yang sama seperti alur untuk pelanggan baru. Pastikan UI menunjukkan bahwa pengguna sudah memiliki langganan. Misalnya, Anda mungkin ingin menampilkan tanggal habis masa berlaku saat ini dan harga berulang kepada pengguna dengan tombol Aktifkan kembali.
Biasanya, Anda mungkin menawarkan harga dan SKU yang sama dengan langganan saat ini, sebagai berikut:
- Memulai pembelian langganan baru dengan SKU yang sama.
- Langganan baru akan menggantikan langganan yang lama dan akan diperpanjang pada tanggal habis masa berlaku yang sama. Langganan lama akan langsung ditandai sebagai sudah tidak berlaku.
- Misalnya, Ardian memiliki langganan Aplikasi Musik Contoh dan langganan ini akan habis masa berlakunya pada 1 Agustus. Pada 10 Juli, ia berlangganan lagi selama satu bulan dengan harga yang sama setiap bulannya. Langganan baru akan dihitung secara prorata dengan sisa kredit, langsung diaktifkan, dan masih diperpanjang pada 1 Agustus.
Jika Anda ingin menawarkan harga yang berbeda, misalnya uji coba gratis baru atau diskon untuk menarik kembali pelanggan, Anda dapat menawarkan SKU yang berbeda kepada pengguna:
- Mulai upgrade atau downgrade dengan SKU yang berbeda menggunakan
mode penghitungan prorata
IMMEDIATE_WITHOUT_PRORATION
. - Langganan baru akan menggantikan langganan yang lama dan akan diperpanjang pada tanggal habis masa
berlaku yang sama. Pengguna dikenai harga SKU baru, termasuk
harga perkenalan, pada tanggal habis masa berlaku semula. Jika langganan lama
dibuat menggunakan ID akun yang di-obfuscate, ID yang sama tersebut harus diteruskan
ke
BillingFlowParams
untuk upgrade dan downgrade. - Misalnya, Ardian memiliki langganan Aplikasi Musik Contoh dan langganan ini akan habis masa berlakunya pada 1 Agustus. Pada 10 Juli, ia berlangganan lagi ke langganan tahunan dengan harga perkenalan. Langganan baru akan segera aktif, dan pengguna akan dikenai harga perkenalan pada 1 Agustus.
- Jika Anda memutuskan untuk menyertakan uji coba gratis atau harga perkenalan dalam SKU penarikan kembali pelanggan, pastikan pengguna memenuhi syarat dengan menghapus centang pada kotak Izinkan satu uji coba gratis per aplikasi di Konsol Google Play, yang membatasi pengguna agar hanya menerima satu uji coba gratis per aplikasi.
Setelah menerima token pembelian,
proses pembelian seperti yang biasa Anda
lakukan pada langganan baru. Selain itu, Google Play Developer API akan menampilkan
linkedPurchaseToken
di resource langganan. Pastikan untuk
membatalkan validasi token yang disediakan
di linkedPurchaseToken
guna memastikan bahwa token yang lama tidak digunakan untuk mendapatkan
akses ke layanan Anda.
Sebelum akhir masa berlaku langganan - di Play Store
Saat langganan telah dibatalkan, tetapi masih aktif, pengguna dapat memulihkannya di pusat langganan Google Play dengan mengklik Berlangganan lagi (sebelumnya Pulihkan). Tindakan ini akan mempertahankan token langganan dan pembelian yang sama.

Untuk informasi selengkapnya tentang pemulihan langganan, lihat Pemulihan.
Setelah akhir masa berlaku langganan - dalam aplikasi
Anda dapat mengizinkan pelanggan yang sudah habis masa berlakunya untuk berlangganan lagi dalam aplikasi dengan menerapkan alur pembelian produk dalam aplikasi yang sama seperti untuk pelanggan baru. Perhatikan hal berikut:
- Untuk menawarkan diskon kepada pengguna, Anda dapat menawarkan ID produk dengan harga khusus untuk langganan Anda, yang juga disebut SKU penarikan kembali pelanggan. Anda dapat memberikan penawaran dalam aplikasi, atau memberi tahu pengguna tentang penawaran tersebut di luar aplikasi, seperti di email.
- Untuk mulai menarik kembali pelanggan, luncurkan alur pembelian di aplikasi Android Anda menggunakan Library Layanan Penagihan Google Play. Ini adalah proses yang sama dengan langganan baru, bedanya Anda dapat menentukan SKU yang tersedia untuk pengguna.
- Jika Anda memutuskan untuk menyertakan uji coba gratis atau harga perkenalan dalam SKU penarikan kembali pelanggan, pastikan pengguna memenuhi syarat dengan menghapus centang pada kotak Izinkan satu uji coba gratis per aplikasi di Konsol Google Play, yang membatasi pengguna agar hanya menerima satu uji coba gratis per aplikasi.
- Jika pengguna berlangganan lagi dengan SKU yang sama, mereka tidak lagi memenuhi syarat untuk uji coba gratis atau harga perkenalan. Pastikan UI menunjukkan hal tersebut.
Setelah menerima token pembelian,
proses pembelian seperti yang biasa Anda
lakukan pada langganan baru. Anda tidak akan menerima linkedPurchaseToken
di resource langganan.
Setelah akhir masa berlaku langganan - di Play Store
Jika diaktifkan, pengguna dapat berlangganan kembali ke SKU yang sama hingga satu tahun setelah masa berlaku berakhir dengan mengklik Berlangganan lagi di pusat langganan Google Play. Tindakan ini akan menghasilkan token pembelian dan langganan baru.

Berlangganan lagi dianggap sebagai pembelian di luar aplikasi, jadi pastikan untuk mengikuti praktik terbaik dalam menangani pembelian yang dilakukan dari luar aplikasi.
Mempromosikan langganan
Anda dapat membuat kode promosi untuk memberikan uji coba gratis yang diperpanjang ke langganan yang sudah ada kepada pengguna terpilih. Untuk mempelajari lebih lanjut, lihat Kode promo.
Untuk uji coba gratis, Google Play memverifikasi bahwa pengguna memiliki metode pembayaran yang valid sebelum memulai uji coba gratis. Beberapa pengguna mungkin mengira verifikasi ini sebagai penangguhan atau penagihan pada metode pembayaran mereka. Penangguhan atau penagihan ini bersifat sementara dan akan dibatalkan atau dikembalikan dananya.
Setelah periode uji coba berakhir, metode pembayaran pengguna akan ditagih sebesar biaya langganan penuh.
Jika pengguna membatalkan langganan kapan saja selama periode uji coba gratis, langganan akan tetap aktif hingga periode uji coba berakhir dan pengguna tidak dikenai biaya saat periode uji coba gratis berakhir.
Membatalkan, mengembalikan dana, atau mencabut
Anda dapat menggunakan Google Play Developer API untuk membatalkan, mengembalikan dana, atau mencabut langganan. Fungsi ini juga tersedia di Konsol Google Play.
- Batal: Pengguna dapat membatalkan langganan di Google Play. Anda juga dapat memberikan opsi bagi pengguna untuk membatalkan langganan di aplikasi atau situs Anda. Aplikasi harus menangani pembatalan ini seperti yang dijelaskan dalam Pencabutan.
- Kembalikan dana: Saat Anda melakukan pengembalian dana, pengguna dapat tetap menggunakan langganan. Pengembalian dana dapat digunakan, misalnya, jika ada kesalahan teknis yang mengakibatkan pengguna tidak dapat mengakses produk Anda, tetapi kesalahan tersebut telah diperbaiki. Untuk mengembalikan dana yang lebih besar dari pembayaran terakhir atau melakukan pengembalian dana sebagian, Anda harus menggunakan Konsol Google Play.
- Cabut: Jika Anda mencabut langganan, pengguna akan langsung kehilangan akses ke langganan. Tindakan ini dapat digunakan, misalnya, jika terdapat kesalahan teknis yang mengakibatkan pengguna tidak dapat mengakses produk Anda dan pengguna tidak ingin melanjutkan penggunaan produk tersebut. Aplikasi harus menangani pembatalan ini seperti yang dijelaskan di Pencabutan.
Tabel berikut menjelaskan perbedaan antara pembatalan, pengembalian dana, dan pencabutan.
Menghentikan perpanjangan | Kembalikan dana | Cabut akses | |
Batal | Ya | Tidak | Tidak |
Kembalikan dana | Tidak | Ya | Tidak |
Cabut | Ya | Ya | Ya |
Menunda penagihan untuk pelanggan
Anda dapat memajukan tanggal penagihan berikutnya untuk pelanggan yang memperpanjang otomatis menggunakan
Purchases.subscriptions:defer
dari Google Play Developer API. Selama periode penundaan, pengguna
berlangganan konten Anda dengan akses penuh tanpa dikenai biaya. Tanggal
perpanjangan langganan akan diperbarui untuk menunjukkan tanggal yang baru.
Untuk paket prabayar, Anda dapat menggunakan defer billing API untuk menunda waktu habis masa berlaku.
Penagihan yang ditunda memungkinkan Anda melakukan hal berikut:
- Memberikan akses gratis kepada pengguna sebagai penawaran spesial, seperti memberikan satu minggu pembelian film secara gratis.
- Memberikan akses gratis kepada pelanggan sebagai bentuk kepedulian.
Penagihan dapat ditunda selama minimal satu hari dan maksimal satu tahun per panggilan API. Untuk menunda penagihan lebih lama lagi, Anda dapat memanggil ulang API sebelum tanggal penagihan baru tiba.
Misalnya, Dessy memiliki langganan bulanan konten online untuk aplikasi Fishing Quarterly. Ia biasanya ditagih £1,25 pada tanggal 1 setiap bulan. Pada bulan Maret, ia mengikuti survei online untuk penerbit aplikasi. Penerbit memberinya bonus enam minggu gratis dengan menunda pembayaran berikutnya hingga 15 Mei, yaitu enam minggu setelah tanggal penagihan terjadwal sebelumnya pada 1 April. Dessy tidak ditagih untuk bulan April atau awal Mei, dan masih dapat mengakses konten. Pada tanggal 15 Mei, ia ditagih dengan biaya langganan normal sebesar £1,25 untuk bulan tersebut. Tanggal perpanjangan langganan berikutnya adalah 15 Juni.
Saat menunda, Anda mungkin ingin memberi tahu pengguna melalui email atau dalam aplikasi untuk memberi tahu bahwa tanggal penagihan mereka telah berubah.
Mengubah harga langganan
Anda dapat mengubah harga penawaran dan paket dasar langganan. Misalnya, Anda mungkin memiliki produk digital yang memerlukan penyesuaian harga tahunan, atau Anda dapat mengubah serangkaian manfaat untuk produk dan ingin mencerminkan perubahan tersebut pada harga.
Untuk mengetahui informasi cara mengubah harga langganan menggunakan Konsol Play, lihat dokumentasi di Pusat Bantuan Konsol Play.
Mengelola perubahan harga untuk pembelian baru
Jika Anda mengubah harga paket dasar atau penawaran, harga baru akan berlaku dalam beberapa jam untuk semua pembelian baru tanpa Anda harus melakukan tindakan tambahan. Pembelian baru dapat berupa salah satu dari hal berikut:
- Pengguna yang saat ini tidak memiliki langganan di aplikasi Anda.
- Pengguna yang telah membeli paket perpanjangan otomatis yang sudah ada, tetapi sekarang membeli paket lain, seperti periode penagihan yang lebih lama atau tingkat layanan yang lebih tinggi.
- Pengguna dengan paket prabayar yang membeli penambahan saldo.
Anda harus memproses pembelian baru seperti pembelian lainnya.
Mengelola perubahan harga untuk pembelian paket langganan dengan perpanjangan otomatis yang sudah ada
Anda dapat mengubah harga paket dasar dengan perpanjangan otomatis kapan saja. Secara default, pelanggan lama tidak akan terpengaruh. Pelanggan tersebut ditempatkan dalam kohor harga lama, yang berarti mereka tetap membayar harga paket dasar awal saat memperpanjang. Anda dapat memilih untuk mengakhiri kohor kapan saja dan memindahkan pengguna tersebut ke harga paket dasar saat ini.
Demikian pula, perubahan harga untuk penawaran spesial dan fase harga tertentu tidak akan memengaruhi pelanggan lama. Pelanggan tersebut tetap membayar harga yang mereka lihat saat membeli langganan.
Untuk informasi selengkapnya tentang penggunaan kohor harga lama, lihat Pusat Bantuan Konsol Play.
Mengubah harga langganan dengan Google Play Developer API
Untuk mengubah harga paket dasar langganan secara terprogram, gunakan metode
monetization.subscriptions.patch
. Metode ini menerima objek
Subscription
dengan konfigurasi produk langganan
yang sedang diubah. Tetapkan harga baru dalam objek RegionalBasePlanConfig
di bagian paket dasar yang benar dalam koleksi basePlans
langganan.
Cara ini dapat sangat berguna jika Anda memiliki katalog yang cukup besar dan perlu melakukan
pembaruan pada semua produk Anda dalam waktu singkat, atau jika Anda memiliki sistem pengelolaan
katalog produk yang otomatis membuat perubahan pada produk
langganan Layanan Penagihan Google Play saat terjadi perubahan.
Untuk mengubah harga paket dasar di Konsol Play, lihat Pusat Bantuan Konsol Play.
Mengakhiri kohor harga lama
Mengakhiri kohor harga lama akan memindahkan pengguna yang membayar harga lama paket dasar dengan perpanjangan otomatis ke harga paket dasar saat ini. Untuk mengakhiri harga lama di Konsol Play, lihat Pusat Bantuan Konsol Play.
Mengakhiri kohor harga lama dengan Google Play Developer API
Untuk mengakhiri kohor harga lama secara terprogram, gunakan metode
monetization.subscriptions.basePlans.migratePrices
.
Metode ini akan memigrasikan pelanggan yang menerima harga langganan
historis ke harga paket dasar saat ini untuk wilayah yang ditentukan. Metode ini akan
memicu notifikasi perubahan harga agar dikirim kepada pengguna yang saat ini
menerima harga historis yang lebih lama dari stempel waktu yang diberikan. Langganan
akan diakhiri pada perpanjangan berikutnya untuk pelanggan yang tidak menyetujui
harga baru.
Waktu mulai berlaku perubahan harga
Saat Anda mengakhiri kohor harga lama, proses untuk memindahkan pengguna ini ke harga paket dasar saat ini akan dimulai. Untuk kenaikan dan penurunan harga, Play akan menyampaikan perubahan harga yang akan datang kepada pengguna ini.
Penurunan Harga
Jika harga paket dasar saat ini lebih rendah, Play akan memberi tahu pengguna melalui email, dan pengguna akan membayar harga paket dasar yang lebih rendah terlebih dahulu pada tanggal perpanjangan berikutnya.
Kenaikan Harga
Jika harga paket dasar saat ini lebih tinggi, Play akan memberi tahu pengguna melalui email dan notifikasi push, lalu pengguna akan ditagih dengan harga yang lebih tinggi terlebih dahulu pada tanggal perpanjangan setelah periode pemberitahuan awal. Periode ini bervariasi menurut wilayah, bisa selama 37 hari atau 67 hari.
Pengguna harus menyetujui harga yang lebih tinggi selama periode pemberitahuan awal di Play Store sebelum tagihan pertama dengan harga baru. Jika tidak, Play akan otomatis membatalkan langganan mereka. Play memberi tahu pengguna melalui email dan notifikasi push 1 hari, 30 hari, dan, di beberapa wilayah, 60 hari sebelum tagihan pertama.
Menyampaikan perubahan harga kepada pengguna
Anda harus memberi tahu pelanggan lama setiap kali mengubah harga paket dasar mereka atau mengakhiri harga kohor lama mereka. Untuk kenaikan harga, Anda harus memberikan pemberitahuan awal dan memberi tahu pengguna tentang perlunya menyetujui kenaikan harga tersebut.
Saat menaikkan harga langganan, Anda memiliki minimal tujuh hari setelah mengakhiri kohor lama untuk memberi tahu pelanggan lama tentang perubahan harga sebelum Google Play mulai memberi tahu mereka secara langsung. Selama periode ini, Anda dapat secara efektif membatalkan kenaikan harga yang tertunda dengan membuat perubahan kembali ke harga awal. Anda juga dapat memberi tahu pengguna yang terpengaruh sebelum Play melakukannya.
Dalam aplikasi Anda, sebaiknya beri tahu pengguna yang terpengaruh dan berikan deep link ke layar langganan Play Store untuk membantu mereka menerima harga baru dengan mudah.
Pengguna dapat meninjau kenaikan harga di layar langganan Play Store, yang menampilkan dialog serupa dengan gambar 13.

Contoh
Contoh 1 (langganan bulanan): Pada 3 Maret, SuperStreamz menaikkan harga untuk SuperStreamz Pro, langganan streaming video premium, dengan kenaikkan harga dari $1 per bulan menjadi $2. Tanggal mulai berlaku perubahan harga adalah 9 April (37 hari setelah 3 Maret).
- Anita adalah pelanggan lama yang memiliki perpanjangan berikutnya pada 5 Maret. Perpanjangan pertama setelah tanggal mulai berlaku adalah 5 Mei, sehingga dia melakukan perpanjangan pada 5 Maret dan 5 April dengan harga lama ($1). Saat melakukan perpanjangan lagi pada 5 Mei, dia akan ditagih harga baru ($2). Google Play mulai memberi tahu Anita tentang perubahan harga pada 5 April, yaitu 30 hari sebelum tanggal perpanjangan pertama dengan harga baru.
- Bambang adalah pelanggan lama yang memiliki perpanjangan berikutnya pada 29 Maret. Dia memperpanjang pada 29 Maret dengan harga lama ($1), karena perubahan harga belum berlaku. Saat memperpanjang kembali pada 29 April, dia akan ditagih harga baru ($2). Dia mulai menerima notifikasi perubahan harga pada 30 Maret, yaitu 30 hari sebelum tanggal perpanjangan pertama dengan harga baru.
Contoh 2 (langganan 3 bulanan): Pada 3 Maret, FindMyLove menaikkan biaya 3 bulanan untuk FindMyLove Premium dari $1 menjadi $2. Tanggal mulai berlaku perubahan harga adalah 9 April (37 hari setelah 3 Maret).
- Anita adalah pelanggan lama yang memiliki perpanjangan berikutnya pada 5 Maret. Anita memperpanjang dengan harga lama ($1), karena perubahan harga belum berlaku. Saat melakukan perpanjangan lagi pada 5 Juni, dia akan dikenai biaya baru ($2). Dia mulai menerima notifikasi tentang perubahan harga pada 6 Mei, yaitu 30 hari sebelum tanggal perpanjangan pertama dengan harga baru.
- Bambang adalah pelanggan lama yang memiliki perpanjangan berikutnya pada 11 April. Bambang memperpanjang dengan harga baru ($2), karena sudah melewati tanggal mulai berlaku. Dia mulai menerima notifikasi perubahan harga pada 12 Maret, yaitu 30 hari sebelum tanggal perpanjangan pertama dengan harga baru.
Contoh 3 (langganan mingguan): Pada 3 Maret, CutePetsNews menaikkan biaya mingguan untuk Weekly Dog Alerts dari $1 menjadi $2. Tanggal mulai berlaku perubahan harga adalah 9 April.
- Anita adalah pelanggan lama yang memiliki perpanjangan mingguan berikutnya pada 6 Maret. Dia memperpanjang pada 6 Maret, 13 Maret, 20 Maret, 27 Maret, dan 3 April dengan harga lama ($1), karena perubahan harga belum berlaku. Saat melakukan perpanjangan lagi pada 10 April, dia akan ditagih harga baru ($2). Dia mulai menerima notifikasi tentang perubahan harga pada 11 Maret, yaitu 30 hari sebelum tanggal perpanjangan pertama dengan harga baru.
Contoh 4 (langganan bulanan, beberapa perubahan harga): Contoh ini menunjukkan cara penanganan beberapa perubahan harga.
Pada 3 Maret, SuperStreamz mengaktifkan kenaikan harga untuk SuperStreamz Pro, langganan streaming video premium mereka, dengan menaikkan harga dari $1 menjadi $2 per bulan. Pada 10 Maret, developer mengubah harga lagi dari $2/bulan menjadi $3/bulan.
Tanggal mulai berlaku perubahan harga pertama adalah 9 April (37 hari setelah 3 Maret). Tanggal mulai berlaku perubahan harga kedua adalah 16 April (37 hari setelah 10 Maret).
- Perpanjangan Anita berikutnya adalah 5 Maret. Perpanjangan pertama setelah tanggal mulai berlaku adalah 5 Mei, sehingga dia melakukan perpanjangan pada 5 Maret dan 5 April dengan harga lama ($1). Saat melakukan perpanjangan lagi pada 5 Mei, dia akan ditagih harga baru ($2). Dia mulai menerima notifikasi tentang perubahan harga pada 5 April, yaitu 30 hari sebelum tanggal perpanjangan pertama dengan harga baru.
Menangani konfirmasi pengguna atas perubahan harga
Saat pengguna menyetujui kenaikan harga langganan, Anda akan menerima
SubscriptionNotification
dengan jenis
SUBSCRIPTION_PRICE_CHANGED_CONFIRMED
. Dengan penurunan harga jika pelanggan tidak menyetujui perubahan atau saat
kenaikan harga langganan diperpanjang, Anda akan menerima
SubscriptionNotification
dengan jenis SUBSCRIPTION_RENEWED
.
Anda harus memproses notifikasi ini seperti perpanjangan lainnya.
Menangani kenaikan harga yang tidak disetujui
Jika pengguna belum menyetujui kenaikan harga sebelum mereka harus melakukan perpanjangan dengan
harga yang lebih tinggi, mereka akan otomatis berhenti berlangganan, dan Anda akan menerima
SubscriptionNotification
dengan jenis SUBSCRIPTION_CANCELED
.
Peristiwa ini dapat ditangani seperti yang dijelaskan di Pembatalan.
Perubahan harga yang tidak disengaja
Jika Anda tidak sengaja mengubah harga langganan, segera batalkan perubahan tersebut. Selama perubahan harga dibatalkan dalam waktu tujuh hari, pelanggan lama tidak akan diberi tahu tentang perubahan harga yang tidak disengaja. Perhatikan bahwa pelanggan baru mungkin menerima harga yang tidak sengaja diubah dalam jangka waktu antara perubahan harga pertama dan pembatalan pada perubahan harga.
Menangani dua perubahan harga secara berturut-turut
Jika Anda mengubah harga langganan dua kali dalam periode tujuh hari, pengguna yang terpengaruh hanya perlu menyetujui perubahan harga terakhir. Misalnya, jika Anda telah mengakhiri kohor harga lama dengan kenaikan harga, lalu mengubah harga lagi, setiap pengguna yang memenuhi syarat tidak perlu lagi merespons perubahan harga pertama, karena hanya perubahan harga kedua yang sekarang berlaku.
Anda harus memastikan bahwa perubahan harga hanya dilakukan sekali dalam satu waktu. Anda tidak boleh mengubah harga pengguna untuk tujuan pengujian.
Menangani penolakan pembayaran
Jika ada masalah pembayaran pada akhir siklus penagihan, Google akan mencoba memperpanjang langganan secara berkala selama beberapa waktu sebelum membatalkan. Periode percobaan ulang ini dapat berlangsung hingga 30 hari ditambah jangka waktu masa tenggang yang ditentukan. Selama jangka waktu ini, Google juga akan mengirimkan email dan notifikasi kepada pengguna untuk meminta mereka memperbarui metode pembayaran.
Setelah pembayaran ditolak, langganan akan memasuki masa tenggang terlebih dahulu, jika diaktifkan. Selama masa tenggang, pengguna masih memiliki akses ke langganan.
Setelah masa tenggang berakhir, langganan memasuki penangguhan akun hingga 30 hari. Selama penangguhan akun, Anda dapat memblokir akses ke langganan.
Untuk memaksimalkan kemungkinan pemulihan langganan selama penolakan pembayaran, Anda dapat memberi tahu pengguna tentang masalah pembayaran dan meminta mereka untuk memperbaikinya.
Anda dapat melakukannya sendiri, seperti yang dijelaskan di bagian masa tenggang dan penangguhan akun, atau Anda dapat menerapkan in-app messaging API, di mana Google akan menampilkan pesan kepada pengguna di aplikasi Anda.
In-app messaging
Jika Anda telah mengaktifkan in-app messaging dengan
InAppMessageCategoryId.TRANSACTIONAL
,
Google Play akan menampilkan pesan kepada pengguna selama masa tenggang dan penangguhan akun sekali
per hari dan memberi mereka peluang untuk memperbaiki pembayaran tanpa keluar dari aplikasi.

Sebaiknya Anda memanggil API ini setiap kali pengguna membuka aplikasi untuk menentukan apakah pesan harus ditampilkan.
Jika pengguna berhasil memulihkan langganannya, Anda akan menerima kode respons
SUBSCRIPTION_STATUS_UPDATED
beserta token pembelian. Kemudian Anda harus menggunakan token pembelian ini untuk memanggil
Google Play Developer API dan memperbarui status langganan di aplikasi Anda.
Mengintegrasikan in-app messaging
Untuk menampilkan in-app messaging kepada pengguna, gunakan
BillingClient.showInAppMessages()
.
Berikut adalah contoh yang memicu alur in-app messaging:
Kotlin
val inAppMessageParams = InAppMessageParams.newBuilder() .addInAppMessageCategoryToShow(InAppMessageCategoryId.TRANSACTIONAL) .build() billingClient.showInAppMessages(activity, inAppMessageParams, object : InAppMessageResponseListener() { override fun onInAppMessageResponse(inAppMessageResult: InAppMessageResult) { if (inAppMessageResult.responseCode == InAppMessageResponseCode.NO_ACTION_NEEDED) { // The flow has finished and there is no action needed from developers. } else if (inAppMessageResult.responseCode == InAppMessageResponseCode.SUBSCRIPTION_STATUS_UPDATED) { // The subscription status changed. For example, a subscription // has been recovered from a suspend state. Developers should // expect the purchase token to be returned with this response // code and use the purchase token with the Google Play // Developer API. } } })
Java
InAppMessageParams inAppMessageParams = InAppMessageParams.newBuilder() .addInAppMessageCategoryToShow(InAppMessageCategoryId.TRANSACTIONAL) .build(); billingClient.showInAppMessages(activity, inAppMessageParams, new InAppMessageResponseListener() { @Override public void onInAppMessageResponse(InAppMessageResult inAppMessageResult) { if (inAppMessageResult.responseCode == InAppMessageResponseCode.NO_ACTION_NEEDED) { // The flow has finished and there is no action needed from developers. } else if (inAppMessageResult.responseCode == InAppMessageResponseCode.SUBSCRIPTION_STATUS_UPDATED) { // The subscription status changed. For example, a subscription // has been recovered from a suspend state. Developers should // expect the purchase token to be returned with this response // code and use the purchase token with the Google Play // Developer API. } } });