Alasan pembatalan langganan biasanya sampai ke Anda sebelum permintaan refund, dan Google Play memberikan jauh lebih banyak daripada Apple
Google Play mencatat alasan pembatalan langganan dari survei pembatalannya, sedangkan Apple hanya mengirim kode kedaluwarsa. Berikut apa yang disampaikan setiap toko, sinyal mana yang menandakan refund atau chargeback akan datang, dan berapa biaya masing-masing bagi Anda.

Poin utama
- Google Play menanyakan alasan pelanggan berhenti saat mereka membatalkan, dan jawabannya sampai ke developer melalui canceledStateContext.userInitiatedCancellation.cancelSurveyResult di purchases.subscriptionsv2.
- Survei pembatalan Google Play punya lima jawaban yang bisa dibaca developer: jarang dipakai, masalah teknis, terkait biaya, menemukan aplikasi yang lebih baik, dan lainnya. Teks bebas di reasonUserInput hanya terisi jika pengguna memilih lainnya.
- Notifikasi SUBSCRIPTION_CANCELED dari Google Play hanya membawa purchase token. Alasan pembatalan harus diambil dengan purchases.subscriptionsv2.get, dan Google menghapus semua kolom pembatalan jika pengguna memulihkan langganannya.
- App Store Server API milik Apple tidak punya survei pembatalan. Kolom expirationIntent memberi salah satu dari lima kode: pelanggan membatalkan, kesalahan penagihan, tidak menyetujui kenaikan harga atau konversi penawaran, produk tidak tersedia, atau lainnya.
- Notifikasi DID_CHANGE_RENEWAL_STATUS dari Apple dengan subtipe AUTO_RENEW_DISABLED bisa berarti App Store mematikan perpanjangan otomatis setelah pelanggan meminta refund, bukan hanya pelanggan yang mematikannya.
- Alasan pembatalan tidak pernah memberi developer suara dalam keputusan refund. Hanya dua alur yang meminta bukti: CONSUMPTION_REQUEST dari Apple, yang dijawab dalam 12 jam, dan peninjauan chargeback Google Play melalui orders.reviewrefund, yang dijawab dalam 24 jam.
- Pelanggan Google Play yang membatalkan karena masalah teknis adalah yang paling mungkin meminta uangnya kembali. Untuk pesanan setelah August 3, 2026, chargeback yang mereka menangkan membuat developer kehilangan harga pembelian dikurangi biaya layanan Play, ditambah biaya bank.
Sebagian besar pelanggan yang akhirnya mendapat refund membatalkan langganan lebih dulu. Pembatalan itu membawa alasan, dan kedua toko memberikan informasi yang sangat berbeda jumlahnya. Google Play menjalankan survei singkat dan meneruskan jawabannya ke server Anda, termasuk teks bebas. Apple mengirim kode angka yang menjelaskan bagaimana langganan berakhir, bukan mengapa pelanggan ingin berhenti. Baca keduanya dengan benar, dan Anda akan melihat permintaan refund datang selagi masih ada yang bisa Anda lakukan.
Apa yang disampaikan Google Play tentang alasan pembatalan langganan
Saat pengguna membatalkan di pusat langganan Play, Google menanyakan alasannya. Jawabannya masuk ke resource langganan yang Anda dapat dari purchases.subscriptionsv2.get, di bawah canceledStateContext. Objek ini hanya ada saat langganan berstatus dibatalkan atau kedaluwarsa, dan menjelaskan siapa yang mengakhiri langganan: pengguna, sistem Google, Anda, atau penggantian seperti perubahan paket.
Jika pengguna yang membatalkan, objek userInitiatedCancellation berisi dua kolom. cancelTime menunjukkan kapan mereka membatalkan. cancelSurveyResult menyimpan jawaban survei.
| Alasan survei | Deskripsi Google | Apa yang sering ditandakannya |
|---|---|---|
| CANCEL_SURVEY_REASON_NOT_ENOUGH_USAGE | Langganan kurang dipakai | Pemakaian rendah, jadi biaya yang terpakai untuk akun ini kecil |
| CANCEL_SURVEY_REASON_TECHNICAL_ISSUES | Masalah teknis saat memakai aplikasi | Sinyal refund dan chargeback paling kuat |
| CANCEL_SURVEY_REASON_COST_RELATED | Masalah terkait biaya | Sensitif terhadap harga, kadang perpanjangan yang tidak mereka duga |
| CANCEL_SURVEY_REASON_FOUND_BETTER_APP | Pengguna menemukan aplikasi yang lebih baik | Pesaing menang, jarang berujung sengketa |
| CANCEL_SURVEY_REASON_OTHERS | Alasan lain | Baca reasonUserInput, kata-kata pengguna sendiri |
| CANCEL_SURVEY_REASON_UNSPECIFIED | Alasan survei pembatalan tidak ditentukan | Tidak ada jawaban untuk diolah |
Kolom paling kanan adalah tafsiran kami, bukan Google. Dua kolom pertama diambil langsung dari referensi API.
Notifikasinya tidak membawa alasan
Langganan yang dibatalkan memicu notifikasi developer real-time SUBSCRIPTION_CANCELED, type 3. Google menegaskan bahwa notifikasi ini hanya memberi tahu bahwa status pembelian berubah. Payload-nya hanya memberi purchase token dan tidak ada hal berguna lainnya, jadi handler Anda harus memanggil purchases.subscriptionsv2.get untuk membaca jawaban survei.
Tampilan di Play Console
Anda tidak perlu menulis kode untuk melihat totalnya. Laporan langganan di Play Console punya kartu Cancellations yang membagi churn menjadi sukarela, tidak sukarela, dan lainnya, serta kartu Cancellation survey responses untuk pengguna yang memilih menjawab. Jawaban teks bebas dari pengguna yang memilih lainnya bisa diunduh sebagai CSV dari kartu Other responses. Unduhan itu memerlukan izin View financial data, izin yang sama dengan yang Anda berikan ke alat yang membaca pesanan Anda.
Apa yang disampaikan Apple, dan apa yang tidak
Apple tidak menjalankan survei pembatalan yang dilaporkan ke developer. Kolom yang paling mendekati adalah expirationIntent di info perpanjangan yang ditandatangani, dan kolom ini menjelaskan bagaimana langganan berakhir, bukan apa yang dipikirkan pelanggan.
| expirationIntent | Arti menurut Apple | Subtipe EXPIRED yang sesuai |
|---|---|---|
| 1 | Pelanggan membatalkan langganannya | VOLUNTARY |
| 2 | Kesalahan penagihan, misalnya informasi pembayaran tidak valid | BILLING_RETRY |
| 3 | Tidak menyetujui kenaikan harga atau konversi penawaran yang memerlukannya | PRICE_INCREASE |
| 4 | Produk tidak tersedia untuk dibeli saat perpanjangan | PRODUCT_NOT_FOR_SALE |
| 5 | Alasan lain | Tanpa subtipe |
Kode 1 satu-satunya yang menggambarkan pilihan pelanggan, dan kode itu pun tidak menjelaskan motifnya. Pelanggan yang pergi karena aplikasi terus crash dan pelanggan yang sekadar sudah menyelesaikan proyeknya terlihat sama persis.
Sinyal yang tersembunyi di AUTO_RENEW_DISABLED
Ada satu notifikasi Apple yang layak diperhatikan lebih dekat. DID_CHANGE_RENEWAL_STATUS dengan subtipe AUTO_RENEW_DISABLED biasanya berarti pelanggan mematikan perpanjangan otomatis. Dokumentasi Apple menambahkan kasus kedua: App Store juga mematikan perpanjangan otomatis setelah pelanggan meminta refund.
Jadi di iOS, peristiwa perpanjangan dimatikan bisa menjadi jejak pertama permintaan refund. Jika pembeliannya berupa consumable atau langganan perpanjangan otomatis, CONSUMPTION_REQUEST mungkin menyusul, dan sejak saat itu Anda punya 12 jam untuk mengirim data konsumsi. Peristiwa perpanjangan dimatikan yang datang tanpa tindakan apa pun yang terlihat di aplikasi Anda layak dianggap sebagai peringatan dini untuk menyiapkan data pemakaian akun tersebut.
Apple dan Google berdampingan
| Google Play | Apple App Store | |
|---|---|---|
| Menanyakan alasan ke pengguna | Ya, lewat survei pembatalan | Tidak ada survei yang terlihat oleh developer |
| Lokasi alasan | canceledStateContext di purchases.subscriptionsv2 | expirationIntent di info perpanjangan |
| Teks bebas | reasonUserInput, hanya untuk lainnya | Tidak ada |
| Siapa yang membatalkan | Pengguna, sistem, developer, atau penggantian | Disimpulkan dari kode dan subtipe |
| Notifikasi | SUBSCRIPTION_CANCELED, lalu panggil get | DID_CHANGE_RENEWAL_STATUS, EXPIRED |
| Hilang jika pengguna berlangganan lagi | Ya, dihapus saat dipulihkan | Info perpanjangan mencerminkan status saat ini |
| Dashboard | Kartu Cancellation survey responses | Tidak ada untuk alasan |

Kapan pembatalan berubah menjadi refund
Pembatalan menghentikan tagihan berikutnya. Pembatalan tidak mengembalikan tagihan terakhir. Apakah uang kembali tergantung pada alur refund mana yang ditempuh pelanggan selanjutnya, dan sebagian besar alur itu berjalan tanpa Anda.
- Di Google Play, pembeli bisa mendapatkan refund sendiri dalam 48 jam setelah pembelian, dan Google yang memutuskan.
- Refund melalui dukungan Google atau Apple diputuskan oleh toko.
- CONSUMPTION_REQUEST dari Apple meminta data konsumsi Anda, dengan batas waktu 12 jam.
- Peninjauan chargeback Google Play meminta bukti melalui orders.reviewrefund, dengan batas waktu 24 jam. Keputusan bank atas chargeback bersifat final.
Alasan pembatalan tidak mengubah satu pun aturan itu. Yang berubah adalah seberapa cepat Anda tahu pelanggan mana yang tidak puas, dan apakah bukti Anda sudah siap saat salah satu dari dua alur yang memintanya tiba.
Berapa biaya setiap alasan bagi Anda
Jawaban survei juga menjadi gambaran kasar tentang biaya yang sudah keluar untuk melayani sebuah akun, yaitu uang yang tetap Anda tanggung setelah refund.
Masalah teknis
Ini alasan yang paling mahal. Pelanggan sudah cukup sering memakai produk sampai menemui masalah, jadi Anda sudah membayar compute di balik sesi mereka, panggilan model API dari permintaan mereka, penyimpanan untuk apa pun yang mereka buat, dan pembayaran untuk kreator yang kontennya mereka pakai. Jika mereka lalu mendapat refund, harganya kembali ke pelanggan dan biaya itu tetap Anda tanggung. Jika mereka mengajukan ke bank di Google Play, pesanan setelah August 3, 2026 membuat Anda kehilangan harga pembelian dikurangi biaya layanan Play, ditambah biaya bank.
Terkait biaya
Keluhan soal harga lebih murah daripada kelihatannya, kecuali jika di baliknya ada perpanjangan yang tidak diduga. Itu cerita chargeback yang klasik, jadi periksa apakah pembatalan terjadi tepat setelah tagihan perpanjangan dan apakah pengingat perpanjangan Anda sudah terkirim.
Jarang dipakai
Pemakaian rendah berarti biaya layanan rendah, jadi refund di sini sebagian besar mengembalikan uang yang tidak banyak menghabiskan biaya untuk didapat. Ini juga alasan di mana data konsumsi yang jujur, jika Apple memintanya, menunjukkan dengan tepat apa yang dipakai dan tidak dipakai pelanggan.
Menemukan aplikasi yang lebih baik
Pelanggan seperti ini jarang mempersoalkan apa pun. Mereka pindah ke pesaing. Alasan ini berguna untuk keputusan produk dan hampir tidak pernah untuk pembelaan refund.
Rutinitas membaca alasan pembatalan
- Pada setiap SUBSCRIPTION_CANCELED dari Google Play, panggil purchases.subscriptionsv2.get dan simpan canceledStateContext bersama purchase token dan cancelTime.
- Simpan reasonUserInput apa adanya jika alasannya lainnya. Itu satu-satunya teks bebas yang diberikan kedua toko.
- Pada setiap DID_CHANGE_RENEWAL_STATUS dari Apple dengan AUTO_RENEW_DISABLED, catat peristiwanya dan tarik data pemakaian akun tersebut, berjaga-jaga jika CONSUMPTION_REQUEST menyusul.
- Pada setiap notifikasi EXPIRED dari Apple, catat subtipe dan expirationIntent agar churn sukarela dan kegagalan penagihan tidak tercampur.
- Untuk pembatalan Google Play dengan alasan masalah teknis, periksa log error akun tersebut dan hubungi pelanggan sebelum mereka menghubungi bank.
- Simpan log pemakaian per akun, agar CONSUMPTION_REQUEST bisa dijawab dalam 12 jam dan peninjauan chargeback dalam 24 jam.
Pertanyaan yang sering diajukan
- Bagaimana cara melihat alasan pelanggan Google Play membatalkan?
- Panggil purchases.subscriptionsv2.get dan baca canceledStateContext.userInitiatedCancellation.cancelSurveyResult. Kolom reason berisi jawaban survei, dan reasonUserInput berisi teks bebas jika pengguna memilih lainnya. Play Console juga menampilkan totalnya di kartu Cancellation survey responses.
- Apakah Apple memberi tahu developer mengapa pelanggan membatalkan langganan?
- Tidak. Apple tidak punya survei pembatalan yang terlihat oleh developer. Kolom expirationIntent menjelaskan bagaimana langganan berakhir, dengan kode untuk pelanggan membatalkan, kesalahan penagihan, tidak menyetujui kenaikan harga, produk tidak tersedia, atau lainnya, tetapi tidak menjelaskan motif pelanggan.
- Apakah notifikasi SUBSCRIPTION_CANCELED berisi alasan pembatalan?
- Tidak. Notifikasi developer real-time dari Google Play hanya memberi tahu bahwa status pembelian berubah. Ambil langganan dengan purchases.subscriptionsv2.get untuk membaca alasannya, lalu segera simpan, karena Google menghapus kolom pembatalan jika pengguna memulihkan langganan.
- Apakah notifikasi AUTO_RENEW_DISABLED dari Apple bisa berarti permintaan refund?
- Ya. Dokumentasi Apple menyebutkan bahwa subtipe AUTO_RENEW_DISABLED mencakup dua hal: pelanggan mematikan perpanjangan otomatis, dan App Store mematikannya setelah pelanggan meminta refund.
- Bisakah saya mencabut akses saat pelanggan membatalkan?
- Tidak di Google Play selama mereka masih berhak. Google menyatakan pelanggan yang membatalkan tetap punya akses hingga akhir siklus penagihan, dan mencabut akses lebih awal melanggar kebijakan langganan Google Play. Gunakan expiryTime untuk menentukan kapan akses berakhir.
Sumber dan bacaan lanjutan
- Google Play Developer API: purchases.subscriptionsv2
- Google Play Billing: Subscription lifecycle
- Google Play Billing: Real-time developer notifications reference
- Play Console Help: Review in-app subscription performance
- Apple Developer: expirationIntent
- Apple Developer: notificationType
- Apple Developer: Send Consumption Information
- Play Console Help: Updates to refund protection and chargeback cost responsibility
RefundHalt
Autopilot refund untuk App Store dan Google Play
Baca selanjutnya
Permintaan refund yang berlebihan bisa merugikan Anda lebih dari nilai refund itu sendiri, karena kedua toko aplikasi menganggapnya sinyal kualitas
Pedoman 5.6.4 Apple menyebut permintaan refund berlebihan sebagai tanda aplikasi tidak memenuhi standar kualitas, dan Perjanjian Distribusi Google mengizinkannya menghapus aplikasi developer baru berdasarkan tingkat refund. Berikut isi aturan tiap toko, biaya penghapusan, dan cara menghindarinya.
Verifikasi notifikasi server App Store sebelum Anda menindaklanjuti refund, karena siapa pun dapat mengirim ke URL webhook Anda
Notifikasi refund hanyalah permintaan HTTPS sampai Anda memeriksa tanda tangannya. Berikut cara memverifikasi notifikasi server App Store dan pesan RTDN Google Play, apa yang ditandatangani oleh setiap store, dan berapa kerugian Anda akibat refund palsu atau refund asli yang keliru ditolak.