Produk pembelian satu kali memiliki siklus proses yang lebih sederhana daripada produk langganan, tetapi masih ada beberapa status dan peristiwa transisi yang diperlukan backend Anda agar dapat ditangani dengan benar.
Pembelian produk sekali beli yang baru
Setelah pengguna menyelesaikan alur penagihan, aplikasi Anda dapat melihat informasi tentang pembelian baru dengan salah satu dari dua cara berikut:
- Terapkan antarmuka
PurchasesUpdatedListener
dariBillingClient
untuk menerima update pembelian secara otomatis. - Panggil
metode
BillingClient.queryPurchasesAsync()
.
Setelah menerima pembelian baru, gunakan metode
getPurchaseState
untuk menentukan status pembayaran pembelian baru.
Transaksi yang tertunda
Pembelian produk sekali beli hanya menghasilkan RTDN saat tertunda. Format
kolom data
untuk jenis RTDN ini adalah
OneTimeProductNotification
. Untuk
memperbarui status pembelian backend, gunakan token pembelian yang disediakan di
objek OneTimeProductNotification
untuk memanggil
metode
purchases.products.get
. Metode ini memberikan status pembelian dan konsumsi terbaru berdasarkan
token pembelian.
Anda harus menangani RTDN terkait transaksi di backend aman Anda.
Menangani transaksi yang telah selesai
Saat pengguna menyelesaikan pembelian produk sekali beli yang tertunda, Google Play akan mengirimkan
pesan OneTimeProductNotification
dengan jenis ONE_TIME_PRODUCT_PURCHASED
.
Saat Anda menerima RTDN ini, proses pembelian seperti yang dijelaskan dalam Memproses
pembelian produk sekali beli di backend.
Menangani transaksi yang dibatalkan
Saat pembelian produk sekali beli yang tertunda dibatalkan, Google Play akan mengirimkan
pesan OneTimeProductNotification
dengan jenis ONE_TIME_PRODUCT_CANCELED
.
Misalnya, hal ini dapat terjadi jika pengguna tidak menyelesaikan pembayaran dalam
jangka waktu yang diperlukan. Saat server backend Anda menerima notifikasi ini, panggil
metode
purchases.products.get
untuk mendapatkan status pembelian terbaru, lalu perbarui backend Anda,
termasuk hak pengguna.
Hanya pembelian produk sekali beli di negara bagian Pending
yang dapat dibatalkan. Jika
pembelian produk sekali beli di negara bagian Purchased
dikembalikan dananya, Anda akan diberi tahu
melalui Voided Purchases API.
Memproses pembelian produk sekali beli di backend Anda
Baik Anda telah mendeteksi pembelian baru melalui RTDN ONE_TIME_PRODUCT_PURCHASED
atau Anda telah diberi tahu dalam aplikasi melalui
PurchasesUpdatedListener
atau mengambil pembelian secara manual dalam
metode onResume()
aplikasi, Anda harus memproses pembelian baru. Sebaiknya
tangani pemrosesan pembelian di backend Anda untuk keamanan yang lebih baik.
Ikuti langkah-langkah berikut untuk memproses pembelian satu kali yang baru:
- Buat kueri
endpoint
purchases.products.get
untuk mendapatkan status pembelian produk sekali beli terbaru. Agar dapat memanggil metode ini untuk pembelian, Anda memerlukanpurchaseToken
yang sesuai, baik dari aplikasi Anda maupun dari RTDNONE_TIME_PRODUCT_PURCHASED
. - Panggil
getPurchaseState()
dan pastikan status pembeliannya adalahPURCHASED
. - Verifikasi pembelian.
- Beri pengguna akses ke konten. Akun pengguna yang terkait dengan
pembelian dapat diidentifikasi dengan kolom
obfuscatedExternalAccountId
daripurchases.products.get
, jika akun ditetapkan menggunakansetObfuscatedAccountId()
saat pembelian dilakukan.- Untuk pembelian produk tidak habis pakai, konfirmasi pengiriman konten
dengan memanggil
metode
purchases.products.acknowledge
. Pastikan pembelian belum dikonfirmasi sebelumnya dengan memeriksa kolomacknowledgementState
. - Jika produk tersebut habis pakai, tandai item sebagai telah digunakan dengan memanggil
metode
purchases.products.consume
agar pengguna dapat membeli item itu lagi setelah menghabiskan item tersebut. Metode ini juga mengonfirmasi pembelian.
- Untuk pembelian produk tidak habis pakai, konfirmasi pengiriman konten
dengan memanggil
metode
Ada juga metode konfirmasi pembelian dan konsumsi yang tersedia di Library Layanan Penagihan Play yang memungkinkan Anda memproses pembelian dari aplikasi. Namun, sebaiknya Anda menangani pemrosesan di backend jika ada, untuk penerapan yang lebih aman.