Google Play berupaya memastikan keamanan bagi pengguna dan developer. Kami memahami bahwa membangun bisnis aplikasi yang berkembang bergantung pada platform tepercaya—yang mengamankan laba atas investasi Anda dengan secara proaktif mempertahankan diri dari pihak berniat jahat.
Dokumen ini menjelaskan rekomendasi untuk mencegah serangan pada integrasi penagihan Anda dan mengurangi dampak penyalahgunaan dalam aplikasi Anda.
Meningkatkan perlindungan
API dan alat berikut dapat mengurangi risiko di aplikasi Anda:
- Voided Purchases API: Mencabut akses ke pesanan yang dibatalkan.
- ID Akun yang Di-obfuscate: Membantu mendeteksi saat beberapa perangkat melakukan pembelian pada akun yang sama dalam waktu singkat.
- **Penggunaan backend**: Alat seperti Purchases.products:consume mengalihkan logika bisnis ke backend aman Anda, sehingga mencegah perubahan sisi klien. Selain menggunakan API platform ini, terapkan praktik terbaik berikut untuk lebih mengamankan integrasi Anda dari akses yang tidak sah.
Mencegah spoofing lokasi
Google Play menyediakan perlindungan bawaan untuk mencegah pihak tidak bertanggung jawab menggunakan lokasi palsu untuk mengeksploitasi perbedaan mata uang regional (juga dikenal sebagai spoofing lokasi), menyalahgunakan promosi dan insentif langganan, serta mencoba penipuan kartu voucher.
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, jika Anda menemukan kerentanan atau masalah keamanan, bergantung pada desain sistem Anda, mungkin akan lebih mudah untuk men-debug, memperbaiki, dan men-deploy update di backend daripada di 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 nilai purchaseToken untuk semua pembelian.
- Verifikasi bahwa nilai purchaseToken untuk pembelian saat ini tidak cocok dengan nilai purchaseToken sebelumnya. purchaseToken bersifat unik secara global, sehingga Anda dapat menggunakan nilai ini dengan aman sebagai kunci utama dalam database.
- Gunakan endpoint Purchases.products:get atau Purchases.subscriptionsv2:get di Google Play Developer API untuk memverifikasi dengan Google bahwa pembelian tersebut sah.
- Jika Anda yakin bahwa pembelian tersebut sah, belum pernah digunakan atau diproses sebelumnya, dan pengguna lulus semua pemeriksaan kelayakan dan penipuan Anda, maka Anda dapat dengan aman memberikan hak atas langganan atau item dalam aplikasi.
- Pemeriksaan kelayakan dan penyalahgunaan: Verifikasi bahwa pengguna masih memenuhi syarat untuk item tersebut. Jika Anda mengonfigurasi alur penagihan dengan obfuscatedAccountId atau obfuscatedProfileId, periksa apakah pemetaan pembelian cocok dengan akun pengguna yang diharapkan di sistem Anda. Lakukan pemeriksaan penyalahgunaan, risiko, atau keamanan tambahan yang diperlukan oleh backend Anda.
- Pengembalian dana eksplisit untuk pembelian yang tidak sah: Jika pembelian gagal dalam pemeriksaan validasi atau penyalahgunaan Anda, jangan berikan hak dan jangan konfirmasi atau gunakan pembelian tersebut. Daripada membiarkan pembelian
otomatis dikembalikan dananya karena tidak adanya konfirmasi (yang ambigu karena juga dapat disebabkan oleh waktu tunggu pemrosesan), cabut dan kembalikan dana pembelian secara eksplisit menggunakan endpoint
purchases.subscriptionsv2:revoke(dengan"fullRefund": {}) untuk langganan atau endpointOrders:refunddengan parameterrevokeyang ditetapkan ketrueuntuk produk satu kali. Mencabut pembelian memastikan bahwa pengguna tidak lagi memiliki hak atas pembelian tersebut, dan memberi Google Play sinyal yang jelas bahwa pembelian tersebut ditolak oleh developer.
- Untuk langganan, saat linkedPurchaseToken ditetapkan dalam Purchases.subscriptionsv2:get, Anda juga harus menghapus linkedPurchaseToken dari database dan mencabut hak yang diberikan ke linkedPurchaseToken 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 pembelian tertunda dengan benar. Jika ada lonjakan pembelian CANCELED, Anda mungkin memberikan hak saat pembelian masih berstatus PENDING. 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 API Play Developer yang relevan, baik Purchases.products:acknowledge atau Purchases.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 gabungkan konten tersebut dalam file APK Anda. Sebagai gantinya, lakukan salah satu hal berikut:
- Gunakan layanan real-time untuk menayangkan konten, seperti content feed. Menayangkan konten melalui layanan real-time juga memungkinkan Anda menjaga konten tetap baru.
- 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 perangkat atau menyimpannya di kartu SD perangkat. Jika Anda menyimpan konten di kartu SD, pastikan untuk mengenkripsi konten dan menggunakan kunci enkripsi khusus perangkat.
Mendeteksi dan menangani pembelian yang dibatalkan
Pembelian yang dibatalkan adalah pembelian yang telah dibatalkan, dicabut, atau ditagih balik. Jika pembelian yang dibatalkan sebelumnya memberikan item dalam aplikasi atau konten lainnya kepada pengguna, Anda dapat menggunakan Voided Purchases API untuk mendapatkan alasan pembelian dibatalkan 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, atau Google (termasuk pembelian yang dibatalkan otomatis dan tidak dikonfirmasi). Untuk langganan, perhatikan 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 dengan mempertimbangkan data perilaku pengguna sebelumnya, Anda dapat memutuskan tindakan yang akan diambil. Sebaiknya terapkan satu atau beberapa hal 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. Jika pengguna telah membelanjakan mata uang tersebut, pertimbangkan untuk menetapkan saldo mata uang ke negatif dan membatasi aktivitas aplikasi serta pembelian di masa mendatang hingga saldo mata uang menjadi positif.
Penerapan beberapa teguran: Pertimbangkan untuk mengambil tindakan yang tidak terlalu drastis bagi pelanggar pertama kali, 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.
Melarang akses ke aplikasi Anda untuk sementara atau secara permanen: Untuk kasus ekstrem dengan aktivitas berbahaya yang berulang, pertimbangkan untuk melarang akses ke aplikasi Anda, baik untuk sementara atau secara permanen.
Lakukan panggilan yang sering ke Voided Purchases API: Saat mendeteksi satu atau beberapa pembelian yang dibatalkan, pertimbangkan untuk melakukan panggilan yang lebih sering ke Voided Purchases API untuk mengambil kembali pembelian sebelum pengguna dapat menggunakannya. Anda dapat menemukan informasi selengkapnya tentang kuota Voided Purchases API di 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 di builder untuk
BillingFlowParams guna 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 selesai.
Mengambil tindakan terhadap pelanggaran hak cipta dan merek dagang
Jika Anda menggunakan server jarak jauh untuk menayangkan atau mengelola konten, minta aplikasi Anda memverifikasi status pembelian konten yang tidak dikunci setiap kali pengguna mengakses konten tersebut. Hal ini memungkinkan Anda mencabut penggunaan jika diperlukan dan meminimalkan pembajakan. Jika Anda melihat konten Anda didistribusikan ulang di Google Play, pastikan untuk bertindak cepat dan tegas. Untuk detail selengkapnya, lihat halaman Pertanyaan Umum Terkait Hak Cipta di Pusat Bantuan Hak Cipta.