Pembelian yang tertunda terlihat seperti penjualan, tetapi uangnya belum masuk, dan memberikannya lebih awal berarti memberikan produk secara cuma-cuma
Baik App Store maupun Google Play memiliki status pembelian tertunda, sebuah pesanan yang telah diterima toko tetapi belum ditagih. Buka aksesnya sebelum pembayaran lunas dan setiap pesanan yang gagal adalah biaya murni. Berikut cara kerja pembelian tertunda di masing-masing toko, berapa biaya dari satu pemberian yang salah, dan cara menanganinya tanpa kebocoran.

Poin utama
- Pembelian tertunda adalah pesanan nyata yang telah diterima toko tetapi belum ditagih. Kode Anda melihat pembelian baru, tetapi uangnya belum masuk, dan mungkin tidak akan pernah masuk.
- Berikan hak akses hanya ketika statusnya PURCHASED di Google Play, atau ketika transaksi selesai di Apple. Jangan pernah membuka akses pada status PENDING atau pada hasil pending Apple.
- Di Google Play, pembayaran tunai di toko, transfer bank, dan sebagian penagihan operator diselesaikan di luar jalur utama, sehingga pembelian kembali dalam status PENDING, bukan PURCHASED, sampai pelanggan benar-benar membayar.
- Di Apple, pembelian tertunda biasanya Ask to Buy, di mana seorang penyelenggara keluarga harus menyetujuinya. Persetujuan bisa memakan waktu berjam-jam atau berhari-hari, dan transaksi yang selesai datang kemudian melalui Transaction.updates.
- Buka akses pada pesanan tertunda yang kemudian dibatalkan dan Anda telah menghabiskan komputasi, panggilan API, penyimpanan, atau pembayaran barang habis pakai untuk tagihan yang tidak pernah lunas. Tidak seperti pengembalian dana, tidak ada uang untuk ditarik kembali, karena tidak ada yang pernah ditagih.
- Toko memberi tahu Anda ketika pesanan tertunda gagal. Google mengirim ONE_TIME_PRODUCT_CANCELED, tipe 2, atau SUBSCRIPTION_PENDING_PURCHASE_CANCELED, tipe 20. Apple sekadar tidak pernah mengirimkan transaksi yang selesai.
- Pesanan tertunda bisa berubah menjadi penjualan nyata saat aplikasi Anda tertutup, jadi periksa ulang saat kembali: panggil queryPurchasesAsync() di onResume() pada Google Play, dan terus dengarkan Transaction.updates pada Apple.
Seseorang mengetuk beli di aplikasi Anda. Log Anda menampilkan pesanan baru, listener penagihan Anda menyala, dan Anda menyerahkan barangnya. Pada sebagian besar pembelian itu benar-benar tepat. Pada pembelian tertunda itu keliru, karena pesanannya ada tetapi uangnya tidak. Pelanggan memilih metode pembayaran yang lunas belakangan, toko masih menunggu dibayar, dan Anda baru saja menyerahkan fitur berbayar untuk tagihan yang mungkin tidak pernah lunas. Ini adalah sepupu diam-diam dari pengembalian dana. Tidak ada yang dibalik di sini, karena tidak ada yang pernah ditagih. Anda sekadar memberikan produk secara cuma-cuma.
Pembelian tertunda adalah pesanan nyata dalam status belum-dibayar, dan baik App Store maupun Google Play memilikinya. Kedua toko dengan jelas menyuruh Anda menunggu. Jebakannya adalah pesanan tertunda terlihat hampir identik dengan yang selesai di dalam kode Anda, jadi integrasi yang memperlakukan setiap pembelian baru sebagai penjualan akan mengirim barang pada pesanan yang masih coba ditagih oleh toko. Tangani dengan benar dan Anda tidak kehilangan apa pun. Tangani dengan salah dan setiap pembayaran lambat yang gagal adalah biaya murni, diserahkan dengan biaya Anda sendiri.
Apa sebenarnya pembelian tertunda itu
Pembelian tertunda adalah pesanan yang telah dicatat toko tetapi belum ditagih. Pembeli memulai alurnya, toko menerimanya, dan penyelesaian pembayaran sedang berlangsung di suatu tempat yang tidak dapat dilihat aplikasi Anda. Google Play menyebutnya status PENDING. Apple menyebutnya transaksi tertunda, atau ditangguhkan. Nama berbeda, fakta sama: toko menahan pesanan tetap terbuka sambil menunggu dibayar, dan toko telah memberi tahu Anda untuk tidak menganggap pesanan itu sebagai uang.
Google Play: pembayaran terjadi di tempat lain
Beberapa metode pembayaran diselesaikan di luar jalur utama. Tunai di toko fisik, transfer bank, dan sebagian penagihan operator semuanya butuh langkah tambahan antara ketukan dan penagihan. Ketika pelanggan memilih salah satunya, Google mengembalikan pembelian dalam status PENDING alih-alih PURCHASED. Untuk pembayaran tunai, pelanggan menerima kode lewat notifikasi dan email, membawanya ke toko peserta, dan membayar ke kasir. Sampai itu terjadi, Google belum menagih apa pun, dan Anda juga. Aturan Google hanya satu baris: gunakan getPurchaseState() dan berikan hak akses hanya ketika statusnya PURCHASED. Aturan itu juga menyuruh Anda tidak mengonfirmasi pembelian selama masih PENDING, karena konfirmasi hanya untuk pesanan yang sudah dibayar, bukan yang baru dijanjikan.
Apple: pembelian menunggu ketukan orang lain
Status tertunda Apple berarti transaksi butuh tindakan eksternal sebelum bisa selesai. Yang paling umum adalah Ask to Buy, di mana seorang anak memulai pembelian dan seorang penyelenggara keluarga harus menyetujuinya. Di StoreKit 2 panggilan pembelian mengembalikan Product.PurchaseResult.pending. Di StoreKit yang lama transaksi dilaporkan sebagai ditangguhkan (deferred). Bagaimanapun, Apple belum menagih siapa pun, dan transaksi yang selesai, jika datang, tiba secara asinkron melalui Transaction.updates. Tampilkan status menunggu kepada pelanggan dan jangan buka apa pun sampai transaksi yang selesai tiba.
Mengapa memberikan pembelian tertunda merugikan Anda uang sungguhan
Kerugian di sini bukan jenis pengembalian dana, di mana uang yang sudah Anda bukukan ditarik kembali. Ini lebih buruk dalam satu hal tertentu: tidak ada uang untuk ditarik kembali, karena tidak ada yang pernah ditagih.
Anda menyerahkan, dan toko tidak pernah menagih
Ketika Anda membuka akses pada pesanan tertunda yang kemudian dibatalkan, Anda sudah mengeluarkan biaya untuk melayaninya. Komputasi yang menjalankan fitur itu, panggilan API pihak ketiga yang Anda bayar, penyimpanan yang Anda alokasikan, dan untuk barang habis pakai, pembayaran nyata atas hal yang Anda jual. Semua itu keluar untuk pesanan yang tidak menghasilkan pendapatan apa pun. Pengembalian dana setidaknya bermula dari tagihan yang terjadi. Pembelian tertunda yang salah diberikan tidak pernah punya tagihan sama sekali, jadi bahkan tidak muncul sebagai uang yang keluar. Ia muncul sebagai ketiadaan, yang justru itulah alasan ia mudah terlewat dan mudah terulang.
Sinyal pembatalan dan apa artinya
Toko memang memberi tahu Anda ketika pesanan tertunda mati. Di Google Play, produk sekali beli yang gagal mengirim notifikasi ONE_TIME_PRODUCT_CANCELED, tipe 2, dan langganan yang tertunda mengirim SUBSCRIPTION_PENDING_PURCHASE_CANCELED, tipe 20. Ketika pesanan yang sama justru berhasil, Anda mendapat ONE_TIME_PRODUCT_PURCHASED, tipe 1, atau SUBSCRIPTION_PURCHASED, tipe 4. Di Apple tidak ada peristiwa pembatalan untuk ditangkap, karena transaksi ditangguhkan yang ditolak sekadar tidak pernah menjadi transaksi yang selesai. Jika Anda membuka akses lebih awal, keheningan itulah tagihannya.
| Pertanyaan | Google Play | Apple |
|---|---|---|
| Apa yang memicunya | Tunai, transfer bank, sebagian penagihan operator | Persetujuan Ask to Buy, atau tindakan lain yang diperlukan |
| Status yang Anda lihat | PurchaseState PENDING | hasil pending, atau transaksi ditangguhkan |
| Berikan akses ketika | Status adalah PURCHASED | Transaksi selesai |
| Berhasil | ONE_TIME_PRODUCT_PURCHASED (1), SUBSCRIPTION_PURCHASED (4) | Transaksi selesai melalui Transaction.updates |
| Gagal | ONE_TIME_PRODUCT_CANCELED (2), SUBSCRIPTION_PENDING_PURCHASE_CANCELED (20) | Transaksi selesai tidak pernah datang |
| Apakah uang ditagih | Tidak, sampai PURCHASED | Tidak, sampai transaksi selesai |
Jendela waktu dan siapa menunggu siapa
Pembelian tertunda bukan jam yang sedang Anda kejar. Ini jam yang, dari sisi Anda, belum mulai berjalan.
Google Play memberi pelanggan hitungan hari, bukan menit
Pembayaran tunai atau transfer bank lunas menurut jadwal pelanggan, bukan Anda. Pesanan tetap dalam PENDING sampai pelanggan membayar atau jendela waktunya habis dan Google membatalkannya. Jendela konfirmasi tiga hari milik Anda sendiri, yang otomatis mengembalikan dana pembelian yang gagal Anda konfirmasi, bahkan belum mulai sampai pembelian beralih dari PENDING ke PURCHASED. Jadi tidak ada alasan terburu-buru melayani pesanan tertunda. Yang ada hanyalah disiplin untuk menunggu status berubah.
Persetujuan Apple ada di ponsel penyelenggara keluarga
Permintaan Ask to Buy tiba di perangkat penyelenggara sebagai prompt yang mereka setujui atau tolak kapan pun mereka sempat. Itu bisa beberapa menit, jam, atau sehari kemudian, dan aplikasi Anda tidak bisa mempercepatnya. Satu-satunya perilaku yang benar adalah mencerminkan status menunggu dan membiarkan StoreKit menyerahkan transaksi yang selesai kepada Anda jika dan ketika persetujuan datang.

Cara menangani pembelian tertunda tanpa kebocoran
Seluruh pekerjaan ini bermuara pada empat kebiasaan. Tidak ada satu pun yang sulit, dan melewatkan salah satunya adalah tempat uang menghilang.
Berikan pada status yang sudah dibayar, jangan pernah pada yang tertunda
Di Google Play, periksa getPurchaseState() dan berikan hanya pada PURCHASED, dan jangan mengonfirmasi pembelian selama masih PENDING. Di Apple, buka akses hanya pada transaksi yang selesai dan jangan pernah pada hasil pending. Satu aturan ini menutup seluruh kebocoran. Selebihnya adalah soal memastikan Anda benar-benar menyadari saat status yang sudah dibayar tiba.
Periksa ulang saat aplikasi kembali
Peralihan dari tertunda ke terbayar sering terjadi saat aplikasi Anda tidak berjalan. Di Google Play, panggil queryPurchasesAsync() di handler onResume() Anda untuk menangkap pesanan yang menjadi PURCHASED di latar belakang, dan pertahankan listener Real-time Developer Notifications Anda sebagai sumber kebenaran di sisi server. Di Apple, dengarkan Transaction.updates sepanjang umur aplikasi, karena transaksi yang disetujui bisa tiba lama setelah panggilan pembelian awal kembali.
Aktifkan dukungan tertunda dan uji kedua akhirannya
Google mengharuskan Anda memanggil enablePendingPurchases() saat membangun BillingClient, dan mendukung transaksi tertunda untuk produk sekali beli bersifat wajib, bukan opsional. Uji sebelum Anda merilis. Penguji lisensi mendapat dua instrumen uji tambahan untuk bentuk pembayaran yang tertunda, di mana pembayaran otomatis selesai atau otomatis dibatalkan setelah beberapa menit, sehingga Anda bisa mengamati jalur bayar maupun jalur gagal dari awal sampai akhir.
Beri tahu pelanggan bahwa pesanan belum selesai
Pembeli yang tertunda adalah pelanggan nyata di tengah pembelian, bukan sebuah kegagalan. Tunjukkan kepada mereka bahwa pesanan sedang menunggu pembayaran atau persetujuan mereka, dan beri jalan kembali yang jelas untuk menyelesaikannya. Status menunggu yang senyap kehilangan penjualan yang bisa dipulihkan oleh status yang diberi label dengan baik, karena sebagian besar pembeli ini masih menginginkan barangnya dan hanya tinggal satu langkah lagi.
Aliran Real-time Developer Notifications dan App Store Server Notifications yang sama, yang sudah dibaca RefundHalt untuk pengembalian dana dan chargeback, membawa sinyal-sinyal ini juga. Notifikasi pembelian yang mengatakan sebuah pesanan tertunda akhirnya lunas, dan notifikasi pembatalan yang mengatakan tidak, mendarat di dasbor Anda di samping event pendapatan Anda lainnya, sehingga pesanan tertunda yang gagal menjadi sesuatu yang bisa Anda lihat alih-alih sesuatu yang Anda bayar karena kelalaian.
Ringkasnya
Pembelian tertunda adalah pesanan tanpa pembayaran, dan kedua toko dengan tegas menyatakan Anda harus menunggu. Google Play mengembalikan pesanan tunai, transfer bank, dan sebagian penagihan operator dalam status PENDING dan menyuruh Anda memberikan akses hanya pada PURCHASED. Apple mengembalikan transaksi tertunda atau ditangguhkan untuk Ask to Buy dan tindakan lain yang diperlukan, lalu mengirim transaksi yang selesai kemudian melalui Transaction.updates. Buka akses pada status yang sudah dibayar, periksa ulang saat aplikasi Anda dilanjutkan, aktifkan dan uji dukungan tertunda, dan beri label pesanan yang menunggu untuk pelanggan. Lakukan itu dan pembelian tertunda tidak merugikan Anda apa pun. Lewatkan dan Anda menyerahkan produk berbayar untuk tagihan yang tidak pernah datang, yang merupakan satu-satunya kerugian tanpa tanda terima untuk ditunjuk.
Pertanyaan yang sering diajukan
- Apa itu pembelian tertunda?
- Pembelian tertunda adalah pesanan yang telah diterima toko tetapi belum ditagih. Di Google Play ini adalah status pembelian PENDING, digunakan untuk metode pembayaran yang lunas belakangan seperti tunai, transfer bank, dan sebagian penagihan operator. Di Apple ini adalah transaksi tertunda atau ditangguhkan, paling sering pembelian Ask to Buy yang menunggu persetujuan penyelenggara keluarga. Dalam kedua kasus belum ada uang yang ditagih, jadi Anda tidak boleh memberikan akses.
- Haruskah saya memberikan akses saat pembelian masih tertunda?
- Tidak. Berikan hak akses hanya ketika statusnya PURCHASED di Google Play, atau ketika transaksi selesai di Apple. Jika Anda membuka fitur saat pesanan masih tertunda dan pembayarannya tidak pernah lunas, Anda telah menyerahkan produk secara gratis, dan tidak ada tagihan untuk dibalik karena tidak ada yang pernah dibuat.
- Metode pembayaran mana yang menyebabkan pembelian tertunda di Google Play?
- Metode pembayaran yang diselesaikan di luar jalur utama. Pembayaran tunai di toko fisik, transfer bank, dan sebagian opsi penagihan operator membutuhkan langkah tambahan antara ketukan dan penagihan, sehingga Google mengembalikan pembelian dalam status PENDING alih-alih PURCHASED. Untuk pembayaran tunai, pelanggan mendapat kode lewat notifikasi dan email, lalu membayar di toko peserta.
- Apa itu Ask to Buy, dan bagaimana kaitannya dengan pembelian tertunda?
- Ask to Buy adalah fitur Family Sharing dari Apple yang memungkinkan seorang anak meminta pembelian yang harus disetujui oleh seorang penyelenggara keluarga. Selama permintaan menunggu, pembelian berada dalam status tertunda Apple, dikembalikan sebagai Product.PurchaseResult.pending di StoreKit 2 atau sebagai transaksi ditangguhkan di StoreKit yang lama. Transaksi yang selesai baru tiba, melalui Transaction.updates, jika dan ketika penyelenggara menyetujuinya.
- Apa yang terjadi jika pembelian tertunda tidak pernah dibayar?
- Pesanan dibatalkan dan tidak ada uang yang berpindah tangan. Di Google Play Anda menerima notifikasi ONE_TIME_PRODUCT_CANCELED, tipe 2, untuk produk sekali beli, atau SUBSCRIPTION_PENDING_PURCHASE_CANCELED, tipe 20, untuk langganan. Di Apple, transaksi ditangguhkan sekadar tidak pernah menjadi transaksi yang selesai. Jika Anda sudah memberikan akses, saat itulah kerugian menjadi nyata.
- Apakah pembelian tertunda sama dengan pengembalian dana?
- Tidak. Pengembalian dana membalik pembayaran yang benar-benar ditagih. Pembelian tertunda yang gagal tidak pernah ditagih sejak awal, jadi tidak ada yang bisa dibalik dan tidak ada yang muncul dalam laporan pengembalian dana. Jika Anda membukanya lebih awal, biayanya adalah komputasi, panggilan API, penyimpanan, atau barang habis pakai yang Anda keluarkan untuk melayani pesanan yang tidak menghasilkan pendapatan.
Sumber dan bacaan lanjutan
- Android Developers: Integrate the Google Play Billing Library (PENDING purchase state, grant entitlement only on PURCHASED, enablePendingPurchases, queryPurchasesAsync, cash payment code flow, three-day acknowledgement window begins on transition to PURCHASED)
- Android Developers: Real-time developer notifications reference (OneTimeProductNotification ONE_TIME_PRODUCT_PURCHASED=1 and ONE_TIME_PRODUCT_CANCELED=2; SubscriptionNotification SUBSCRIPTION_PURCHASED=4 and SUBSCRIPTION_PENDING_PURCHASE_CANCELED=20)
- Android Developers: Test Google Play Billing (license testers get delayed-payment test instruments that auto-complete or auto-cancel for testing pending transactions)
- Apple Developer: Product.PurchaseResult (the pending case, returned when a purchase needs action such as Ask to Buy approval before it completes)
- Apple Developer: SKPaymentTransactionState.deferred (a transaction whose final status is pending an external action such as Ask to Buy)
- Apple Developer: Transaction.updates (StoreKit delivers transaction updates, including ones approved later, asynchronously)
RefundHalt
Autopilot refund untuk App Store dan Google Play
Baca selanjutnya
Perpanjangan lebih sering gagal daripada pelanggan membatalkan, dan churn tak sengaja itu adalah pendapatan yang masih bisa Anda menangkan kembali
Kartu yang ditolak, bukan ketukan pada tombol batal, mengakhiri sebagian besar langganan, dan toko terus mencoba menagih selama berminggu-minggu. Berikut cara kerja masa tenggang penagihan, percobaan ulang penagihan, dan penahanan akun di App Store dan Google Play, serta berapa sebenarnya biaya churn tak sengaja bagi Anda.
Pembelian dalam aplikasi tanpa izin yang dilakukan anak-anak hampir selalu dikembalikan ke orang tua, dan Anda yang menanggung biayanya
Ketika seorang anak membeli paket koin di ponsel orang tuanya, baik Apple maupun Google mengembalikan uangnya dan tidak satu pun dari mereka bertanya kepada Anda lebih dulu. Regulator yang merancangnya seperti itu. Berikut cara kerja pengembalian dana pembelian dalam aplikasi tanpa izin ini di setiap toko, jendela 15 menit tempat uang itu berpindah, dan berapa biaya sebenarnya bagi Anda.