Semakin populer aplikasi Anda, kemungkinan adanya pengguna berbahaya yang ingin menyalahgunakan aplikasi Anda juga akan meningkat. Topik ini menjelaskan rekomendasi yang harus diikuti untuk membantu mencegah serangan ini pada integrasi penagihan Anda dan mengurangi dampak penyalahgunaan dalam aplikasi Anda.
Memindahkan logika sensitif ke backend Anda
Sejauh desain aplikasi Anda memungkinkan, pindahkan data dan logika sensitif ke server backend yang Anda kontrol. Semakin banyak data dan logika yang Anda miliki di perangkat frontend, semakin rentan untuk dimodifikasi atau diubah.
Misalnya, game catur online sebaiknya memvalidasi semua pergerakan di backend, bukan serta-merta menganggap frontend akan selalu mengirim pergerakan yang valid.
Selain itu, bergantung pada desain sistem Anda, jika Anda menemukan masalah keamanan atau kerentanan, mungkin akan lebih mudah untuk men-debug, memperbaiki, dan meluncurkan update pada backend bukan pada frontend.
Memverifikasi pembelian sebelum memberikan hak
Kasus khusus data dan logika sensitif yang harus ditangani di backend adalah verifikasi dan konfirmasi pembelian. Setelah pengguna melakukan pembelian, Anda harus melakukan langkah berikut:
- Kirim
purchaseToken
yang sesuai ke backend Anda. Ini berarti Anda harus menyimpan data semua nilaipurchaseToken
untuk semua pembelian. - Verifikasi bahwa nilai
purchaseToken
untuk pembelian saat ini tidak cocok dengan nilaipurchaseToken
sebelumnya.purchaseToken
bersifat unik secara global, sehingga Anda dapat menggunakan nilai ini dengan aman sebagai kunci utama dalam database. - Gunakan endpoint
Purchases.products:get
atauPurchases.subscriptionsv2:get
di Google Play Developer API untuk memverifikasi dengan Google bahwa pembelian tersebut sah. - Jika pembelian sah dan belum pernah digunakan sebelumnya, maka Anda dapat dengan aman memberikan hak atas langganan atau item dalam aplikasi.
- Untuk langganan, saat
linkedPurchaseToken
ditetapkan dalamPurchases.subscriptionsv2:get
, Anda juga harus menghapuslinkedPurchaseToken
dari database dan mencabut hak yang diberikan kelinkedPurchaseToken
untuk memastikan bahwa beberapa pengguna tidak diberi hak atas pembelian yang sama. - Sebaiknya Anda memberikan hak hanya jika pembelian berstatus
PURCHASED
dan pastikan untuk menangani pembelianPENDING
dengan benar. Jika ada lonjakan pembelianCANCELED
, Anda mungkin memberikan hak saat pembelian masih berstatusPENDING
. Anda dapat menemukan informasi selengkapnya di Menangani transaksi yang tertunda. Setelah memberikan hak, jika Anda ingin menggunakan dan mengonfirmasi produk habis pakai, gunakan
Purchases.products:consume
Play Developer API di server backend aman Anda. Untuk mengonfirmasi produk tidak habis pakai atau langganan, panggil endpoint Play Developer API yang relevan, baikPurchases.products:acknowledge
atauPurchases.subscriptions:acknowledge
di server backend aman Anda. Konfirmasi diperlukan, karena notifikasi ini memberi tahu Google Play bahwa pengguna telah diberi hak atas pembelian. Anda harus mengonfirmasi pembelian segera setelah memberikan hak.Perlu diketahui bahwa meskipun Anda dapat mengonfirmasi atau menggunakan pembelian di sisi klien melalui aplikasi, API sisi server memberikan perlindungan tambahan terhadap masalah seperti konektivitas jaringan yang buruk dan aktivitas berbahaya. Misalnya, pertimbangkan apakah pengguna telah membeli item dari aplikasi Anda, tetapi kehilangan konektivitas jaringan saat pembelian divalidasi. Tanpa konfirmasi server, mereka mungkin perlu login kembali melalui aplikasi untuk menyelesaikan proses konfirmasi. Atau, jika pengguna tidak login kembali dalam waktu tiga hari, dana pembelian akan otomatis dikembalikan karena tidak adanya konfirmasi pembelian. Konfirmasi server mencegah skenario ini dengan mengirimkan konfirmasi segera setelah Google Play memberi tahu server bahwa pembelian valid.
Untuk informasi lebih lanjut terkait konfirmasi dan penggunaan pembelian, lihat Memproses pembelian.
Melindungi konten yang tidak dikunci
Untuk mencegah pengguna berbahaya mendistribusikan ulang konten yang tidak dikunci, jangan paketkan konten tersebut ke dalam file APK Anda. Sebagai gantinya, lakukan salah satu hal berikut:
- Gunakan layanan real-time untuk menayangkan konten, seperti content feed. Dengan menayangkan konten melalui layanan real-time, konten Anda pun akan terus diperbarui.
- Gunakan server jarak jauh untuk menayangkan konten.
Saat menayangkan konten dari server jarak jauh atau layanan real-time, Anda dapat menyimpan konten yang tidak dikunci di memori atau kartu SD perangkat. Jika Anda menyimpan konten di kartu SD, pastikan untuk mengenkripsi konten tersebut dan menggunakan kunci enkripsi khusus perangkat.
Mendeteksi dan menangani pembelian yang dibatalkan
Pembelian yang dibatalkan adalah pembelian yang telah dibatalkan, dicabut, atau dikembalikan. Jika pembelian yang dibatalkan sebelumnya pernah memberikan izin kepada pengguna atas item dalam aplikasi atau konten lainnya, Anda dapat menggunakan Voided Purchases API untuk memperoleh alasan pembatalan pembelian beserta konten terkait yang dapat Anda ambil kembali.
Pembelian item dalam aplikasi dan langganan dapat dibatalkan karena berbagai alasan, termasuk:
- Pembelian dibatalkan, baik oleh pengguna, developer, maupun Google. Untuk langganan, perlu diperhatikan bahwa hal ini merujuk pada pembatalan pembelian langganan, bukan pembatalan langganan itu sendiri.
- Pembelian dikembalikan.
- Developer aplikasi membatalkan atau mengembalikan dana pesanan pengguna dan mencentang opsi "cabut" pada konsol.
Berdasarkan alasan pembatalan pembelian, dan memperhitungkan data perilaku pengguna sebelumnya, Anda dapat memutuskan suatu tindakan. Kami merekomendasikan untuk mengimplementasikan satu atau beberapa langkah berikut:
- Jalankan pengambilan kembali: Saat pembelian dibatalkan, Anda dapat mengambil kembali item yang tidak digunakan seolah-olah tidak pernah dibeli. Misalnya, jika pembelian mata uang dalam game dibatalkan, Anda dapat mengambil kembali mata uang yang telah diberikan kepada pengguna tersebut. Apabila pengguna telah menghabiskan mata uang tersebut, pertimbangkan untuk menetapkan saldo mata uang tersebut menjadi negatif dan membatasi aktivitas aplikasi serta pembelian di masa mendatang hingga saldo mata uang menjadi positif.
- Implementasi beberapa teguran: Pertimbangkan untuk memberikan tindakan ringan bagi pengguna yang baru pertama kali melanggar, seperti menampilkan peringatan dalam aplikasi. Untuk pelanggar berulang, pertimbangkan tindakan yang lebih berat.
- Nonaktifkan pembelian untuk sementara: Seperti penerapan beberapa teguran, pertimbangkan untuk menonaktifkan pembelian bagi pengguna yang melakukan pembatalan pembelian sampai Anda dapat menyelidiki alasannya secara lebih mendetail.
- Tolak akses aplikasi untuk sementara atau permanen: Untuk kasus ekstrem dengan aktivitas berbahaya yang terus berulang, pertimbangkan untuk menolak akses ke aplikasi Anda, baik untuk sementara maupun permanen.
- Lakukan panggilan ke Voided Purchases API dengan cukup sering: Saat Anda mendeteksi satu atau beberapa pembelian yang dibatalkan, pertimbangkan untuk melakukan panggilan yang lebih sering ke Voided Purchases API guna mengambil kembali pembelian sebelum pengguna menggunakannya. Anda dapat menemukan informasi selengkapnya tentang kuota Voided Purchases API dalam dokumentasi Voided Purchases API.
Membantu Google mendeteksi penipuan sebelum terjadi
Beberapa jenis penipuan berkaitan dengan pengguna berbahaya yang membuat beberapa akun Google dan akun dalam aplikasi untuk menyembunyikan aktivitas mereka.
Gunakan metode setObfuscatedAccountId
dan setObfuscatedProfileId
pada builder agar BillingFlowParams
membantu Google memetakan akun Google ke akun dalam aplikasi.
Google menggunakan data ini untuk mendeteksi perilaku mencurigakan dan memblokir beberapa jenis transaksi penipuan sebelum transaksi tersebut diselesaikan.
Mengambil tindakan terhadap pelanggaran hak cipta dan merek dagang
Jika Anda menggunakan server jarak jauh untuk menayangkan atau mengelola konten, minta aplikasi Anda untuk memverifikasi status pembelian konten yang sudah terbuka setiap kali pengguna mengaksesnya. Hal ini memungkinkan Anda mencabut penggunaannya saat diperlukan dan meminimalkan pembajakan. Jika Anda menjumpai konten Anda didistribusikan kembali di Google Play, pastikan untuk bertindak dengan cepat dan tegas. Untuk detail selengkapnya, lihat halaman Pertanyaan Umum Terkait Hak Cipta di Pusat Bantuan Hak Cipta.