Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

Menjual langganan

Topik ini menjelaskan cara menangani peristiwa siklus proses langganan, seperti perpanjangan dan masa berlaku. Topik ini juga menjelaskan fitur langganan tambahan, seperti menawarkan promosi dan memungkinkan pengguna Anda mengelola langganan mereka 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 Anda.

Jika Anda belum mengonfigurasi produk langganan untuk aplikasi, lihat Membuat dan mengonfigurasi produk.

Menangani siklus proses langganan

Langganan dapat melalui berbagai perubahan status pada siklus prosesnya dan aplikasi Anda perlu merespons setiap perubahan. Untuk memeriksa status pelanggan, aplikasi Anda dapat membuat kueri menggunakan BillingClient.queryPurchases() di Library Layanan Penagihan Google Play atau Purchases.subscriptions:get di Google Play Developer API.

BillingClient.queryPurchases() Purchases.subscriptions:get
Status Dikembalikan? isAutoRenewing Dikembalikan? expiryTimeMillis paymentState autoRenewing
Aktif Ya Benar Ya Mendatang 1 (Pembayaran Diterima) Benar
Dibatalkan Ya Salah Ya Mendatang 1 (Pembayaran Diterima) Salah
Dalam masa tenggang Ya Benar Ya Mendatang 0 (Pembayaran Tertunda) Benar
Ditangguhkan Tidak T/A Ya Sudah lewat 0 (Pembayaran Tertunda) Benar
Dijeda Tidak T/A Ya Sudah lewat 1 (Pembayaran Diterima) Benar
Sudah Berakhir Tidak T/A Ya Sudah lewat 1 (Pembayaran Diterima) Salah

Jika aplikasi Anda menyimpan status langganan di server backend yang aman, aplikasi Anda harus merespons informasi tentang perubahan status menggunakan Notifikasi developer real time untuk memastikan status tetap sinkron. SubscriptionNotification dikirim untuk peristiwa yang memengaruhi status langganan seperti perpanjangan dan pembatalan. Anda perlu memanggil Developer API setelah menerima Notifikasi developer real time untuk mendapatkan status lengkap dan mengupdate status backend Anda sendiri. Notifikasi ini hanya memberi tahu Anda bahwa status langganan berubah. Informasi lengkap tentang semua status langganan tidak diberikan.

Aplikasi Anda perlu menangani perubahan status yang dijelaskan di bagian berikut.

Langganan baru

Pastikan Anda mengikuti rekomendasi kami untuk menangani pembelian baru. Saat langganan dibeli, langganan akan ditampilkan oleh BillingClient.queryPurchases(), dan notifikasi SUBSCRIPTION_PURCHASED akan dikirim. Saat menerima notifikasi ini, aplikasi Anda harus mengirimkan kueri ke Google Play Developer API untuk mendapatkan status langganan terbaru. Resource langganan terlihat mirip dengan contoh berikut:

{
  "kind": "androidpublisher#subscriptionPurchase",
  ...
  "expiryTimeMillis": next_renewal_date,
  "autoRenewing": true,
  ...
  "paymentState": 1  # Payment received
}

Perpanjangan

Jika langganan berhasil diperpanjang, langganan akan terus ditampilkan oleh BillingClient.queryPurchases().

Notifikasi SUBSCRIPTION_RENEWED juga dikirim saat langganan diperpanjang. Aplikasi Anda harus memastikan pengguna masih berhak menikmati langganannya, lalu mengupdate status langganan dengan expiryTimeMillis baru yang disediakan di resource langganan yang diperoleh dari Google Play Developer API. Resource langganan terlihat mirip dengan contoh berikut:

{
  "kind": "androidpublisher#subscriptionPurchase",
  ...
  "expiryTimeMillis": updated_expiration_time,
  "autoRenewing": true,
  ...
  "paymentState": 1  # Payment received
}

Berakhirnya masa berlaku

Setelah masa berlaku langganan berakhir, langganan tidak lagi ditampilkan di BillingClient.queryPurchases() dan pengguna akan kehilangan akses ke langganan.

Notifikasi SUBSCRIPTION_EXPIRED juga dikirim saat masa berlaku langganan berakhir. Saat menerima notifikasi ini, aplikasi Anda harus mengirimkan kueri ke Google Play Developer API untuk mendapatkan status langganan terbaru. Resource langganan terlihat mirip dengan contoh berikut:

{
  "kind": "androidpublisher#subscriptionPurchase",
  ...
  "expiryTimeMillis": expiry_time_in_past,
  "autoRenewing": false,
  ...
  "paymentState": 1  # Payment received
}

Pembatalan

Pengguna dapat membatalkan langganan secara sukarela dari Play Store atau langganan mereka akan dibatalkan secara otomatis jika mereka tidak memulihkannya setelah memasuki penangguhan akun. Saat pengguna membatalkan langganan, mereka mempertahankan akses ke konten tersebut hingga akhir siklus penagihan saat ini. Saat siklus penagihan berakhir, akses akan dicabut.

Jika langganan dibatalkan saat masa berlaku langganannya belum berakhir, langganan akan ditampilkan dari BillingClient.queryPurchases(). Membatalkan langganan akan memicu notifikasi SUBSCRIPTION_CANCELLED. Saat Anda menerima notifikasi ini, resource langganan yang ditampilkan dari Google Play Developer API berisi autoRenewing = false dan expiryTimeMillis berisi tanggal saat pengguna harus kehilangan akses ke langganan. Jika expiryTimeMillis sudah berakhir, pengguna akan langsung kehilangan hak kepemilikannya. Jika tidak, pengguna akan tetap memegang kepemilikan hak hingga masa berlakunya habis. Resource langganan terlihat mirip dengan contoh berikut:

{
  "kind": "androidpublisher#subscriptionPurchase",
  ...
  "expiryTimeMillis": expiry_time,
  "autoRenewing": false,
  ...
  "paymentState": 1  # Payment received
  "cancelReason": integer # Reason the subscription was cancelled: user, billing issue, etc.
}

Aplikasi Anda dapat melihat cancelReason di resource langganan yang diperoleh dari Google Play Developer API untuk mempelajari alasan pembatalan langganan (misalnya, pelanggan membatalkan atau mengalami masalah penagihan). Jika langganan dibatalkan oleh pengguna, aplikasi Anda dapat melihat kolom cancelSurveyResult untuk mengetahui alasan pengguna membatalkan langganan.

Aplikasi Anda mungkin perlu menampilkan pesan yang memberi tahu pengguna bahwa langganan mereka dibatalkan, seperti "Langganan Anda akan berakhir pada _tanggaltertentu. Aplikasi Anda juga dapat menautkan deep link ke Google Play Store agar pengguna dapat memulihkan langganan mereka.

Jika Anda menampilkan pesan ini, sebaiknya tawarkan juga opsi untuk menolak pesan secara permanen kepada pengguna.

Selain itu, perhatikan bahwa pesan pembatalan mungkin menjengkelkan bagi pengguna, terutama bagi 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 langganan yang dicabut oleh aplikasi Anda menggunakan Purchases.subscriptions:revoke atau karena penagihan balik pada pembelian. Dalam situasi ini, aplikasi Anda harus segera mencabut hak dari pengguna. Langganan yang dicabut tidak lagi ditampilkan dari BillingClient.queryPurchases(). Notifikasi SUBSCRIPTION_REVOKED juga dikirim jika hal ini terjadi. Saat Anda menerima notifikasi ini, resource langganan yang ditampilkan dari Google Play Developer API berisi autoRenewing = false dan expiryTimeMillis berisi tanggal saat pengguna harus kehilangan akses ke langganan. Resource langganan terlihat mirip dengan contoh berikut:

{
  "kind": "androidpublisher#subscriptionPurchase",
  ...
  "expiryTimeMillis": expiry_time_in_past,
  "autoRenewing": false,
  ...
  "paymentState": 1  # Payment received
}

Penangguhan akun

Penangguhan akun adalah status langganan yang dimulai ketika metode pembayaran pengguna gagal dan semua masa tenggang yang terkait telah berakhir tanpa resolusi pembayaran. Saat langganan memasuki penangguhan akun, Anda harus membatasi akses ke konten atau layanan Anda. Masa penangguhan akun berlangsung hingga 30 hari.

Untuk mengaktifkan penangguhan akun, lakukan langkah berikut:

  1. Login ke Konsol Google Play
  2. Pilih aplikasi Anda.
  3. Di menu sebelah kiri, pilih Keberadaan toko > Produk dalam aplikasi.
  4. Pilih tab Langganan, lalu luaskan bagian Setelan langganan.
  5. Centang Aktifkan penangguhan akun.

Selama penangguhan akun, langganan tidak ditampilkan oleh BillingClient.queryPurchases().

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 yang berisi petunjuk tentang cara memperbaiki metode pembayaran mereka dan mendapatkan kembali akses ke langganan di aplikasi Anda. 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 Anda 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 Anda dapat memperbaiki masalah pembayaran, Anda dapat menampilkan pesan yang memberi tahu pengguna saat langganan mereka dipulihkan di aplikasi Anda. 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 notifikasi SUBSCRIPTION_ON_HOLD ketika langganan memasuki penangguhan akun. Hubungi Google Play Developer API dari server backend aman Anda untuk mendapatkan informasi langganan baru. Selama penangguhan akun, expiryTimeMillis resource langganan disetel ke stempel waktu yang lalu dan paymentState disetel ke 0:

{
  "kind": "androidpublisher#subscriptionPurchase",
  ...
  "expiryTimeMillis": timestamp_in_past,
  "autoRenewing": true,
  ...
  "paymentState": 0  # Payment pending
}

Setelah pengguna memperbaiki metode pembayaran, langganan akan dikembalikan ke status aktif, lalu Anda harus memulihkan akses ke konten langganan.

Jika aplikasi Anda hanya mengandalkan queryPurchases() untuk menentukan apakah pengguna memiliki hak atas langganan, maka aplikasi Anda harus menangani pemulihan langganan dari penangguhan akun secara otomatis.

Jika aplikasi Anda menyinkronkan status langganan dengan backend, aplikasi Anda harus memproses notifikasi SUBSCRIPTION_RECOVERED agar mendapatkan notifikasi saat langganan dipulihkan dan pengguna harus kembali mendapatkan aksesnya. Jika Anda membuat kueri langganan setelah menerima notifikasi ini, expiryTimeMillis akan disetel ke stempel waktu yang akan datang dan paymentState adalah 1:

{
  "kind": "androidpublisher#subscriptionPurchase",
  ...
  "expiryTimeMillis": timestamp_in_future,
  "autoRenewing": true,
  ...
  "paymentState": 1  # Payment received
}

Jika pengguna tidak memperbaiki metode pembayaran sebelum masa penangguhan akun berakhir, Anda akan menerima Notifikasi developer real time SUBSCRIPTION_CANCELLED. Untuk petunjuk tentang cara menangani pembatalan, lihat pembatalan langganan. Jika Anda membuat kueri langganan yang dibatalkan dengan cara ini, expiryTimeMillis yang dikembalikan disetel ke stempel waktu yang lalu dan cancelReason memiliki nilai 1:

{
  "kind": "androidpublisher#subscriptionPurchase",
  ...
  "expiryTimeMillis": timestamp_in_past,
  "autoRenewing": false,
  ...
  "cancelReason": 1  # The system cancelled the subscription
}

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 aplikasi Anda hanya mengandalkan queryPurchases() untuk memeriksa apakah pengguna memiliki hak atas langganan, maka aplikasi Anda harus menangani masa tenggang secara otomatis karena queryPurchases() akan terus menampilkan pembelian yang dibatalkan sebelum tanggal habis masa berlaku.

Jika aplikasi Anda menyinkronkan status langganan dengan backend, aplikasi Anda harus memproses Notifikasi developer real time SUBSCRIPTION_IN_GRACE_PERIOD agar mendapatkan notifikasi saat pengguna memasuki masa tenggang. Saat pengguna berada dalam masa tenggang, resource langganan berisi autoRenewing = true dan paymentState = 0 (misalnya, tertunda).

{
  "kind": "androidpublisher#subscriptionPurchase",
  ...
  "expiryTimeMillis": timestamp_in_future,
  "autoRenewing": true,
  ...
  "paymentState": 0  # Payment pending
}

Saat pengguna memasuki masa tenggang, berikan pesan yang memberitahukan cara memperbaiki metode pembayaran mereka di aplikasi Anda. 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 Anda dapat menangani perpanjangan seperti yang dijelaskan dalam perpanjangan.

Jika pengguna tidak memperbaiki metode pembayaran selama masa tenggang, langganan akan memasuki penangguhan akun jika diaktifkan. Jika tidak, langganan akan dibatalkan.

Langganan dijeda

Anda dapat mencegah churn sukarela dengan memungkinkan pengguna untuk menjeda langganan mereka. Saat Anda mengaktifkan fitur jeda, pengguna dapat memilih untuk menjeda langganan mereka 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. Perhatikan bahwa langganan tahunan tidak dapat dijeda dan batas jeda selama satu minggu dan tiga bulan dapat berubah sewaktu-waktu.

Agar pengguna dapat menjeda langganannya, lakukan langkah berikut:

  1. Login ke Konsol Google Play.
  2. Pilih aplikasi Anda, lalu buka Keberadaan toko > Produk dalam aplikasi > Langganan.
  3. Luaskan bagian Setelan langganan.
  4. Centang Aktifkan Jeda.

Jeda langganan hanya berlaku setelah periode penagihan saat ini berakhir. Selama periode 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 6:

Pengguna menjeda langganannya, lalu masuk ke penangguhan akun.
Gambar 6. Pengguna menjeda langganannya, lalu masuk ke penangguhan akun.

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

Pengguna menjeda langganan, lalu melanjutkannya
Gambar 7. Pengguna menjeda langganan, lalu melanjutkannya.

Jika langganan pengguna dijeda, langganan tidak akan ditampilkan oleh queryPurchases(). Jika langganan dilanjutkan, langganan akan ditampilkan oleh queryPurchases().

Jika aplikasi Anda menyinkronkan status langganan dengan server backend yang aman, aplikasi Anda harus merespons Notifikasi developer real time untuk mempertahankan status. Notifikasi ini juga memungkinkan Anda untuk memberi notifikasi kepada 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.

Notifikasi developer real time SUBSCRIPTION_PAUSE_SCHEDULE_CHANGED dikirim saat pengguna mulai menjeda langganan mereka. Saat ini, pengguna masih memiliki akses ke langganannya dan resource langganan berisi autoRenewing = true, paymentState = 1 (Pembayaran Diterima), serta nilai untuk expiryTimeMillis dan autoResumeTimeMillis di masa mendatang.

Notifikasi developer real time SUBSCRIPTION_PAUSED dikirim saat jeda mulai diberlakukan. Untuk saat ini, pengguna masih dapat mengakses langganan mereka, dan resource langganan berisi autoRenewing = true, dan paymentState = 0 (tertunda), nilai untuk autoResumeTimeMillis di masa mendatang, dan nilai untuk expiryTimeMillis waktu yang lalu.

Notifikasi developer real time 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.

Notifikasi developer real time 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 sampai tanggal habis masa berlakunya. Pengguna dapat memulihkan langganan yang dibatalkan sebelum habis masa berlakunya dengan mengeklik PULIHKAN di bagian Langganan di aplikasi Google Play Store.

akun, bagian langganan di aplikasi google play store
Gambar 1. Bagian Akun > Langganan di aplikasi Google Play Store.

Jika aplikasi Anda hanya mengandalkan queryPurchases() untuk menentukan apakah pengguna memiliki hak atas langganan, maka aplikasi Anda harus menangani pemulihan secara otomatis, karena queryPurchases() terus menampilkan pembelian yang dibatalkan sebelum tanggal habis masa berlaku. Langganan yang dipulihkan akan terus diperpanjang seolah-olah tidak dibatalkan.

Jika aplikasi Anda menyinkronkan status langganan dengan backend, aplikasi Anda harus merespons Notifikasi developer real time SUBSCRIPTION_RESTARTED. Setelah diterima, aplikasi Anda dapat merespons notifikasi, mencatat bahwa langganan kini disetel agar diperpanjang, dan berhenti menampilkan pesan pemulihan di aplikasi Anda. Resource langganan terlihat mirip dengan contoh berikut:

{
  "kind": "androidpublisher#subscriptionPurchase",
  ...
  "expiryTimeMillis": expiry_time_in_future,
  "autoRenewing": true,
  ...
  "paymentState": 1  # Payment received
}

Upgrade, downgrade, dan pendaftaran ulang

Saat pengguna mengupgrade, mendowngrade, atau berlangganan kembali, 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 telah diupgrade, didowngrade, atau dilanggan kembali oleh pengguna. Anda dapat menggunakan linkedPurchaseToken untuk mencari langganan lama dan mengidentifikasi akun pengguna lama sehingga Anda dapat mengaitkan pembelian baru dengan akun yang sama. Kami juga menyarankan untuk menggunakan Google Play Developer API untuk mengonfirmasi pembelian sehingga mempermudah pengguna. Resource langganan terlihat mirip dengan contoh berikut:

{
  "kind": "androidpublisher#subscriptionPurchase",
  ...
  "expiryTimeMillis": next_renewal_date,
  "autoRenewing": true,
  "linkedPurchaseToken": old_purchase_token
  ...
  "paymentState": 1  # Payment received
}

Sebagai developer, Anda harus memudahkan pelanggan untuk mengelola langganan mereka. Aplikasi Anda harus menyertakan link di layar preferensi atau setelan yang memungkinkan pengguna untuk mengelola langganan mereka. Contoh penyertaan link ini ditunjukkan pada gambar 2.

Tombol Langganan Google Play pada gambar ini merupakan
           contoh link 'kelola langganan'.
Gambar 2. Tombol Langganan Google Play merupakan contoh link "Kelola langganan".

Pada pengendali klik link ini, tambahkan logika untuk menentukan apakah pengguna memiliki langganan yang tidak belum habis masa berlakunya untuk aplikasi Anda (yang mana expiryTimeMillis di masa mendatang atauautoRenewing ditetapkan ke true.

Setiap SKU langganan cocok dengan ID produk yang Anda tetapkan saat membuat produk di Konsol Play. Untuk menentukan SKU langganan yang sudah ada secara terprogram, buat kueri backend aplikasi Anda untuk daftar langganan yang terkait dengan pengguna tertentu.

Jika pengguna memiliki langganan yang belum habis masa berlakunya, Anda dapat mengarahkan mereka ke URL yang mirip dengan URL berikut ini, dengan mengganti "id-produk-langganan-Anda" dan "paket-aplikasi-Anda" 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 belum habis dalam aplikasi Anda, gunakan URL berikut untuk mengarahkan mereka ke halaman yang menampilkan semua langganan mereka, seperti yang ditunjukkan pada gambar 3 dan 4:

https://play.google.com/store/account/subscriptions
Layar langganan Play Store menampilkan status untuk semua langganan

           pengguna.
Gambar 3. Layar langganan Play Store menampilkan status untuk semua langganan pengguna.
Ketuk langganan untuk melihat detail lainnya.
Gambar 4. Ketuk langganan untuk melihat detail lainnya.

Anda dapat menemukan kode contoh untuk logika link langganan di aplikasi sampel Classy Taxi.

Izinkan pengguna untuk mengupgrade, mendowngrade, atau mengubah langganan mereka

Anda dapat menawarkan tingkat langganan yang berbeda kepada pengguna, seperti tingkat dasar dan tingkat premium. Gambar 5 menampilkan layar yang menawarkan dua tingkat langganan:

aplikasi ini berisi dua tingkat langganan
Gambar 5. Aplikasi ini memiliki dua tingkat langganan.

Pengguna harus dapat mengakses layar yang serupa dengan gambar 5 untuk mengupgrade atau mendowngrade langganan. Saat mengupgrade atau mendowngrade langganan, Anda dapat menyetel mode penghitungan prorata atau bagaimana perubahan akan memengaruhi pelanggan. Tabel berikut mencantumkan mode penghitungan prorata yang tersedia:

Mode penghitungan prorataDeskripsi
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.

Contoh 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 sisa biaya langganan satu bulannya ($1) akan diterapkan ke langganan yang baru. Namun, karena langganan baru tersebut berbiaya $36 per tahun, saldo kredit $1 hanya dibayar untuk 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 ia sudah membayar untuk sebulan penuh, tetapi hanya memakai separuhnya, sisa biaya langganan satu bulannya ($1) akan diterapkan ke langganan yang baru. Namun, karena biaya langganan baru tersebut adalah $363/tahun, biaya langganan untuk 15 hari yang tersisa akan menjadi $1,50 sehingga ia dikenai selisih biaya $0,50 untuk langganan barunya dan $3 lagi pada tanggal 1 Mei. Setelah itu, Sandra akan dikenai biaya $36 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 ia 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 2mulai berlaku, dan Sandra dikenai biaya $36 untuk tingkat langganan barunya.

Saat memilih mode penghitungan prorata, pastikan untuk meninjau rekomendasi perhitungan 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 (diupgrade atau didowngrade), dan mode penghitungan prorata untuk digunakan, seperti yang ditunjukkan dalam contoh berikut:

Kotlin

// Retrieve a value for "skuDetails" by calling querySkuDetailsAsync()
val flowParams = BillingFlowParams.newBuilder()
        .setOldSku(previousSku, purchaseTokenOfOriginalSubscription)
        .setReplaceSkusProrationMode(desiredProrationMode)
        .setSkuDetails(upgradeOrDowngradeSkuDetails)
        .build();
val responseCode = billingClient.launchBillingFlow(activity, flowParams)

Java

// Retrieve a value for "skuDetails" by calling querySkuDetailsAsync()
BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder()
        .setOldSku(previousSku, purchaseTokenOfOriginalSubscription)
        .setReplaceSkusProrationMode(desiredProrationMode)
        .setSkuDetails(upgradeOrDowngradeSkuDetails)
        .build();
int responseCode = billingClient.launchBillingFlow(billingFlowParams);

Untuk penggantian langsung pada mode penghitungan prorata, aplikasi Anda akan menerima pembelian baru di PurchasesUpdatedListener Anda. Pembelian juga tersedia di BillingClient.queryPurchases(). Saat Anda menerima token pembelian, ikuti proses verifikasi yang sama seperti saat memverifikasi token pembelian baru. Pastikan untuk menyetujui 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 disediakan dalam linkedPurchaseToken guna memastikan bahwa token yang lama tidak digunakan untuk mendapatkan akses ke layanan Anda. Untuk informasi tentang cara menangani pembelian upgrade dan downgrade, lihat Menggunakan linkedPurchaseToken untuk menangani upgrade, downgrade, dan pendaftaran ulang.

Untuk mode penggantian yang ditunda, aplikasi Anda akan menerima panggilan ke PurchasesUpdatedListener dengan daftar pembelian yang kosong dan status yang menjelaskan apakah upgrade atau downgrade berhasil. Hingga penggantian mulai berlaku, BillingClient.queryPurchases() akan tetap menampilkan pembelian pada paket langganan awal. Setelah paket baru mulai berlaku, queryPurchases() akan menampilkan data pembelian pada langganan baru dan notifikasi SUBSCRIPTION_RENEWED akan dikirim ke server backend aman Anda. Untuk penggantian yang ditangguhkan, sangat disarankan untuk merespons notifikasi ini dan menyetujui pembelian menggunakan Purchases.subscriptions:acknowledge. linkedPurchaseToken dalam resource langganan dapat digunakan untuk menentukan pengguna mana di backend langganan Anda yang harus diupdate haknya dengan yang baru, jika berlaku. Aplikasi Anda tidak boleh mengandalkan pengguna yang membuka aplikasi dan mengonfirmasi melalui BillingClient.acknowledgePurchase(), karena pengguna tersebut mungkin tidak membuka aplikasi selama tiga hari sejak perubahan paket diterapkan.

Melakukan upgrade dengan 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 Anda, paket yang diubah pengguna tidak akan menyediakan uji coba gratis atau harga perkenalan.
  • Jika Anda memberikan satu uji coba gratis per produk langganan, paket yang diubah pengguna 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, periode uji coba gratis yang tersisa 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.
DITUNDA Pengguna tetap memiliki akses uji coba gratis ke langganan lama hingga tanggal penagihan berikutnya.

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 di 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 menjadi pelanggan untuk pertama kalinya yang berarti pembayaran pertamanya jatuh tempo pada tanggal 1 Mei.

Pada tanggal 15 April, Maria memilih untuk mengupgrade langganan ke Tingkat 2, yang berisi pembaruan video, yang biayanya $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, maka sisa biaya langganan di bulan itu (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 ia 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.

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 sisa biaya langganan di bulan itu (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 *
  • 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.

Rekomendasi prorata

Tabel berikut menunjukkan skenario prorata yang berbeda 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 akan 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 mempertahankan periode 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.

Berlangganan kembali

Pengguna dapat berlangganan kembali dalam beberapa skenario yang berbeda:

  • Sebelum masa berlaku langganan berakhir, pengguna dapat membeli kembali langganan yang sama di aplikasi Anda. Tindakan ini akan menghasilkan token pembelian dan langganan baru.
  • Sebelum masa berlaku langganan berakhir, pengguna dapat memulihkan langganan di pusat langganan Google Play. Tindakan ini akan mempertahankan token langganan dan pembelian yang sama.
  • Setelah masa berlaku langganan berakhir, pengguna juga dapat membeli kembali SKU yang sama hingga 1 tahun setelah berakhirnya masa berlaku melalui pusat langganan Google Play. Tindakan ini akan menghasilkan token pembelian dan langganan baru.

Sebelum masa berlaku langganan berakhir

Pengguna dapat menggunakan kembali langganan yang sudah dibatalkan meskipun masa berlakunya belum habis. Anda dapat mengizinkan pengguna untuk berlangganan kembali dalam aplikasi dengan menerapkan alur pembelian produk dalam aplikasi yang sama ke langganan yang dibatalkan (menggunakan ID produk yang sama).

Langganan baru akan menggantikan langganan yang lama dan akan diperpanjang pada tanggal habis masa berlaku yang sama. Misalnya, Anita memiliki langganan Aplikasi Musik Contoh dan langganan ini akan habis masa berlakunya pada tanggal 1 Agustus. Pada tanggal 10 Juli, ia berlangganan kembali selama satu bulan dengan harga yang sama setiap bulannya. Langganan baru akan dihitung secara prorata dengan sisa kredit, langsung diaktifkan, dan masih diperpanjang pada tanggal 1 Agustus.

Anda harus menampilkan UI yang sesuai untuk langganan berlangganan kembali:

  • Jika pengguna tidak memiliki langganan aktif, aplikasi harus memiliki tombol untuk melakukan pembelian langganan baru. Teks tombol dapat berupa "Beli".
  • Jika pengguna memiliki langganan yang dibatalkan, aplikasi mungkin memiliki tombol "Berlangganan Kembali".

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.

Setelah masa berlaku langganan berakhir

Jika Anda menggunakan Library Penagihan versi 2.0 atau yang lebih tinggi, pengguna dapat membeli kembali langganan yang telah habis masa berlakunya hingga 1 tahun setelah masa berlaku habis dari Pusat Langganan Google Play. Karena pembelian ini dilakukan di luar aplikasi, Anda harus memastikan aplikasi dapat menangani pembelian ini dengan lancar.

Dalam skenario ini, karena pengguna hanya dapat menerima satu uji coba gratis per produk langganan atau di semua langganan yang tersedia di aplikasi Anda, saat pengguna berlangganan kembali dari pusat langganan, mereka tidak memenuhi syarat untuk menerima uji coba gratis atau harga perkenalan.

Pastikan Anda mengikuti praktik terbaik kami untuk menangani langganan kembali yang diuraikan di Menggunakan linkedPurchaseToken untuk menangani upgrade, downgrade, dan pendaftaran ulang.

Fitur ini harus diaktifkan untuk setiap SKU dalam katalog Anda. Lihat Pusat Bantuan Konsol untuk mempelajari cara mengaktifkan fitur ini.

Uji coba gratis dan harga perkenalan

Aplikasi Anda dapat menawarkan uji coba gratis dan harga perkenalan untuk mendorong pelanggan agar mencoba aplikasi Anda.

Uji coba gratis

Anda dapat mengizinkan pengguna untuk mencoba langganan sebelum melakukan pembayaran. Uji coba gratis berlangsung selama jangka waktu yang Anda tetapkan, lalu dikonversi ke langganan penuh secara otomatis setelah periode uji coba gratis berakhir. Langganan yang dikonversi ini menggunakan periode waktu dan harga yang sama seperti langganan biasa. Anda dapat menetapkan uji coba gratis untuk semua jenis langganan.

Untuk memulai uji coba gratis, pengguna harus menyelesaikan proses pembelian langganan di Google Play seperti biasa. Jika pengguna memenuhi syarat untuk menerima uji coba gratis, mereka tidak dikenai biaya selama periode uji coba gratis, dan akan diberi notifikasi melalui email bahwa langganan tersebut mencakup periode uji coba gratis. Google Play mencatat transaksi sebesar $0,00 dan langganan akan ditandai sebagai dibeli selama periode uji coba gratis atau hingga pembatalannya.

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 kemudian akan dibatalkan atau dikembalikan dananya.

Setelah periode uji coba berakhir, metode pembayaran pengguna akan ditagih sesuai 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.

Secara default, pengguna hanya dapat menerima satu uji coba gratis di semua langganan yang tersedia di aplikasi Anda. Jika Anda ingin memberikan satu uji coba gratis per produk langganan, Anda dapat mengubah setelan terkait di Konsol Google Play.

Untuk menambahkan uji coba gratis ke langganan, lihat petunjuk uji coba gratis di Pusat Bantuan Google Play.

peristiwa siklus proses langganan untuk langganan dengan uji coba gratis berfungsi dengan cara yang sama seperti langganan tanpa uji coba gratis. Satu-satunya perbedaan adalah periode perpanjangan mungkin berbeda dari interval perpanjangan langganan reguler.

Saat menunjukkan produk yang tersedia untuk dijual kepada pengguna, Anda dapat menggunakan metode SkuDetails.getFreeTrialPeriod() untuk menunjukkan bahwa uji coba gratis tersedia untuk suatu produk.

Jika langganan dibeli dengan uji coba gratis, langganan yang ditampilkan dari Google Play Developer API menyediakan paymentState = 2 (uji coba gratis). Jika langganan berhasil diperpanjang, paymentState akan berganti ke 1 (pembayaran yang diterima).

Harga perkenalan

Serupa dengan uji coba gratis, aplikasi Anda dapat menawarkan harga perkenalan untuk mendorong pengguna agar mencoba aplikasi Anda. Untuk mempelajari lebih lanjut tentang harga perkenalan dan cara mengaktifkannya, lihat Membuat langganan.

Peristiwa siklus proses langganan untuk langganan dengan harga perkenalan berfungsi dengan cara yang sama seperti langganan tanpa harga perkenalan. Satu-satunya perbedaan adalah periode perpanjangan mungkin berbeda dari interval perpanjangan langganan reguler.

Saat menunjukkan produk yang tersedia untuk dijual kepada pengguna, Anda dapat menggunakan SkuDetails.getIntroductoryPrice() dan metode terkait untuk menunjukkan kepada mereka bahwa harga perkenalan tersedia untuk langganan tersebut.

Mempromosikan langganan Anda

Anda dapat membuat kode promosi untuk memberikan uji coba gratis yang diperpanjang ke SKU langganan yang sudah ada kepada pengguna terpilih. Untuk mempelajari lebih lanjut, lihat Kode promo.

Pengelolaan pelanggan

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.

  • Batalkan: Pengguna dapat membatalkan langganan di Google Play. Anda juga dapat memberikan opsi bagi pengguna untuk membatalkan langganan di aplikasi atau situs Anda. Aplikasi Anda 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 diselesaikan. Perhatikan bahwa untuk mengembalikan dana selain pembayaran yang terakhir atau jika ingin 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 Anda harus menangani pembatalan ini seperti yang dijelaskan di Pencabutan.

Tabel berikut menjelaskan perbedaan antara pembatalan, pengembalian dana, dan pencabutan.

Hentikan perpanjangan Kembalikan dana Cabut akses
Batalkan Ya Tidak Tidak
Kembalikan dana Tidak Ya Tidak
Cabut Ya Ya Ya

Menangguhkan penagihan untuk pelanggan

Anda dapat melakukan percepatan tanggal penagihan berikutnya pada pelanggan menggunakan Purchases.subscriptions:defer dari Google Play Developer API. Selama periode penangguhan, pengguna berlangganan konten Anda dan mengaksesnya secara penuh tanpa dikenai biaya. Tanggal perpanjangan langganan akan diperbarui untuk menunjukkan tanggal yang baru.

Penagihan yang ditangguhkan memungkinkan Anda melakukan hal berikut:

  • Memberikan akses gratis kepada pengguna sebagai penawaran khusus, seperti memberikan satu minggu pembelian film secara gratis.
  • Berikan akses gratis kepada pelanggan sebagai bentuk kepedulian.

Tagihan dapat ditangguhkan selama minimal satu hari dan maksimal satu tahun per panggilan API. Untuk menangguhkan penagihan lebih lama lagi, Anda dapat menghubungi kembali 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 menangguhkan 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 menangguhkan, Anda mungkin ingin memberi notifikasi kepada pengguna melalui email atau dalam aplikasi untuk memberi tahu bahwa tanggal penagihan mereka telah berubah.

Menarik kembali 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 kembali.

Setelah masa berlaku langganan pengguna berakhir, Anda perlu meminta pengguna untuk berlangganan kembali. Untuk menawarkan diskon, Anda dapat menawarkan ID produk dengan harga khusus untuk langganan Anda, yang disebut juga winback SKU. Anda dapat memberikan penawaran di dalam aplikasi, atau memberi notifikasi kepada pengguna tentang penawaran 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 winback SKU, pastikan pengguna memenuhi syarat dengan menghapus centang pada kotak Izinkan satu uji coba gratis per aplikasi di Konsol Google Play, yang membatasi pengguna untuk hanya dapat menerima satu uji coba gratis per aplikasi.

Mengubah harga langganan

Peringatan: Anda tidak boleh mengubah harga langganan Berlangganan dengan Google.

Google Play memungkinkan Anda menjual produk digital di seluruh dunia kepada banyak pengguna di berbagai tempat dengan mata uang dan pertimbangan harga yang berbeda. Terkadang, akibat biaya regional atau fluktuasi mata uang, Anda mungkin perlu memutuskan untuk mengubah harga langganan Anda. Jika Anda ingin mempertahankan pelanggan lama pada harga lama, Anda dapat membuat SKU baru dengan harga terbaru dan menawarkannya kepada pelanggan baru.

Jika Anda tidak dapat lagi memberikan akses kepada pelanggan dengan harga yang ditawarkan pada saat mereka mendaftar langganan Anda dan bersedia membatalkan semua langganan untuk pengguna yang memutuskan untuk tidak menyetujui harga yang baru, Anda dapat menerapkan perubahan harga wajib. Jika pengguna tidak menyetujui harga yang baru, langganan mereka akan dibatalkan. Untuk memaksimalkan rasio keikutsertaan dan mendorong pengguna untuk mengambil tindakan, aplikasi Anda harus menampilkan pesan tentang perubahan harga yang akan datang kepada pengguna Anda. Untuk informasi lebih lanjut tentang penyampaian pesan tentang perubahan harga, lihat Menyampaikan perubahan harga.

Untuk mengubah harga langganan, lakukan hal berikut:

  1. Login ke Konsol Google Play.
  2. Cari aplikasi dengan langganan yang ingin diubah harganya.
  3. Pilih Keberadaan toko > Produk dalam aplikasi, lalu buka tab Langganan.
  4. Pilih link Edit di sebelah harga yang ingin diubah, seperti yang ditunjukkan pada gambar 8:

    Mengedit kolom harga langganan
    Gambar 8. Mengedit kolom harga langganan
  5. Masukkan harga langganan baru.

  6. Saat Anda mengubah harga, dialog konfirmasi akan muncul seperti yang ditunjukkan pada gambar 9.

    peringatan akan muncul saat Anda mengedit harga langganan
    Gambar 9. Peringatan akan muncul saat Anda mengedit harga langganan.

    Dialog ini menjelaskan pengaruh perubahan harga pada pelanggan baru dan pelanggan lama. Perhatikan hal berikut:

    • Anda tidak dapat membatalkan perubahan harga setelah mengonfirmasinya.
    • Google Play akan mulai memberi notifikasi kepada pengguna tentang perubahan harga sejak tujuh hari setelah konfirmasi.
    • Saat menaikkan harga langganan, pengguna harus menyetujui perubahan harga dalam waktu 30 hari atau langganan mereka akan dibatalkan secara otomatis.
    • Penurunan harga langganan diterapkan secara otomatis untuk pelanggan lama pada tanggal perpanjangan berikutnya. Siapa pun yang berlangganan setelah penurunan harga diterapkan akan menerima penurunan harga secara otomatis.

    Klik Terapkan untuk melanjutkan.

  7. Dialog konfirmasi yang menjelaskan kembali tentang kapan harga langganan baru mulai diterapkan akan muncul.

    dialog konfirmasi yang menunjukkan kapan perubahan harga langganan
           mulai diterapkan
    Gambar 10. Dialog konfirmasi yang menunjukkan kapan perubahan harga langganan mulai diterapkan.

Menyampaikan perubahan harga kepada pengguna

Anda harus memberi notifikasi kepada pelanggan lama setiap kali melakukan perubahan harga, terutama jika harganya mengalami kenaikan.

Saat menaikkan harga langganan, Anda memiliki waktu minimal 7 hari untuk memberi notifikasi kepada pelanggan lama tentang perubahan harga sebelum Google Play dapat mulai memberi tahu mereka. Google Play memberi tahu pengguna dengan menampilkan dialog seperti yang ditampilkan pada gambar 11. Dialog ini menampilkan harga lama, harga baru, dan tanggal diterapkannya harga baru.

Dialog umum yang memberi tahu pengguna tentang perubahan harga langganan
Gambar 11. Dialog umum yang memberi tahu pengguna tentang perubahan harga langganan.

Anda dapat menampilkan dialog ini dalam aplikasi dengan cara berikut:

Aplikasi Anda dapat mengetahui jika pengguna menerima perubahan harga yang tertunda dengan melihat bidang priceChange di resource langganan. Jika ada, kolom ini akan menunjukkan adanya perubahan harga pada langganan dan kolom priceChange.state akan menunjukkan apakah perubahan harga telah diterima atau masih belum diselesaikan.

Meluncurkan alur konfirmasi perubahan harga

Untuk menampilkan dialog perubahan harga Google Play saat aplikasi Anda diluncurkan, gunakan BillingClient.launchPriceChangeConfirmationFlow().

Sebelum menampilkan dialog perubahan harga, Anda juga dapat menampilkan pesan atau dialog Anda sendiri yang menjelaskan alasan di balik perubahan harga tersebut. Jika Anda membuat dan menampilkan jenis pesan khusus ini, pengguna akan cenderung memperpanjang langganan mereka dengan harga baru.

Berikut adalah contoh peluncuran alur konfirmasi perubahan harga:

Kotlin

val priceChangeFlowParams = PriceChangeFlowParams.newBuilder()
        .setSkuDetails(changedPriceSubscriptionSkuDetails)
        .build()

billingClient.launchPriceChangeConfirmationFlow(activity,
        priceChangeFlowParams,
        object : PriceChangeConfirmationListener() {
            override fun onPriceChangeConfirmationResult(responseCode: Int) {
                if (responseCode == BillingResponseCode.OK) {
                    // User has confirmed the price change.
                } else if (responseCode == BillingResponseCode.USER_CANCELED) {
                    // User hasn't confirmed the price change and should retain
                    // access until the end of the current billing cycle.
                }
            }
        })

Java

PriceChangeFlowParams priceChangeFlowParams = PriceChangeFlowParams.newBuilder()
        .setSkuDetails(changedPriceSubscriptionSkuDetails)
        .build();

billingClient.launchPriceChangeConfirmationFlow(activity,
        priceChangeFlowParams,
        new PriceChangeConfirmationListener() {
            @Override
            public void onPriceChangeConfirmationResult(int responseCode) {
                if (responseCode == BillingResponseCode.OK) {
                    // User has confirmed the price change.
                } else if (responseCode == BillingResponseCode.USER_CANCELED) {
                    // User hasn't confirmed the price change and should retain
                    // access until the end of the current billing cycle.
                }
            }
        });

Menangani konfirmasi pengguna tentang perubahan harga

Jika pengguna menyetujui harga langganan baru, langganan akan diperpanjang dan dapat diproses seperti perpanjangan lainnya. Selain itu, Anda akan menerima Notifikasi developer real time SUBSCRIPTION_PRICE_CHANGE_CONFIRMED.

Menangani saat perubahan harga ditolak

Jika pengguna belum menerima perubahan harga saat langganan lama mereka habis masa berlakunya, langganan akan dihentikan, dan Anda akan menerima notifikasi 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 7 hari, pelanggan lama tidak akan menerima notifikasi 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.

Melakukan dua perubahan harga dalam satu baris

Anda harus memastikan bahwa perubahan harga hanya dilakukan sekali dalam satu waktu. Perubahan harga tidak direkomendasikan untuk tujuan pengujian.

Jika Anda mengubah harga langganan dua kali dalam periode 7 hari, pengguna hanya perlu menyetujui perubahan harga terakhir.

Jika kedua perubahan harga berjarak lebih dari 7 hari, perubahan harga tersebut tidak akan membatalkan satu sama lain. Sebagai gantinya, pengguna harus menyetujui perubahan harga pertama dan memiliki satu siklus perpanjangan dengan harga pertama. Setelah siklus perpanjangan berakhir, Anda dapat mulai menagih dengan harga kedua. Biaya perpanjangan akan menggunakan harga kedua setiap bulannya.