Pengingat: Mulai 2 Agustus 2021, semua aplikasi baru harus menggunakan Library Penagihan versi 3 atau yang lebih baru. Pada 1 November 2021, semua update untuk aplikasi yang ada harus menggunakan Library Penagihan versi 3 atau yang lebih baru. Pelajari lebih lanjut.

Menjual langganan

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.

Menangani siklus proses langganan

Langganan dapat melalui berbagai perubahan status pada siklus prosesnya dan aplikasi 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 Ditampilkan? isAutoRenewing Ditampilkan? 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 menyimpan status langganan di server backend yang aman, aplikasi 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. Anda perlu memanggil Developer API setelah menerima Notifikasi developer real time untuk mendapatkan status lengkap dan memperbarui status backend Anda sendiri. Notifikasi ini hanya memberi tahu bahwa status langganan berubah. Informasi lengkap tentang status langganan tidak diberikan.

Aplikasi perlu menangani perubahan status yang dijelaskan di bagian berikut.

Langganan baru

Pastikan Anda mengikuti rekomendasi kami untuk menangani pembelian baru. Saat dibeli, langganan akan ditampilkan oleh BillingClient.queryPurchases(), dan notifikasi SUBSCRIPTION_PURCHASED akan dikirim. Saat menerima notifikasi ini, aplikasi 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 berhasil diperpanjang, langganan akan terus ditampilkan oleh BillingClient.queryPurchases().

Notifikasi SUBSCRIPTION_RENEWED juga dikirim saat langganan diperpanjang. Aplikasi harus memastikan pengguna masih berhak menikmati langganan, lalu memperbarui status langganan dengan expiryTimeMillis baru yang disediakan di resource langganan yang ditampilkan 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 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.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 pengguna kehilangan akses ke langganan. Jika expiryTimeMillis 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#subscriptionPurchase",
  ...
  "expiryTimeMillis": expiry_time,
  "autoRenewing": false,
  ...
  "paymentState": 1  # Payment received
  "cancelReason": integer # Reason the subscription was cancelled: user, billing issue, etc.
}

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, aplikasi 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.queryPurchases(). Notifikasi SUBSCRIPTION_REVOKED juga dikirim jika hal ini terjadi. Saat notifikasi ini dikirim, resource langganan yang ditampilkan dari Google Play Developer API berisi autoRenewing = false dan expiryTimeMillis berisi tanggal pengguna 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. Periode penangguhan akun berlangsung hingga 30 hari.

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 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 notifikasi SUBSCRIPTION_ON_HOLD saat langganan memasuki penangguhan akun. Panggil Google Play Developer API dari server backend aman 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 hanya mengandalkan queryPurchases() untuk menentukan apakah pengguna berhak menikmati langganan, aplikasi harus menangani pemulihan langganan dari penangguhan akun secara otomatis.

Jika menyinkronkan status langganan dengan backend, aplikasi 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 ditampilkan 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 hanya mengandalkan queryPurchases() untuk memeriksa apakah pengguna berhak menikmati langganan, aplikasi harus menangani masa tenggang secara otomatis karena queryPurchases() akan terus menampilkan pembelian yang dibatalkan sebelum tanggal habis masa berlaku.

Jika menyinkronkan status langganan dengan backend, aplikasi 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, 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.

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-langkah berikut:

  1. Login ke Konsol Google Play.
  2. Pilih aplikasi, lalu buka Keberadaan di Store > Produk dalam aplikasi > Langganan.
  3. Luaskan bagian Setelan langganan.
  4. 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 menjeda langganannya, lalu masuk ke penangguhan akun
Gambar 1. 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 2. Jika pengguna melanjutkan secara manual, tanggal penagihan berubah ke tanggal melanjutkan manual.

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

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

Jika menyinkronkan status langganan dengan server backend yang aman, aplikasi 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.

Notifikasi developer real time 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 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, dan resource langganan berisi autoRenewing = true, dan paymentState = 0 (tertunda), nilai untuk autoResumeTimeMillis di masa mendatang, dan nilai untuk expiryTimeMillis yang sudah lewat.

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

bagian langganan di aplikasi Google Play Store yang menampilkan
            langganan yang dibatalkan dengan tombol berlangganan lagi
Gambar 3. Bagian Akun > Langganan di aplikasi Google Play Store yang menampilkan langganan yang dibatalkan dengan tombol Berlangganan lagi.

Jika hanya mengandalkan queryPurchases() untuk menentukan apakah pengguna berhak menikmati langganan, aplikasi 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 menyinkronkan status langganan dengan backend, aplikasi harus memproses Notifikasi developer real time 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#subscriptionPurchase",
  ...
  "expiryTimeMillis": expiry_time_in_future,
  "autoRenewing": true,
  ...
  "paymentState": 1  # Payment received
}

Upgrade, downgrade, dan pendaftaran ulang

Saat pengguna mengupgrade, mendowngrade, atau berlangganan lagi, 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 yang ada agar dapat mengaitkan pembelian baru dengan akun yang sama. Sebaiknya gunakan 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. Aplikasi harus menyertakan link di layar preferensi atau setelan yang memungkinkan pengguna untuk mengelola langganan. Contoh link ini ditunjukkan pada gambar 4.

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

Pada pengendali klik link ini, tambahkan logika untuk menentukan apakah pengguna memiliki langganan yang masih berlaku untuk aplikasi, yang mana expiryTimeMillis di masa mendatang atau autoRenewing ditetapkan ke true.

Setiap SKU langganan cocok dengan ID produk yang Anda tetapkan saat membuat SKU 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 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
Layar langganan Play Store menampilkan status untuk semua langganan
           pengguna.
Gambar 5. Layar langganan Play Store menampilkan status untuk semua langganan pengguna.
Ketuk langganan untuk melihat detail lainnya.
Gambar 6. Ketuk langganan untuk melihat detail lainnya.

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

Mengizinkan pengguna mengupgrade, mendowngrade, atau mengubah langganan

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

aplikasi ini berisi dua tingkat langganan
Gambar 7. Aplikasi ini memiliki 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 atau cara perubahan 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 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 ia 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 dan $35,50 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 2 mulai berlaku, dan Sandra dikenai biaya $36 untuk tingkat langganan barunya.

Saat memilih mode penghitungan prorata, pastikan untuk meninjau rekomendasi 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:

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 menerima pembelian baru di PurchasesUpdatedListener. Pembelian juga tersedia di BillingClient.queryPurchases(). 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 disediakan dalam linkedPurchaseToken guna memastikan bahwa token yang lama tidak digunakan untuk mendapatkan akses ke layanan Anda. Untuk informasi tentang cara menangani upgrade dan downgrade pembelian, lihat Menggunakan linkedPurchaseToken untuk menangani upgrade, downgrade, dan pendaftaran ulang.

Untuk mode penggantian yang ditunda, aplikasi 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 paket langganan awal. Setelah paket baru mulai berlaku, queryPurchases() 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 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, 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.
DEFERRED 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 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, maka biaya langganan seengah 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.

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 *
  • 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 berbagai skenario 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.

Menarik kembali pelanggan setelah churn

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:

  • Memulai 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.
  • 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 langganan berakhir - 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.

bagian langganan di aplikasi Google Play Store yang menampilkan
            langganan yang dibatalkan dengan tombol berlangganan lagi
Gambar 8. Bagian Akun > Langganan di aplikasi Google Play Store yang menampilkan langganan yang dibatalkan dengan tombol Berlangganan lagi.

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.

bagian langganan di aplikasi Google Play Store yang menampilkan
            langganan yang dibatalkan dan yang habis masa berlakunya dengan tombol
            berlangganan lagi dan hapus
Gambar 9. Bagian Akun > Langganan di aplikasi Google Play Store yang menampilkan langganan yang dibatalkan dan yang habis masa berlakunya dengan tombol Berlangganan lagi dan Hapus.

Berlangganan lagi dianggap sebagai pembelian di luar aplikasi, jadi pastikan untuk mengikuti praktik terbaik dalam menangani pembelian yang dilakukan dari luar aplikasi.

Pengelolaan pelanggan

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. Untuk informasi selengkapnya, lihat Menarik kembali pelanggan setelah churn.

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 memenuhi syarat untuk menerima uji coba gratis, pengguna tidak dikenai biaya selama periode uji coba gratis dan akan diberi tahu 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 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.

Secara default, pengguna hanya dapat menerima satu uji coba gratis di semua langganan yang tersedia di aplikasi. Jika 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 memiliki paymentState = 2 (uji coba gratis). Jika langganan berhasil diperpanjang, paymentState akan berganti ke 1 (pembayaran diterima).

Harga perkenalan

Serupa dengan uji coba gratis, aplikasi dapat menawarkan harga perkenalan untuk mendorong pengguna agar mencoba aplikasi. 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 menampilkan produk yang tersedia untuk dijual kepada pengguna, Anda dapat menggunakan SkuDetails.getIntroductoryPrice() dan metode terkait untuk menunjukkan bahwa harga perkenalan tersedia untuk langganan tersebut.

Mempromosikan langganan

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

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

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

Menunda penagihan untuk pelanggan

Anda dapat memundurkan tanggal penagihan berikutnya untuk pelanggan 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.

Penagihan yang ditunda memungkinkan Anda melakukan hal berikut:

  • Memberikan akses gratis kepada pengguna sebagai penawaran khusus, 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

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 ingin mempertahankan pelanggan lama pada harga lama, Anda dapat membuat SKU baru dengan harga terbaru dan menawarkannya kepada pelanggan baru.

Jika tidak dapat lagi memberikan akses kepada pelanggan dengan harga yang ditawarkan pada saat mereka mendaftar langganan dan bersedia membatalkan semua langganan bagi pengguna yang tidak menyetujui harga 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 harus menampilkan pesan tentang perubahan harga yang akan datang kepada pengguna. Untuk informasi lebih lanjut tentang penyampaian 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 Kehadiran di Store > Produk dalam aplikasi, lalu buka tab Langganan.
  4. Pilih link Edit di sebelah harga yang ingin diubah, seperti yang ditunjukkan pada gambar 10:

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

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

    peringatan akan muncul saat Anda mengedit harga langganan
    Gambar 11. 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 Anda menaikkan harga langganan, pengguna harus menyetujui perubahan harga dalam waktu 30 hari atau langganan 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 akan ditampilkan yang menjelaskan kembali waktu penerapan harga langganan baru.

    dialog konfirmasi yang menunjukkan waktu penerapan perubahan harga langganan
    Gambar 12. Dialog konfirmasi yang menunjukkan waktu penerapan perubahan harga langganan.

Menyampaikan perubahan harga kepada pengguna

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

Saat menaikkan harga langganan, Anda memiliki waktu minimal tujuh hari untuk memberi tahu 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 13. Dialog ini menampilkan harga lama, harga baru, dan tanggal diterapkannya harga baru.

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

Anda dapat menampilkan dialog ini dalam aplikasi dengan cara berikut:

Aplikasi dapat mengetahui apakah pengguna belum menyetujui perubahan harga dengan melihat kolom 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 disetujui atau belum.

Meluncurkan alur konfirmasi perubahan harga

Untuk menampilkan dialog perubahan harga Google Play saat aplikasi 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 atas 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 penolakan perubahan harga

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

Melakukan dua perubahan harga secara berturut-turut

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