Mencegah penipuan dan penyalahgunaan

Google Play berdedikasi untuk memastikan keamanan bagi pengguna dan developer. Kami memahami bahwa membangun bisnis aplikasi yang berkembang pesat bergantung pada platform tepercaya, yang mengamankan laba atas investasi Anda dengan secara proaktif melindungi dari pelaku kejahatan.

Dokumen ini menjelaskan rekomendasi untuk mencegah serangan pada integrasi penagihan Anda dan mengurangi dampak penyalahgunaan dalam aplikasi Anda.

Meningkatkan perlindungan Anda

API dan alat berikut dapat memitigasi 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 di akun yang sama dalam waktu singkat.
  • Penggunaan backend: Alat seperti Purchases.products:consume mengalihkan logika bisnis ke backend aman Anda, sehingga mencegah pemalsuan 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 yang tidak bertanggung jawab menggunakan lokasi palsu untuk mengeksploitasi perbedaan mata uang regional (juga dikenal sebagai pemalsuan lokasi), menyalahgunakan promosi dan insentif langganan, serta mencoba melakukan 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, bergantung pada desain sistem Anda, jika Anda menemukan masalah keamanan atau kerentanan, mungkin akan lebih mudah untuk men-debug, memperbaiki, dan men-deploy 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. Artinya, 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 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 di Purchases.subscriptionsv2:get, Anda juga harus menghapus linkedPurchaseToken dari database dan mencabut hak yang diberikan ke linkedPurchaseToken untuk memastikan bahwa beberapa pengguna tidak memiliki hak atas pembelian yang sama.
  • Sebaiknya Anda memberikan hak hanya jika status pembelian adalah DIBELI dan pastikan untuk menangani pembelian yang berstatus TERTUNDA dengan benar. Jika ada lonjakan pembelian DIBATALKAN, Anda mungkin memberikan hak saat pembelian masih berstatus TERTUNDA. Anda dapat menemukan informasi selengkapnya di bagian 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, 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 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 ditagih balik. Jika pembelian yang dibatalkan sebelumnya pernah memberikan item dalam aplikasi atau konten lainnya kepada pengguna, Anda dapat menggunakan Voided Purchases API untuk mendapatkan 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 (termasuk pembelian yang dibatalkan otomatis dan tidak dikonfirmasi). Untuk langganan, perlu diperhatikan bahwa hal ini mengacu 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 mempertimbangkan data perilaku pengguna sebelumnya, Anda dapat menentukan 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. Jika pengguna telah menghabiskan mata uang tersebut, pertimbangkan untuk menetapkan saldo mata uang tersebut ke minus dan membatasi aktivitas aplikasi serta pembelian di masa mendatang hingga saldo mata uang kembali 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 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 diselesaikan.

Mengambil tindakan terhadap pelanggaran hak cipta dan merek dagang

Jika Anda menggunakan server jarak jauh untuk menayangkan atau mengelola konten, perintahkan aplikasi Anda untuk memverifikasi status pembelian konten yang tidak dikunci setiap kali pengguna mengakses konten. Hal ini memungkinkan Anda mencabut penggunaannya saat diperlukan dan meminimalkan pembajakan. Jika Anda menjumpai konten Anda didistribusikan kembali di Google Play, pastikan untuk bertindak cepat dan tegas. Untuk detail selengkapnya, lihat halaman Pertanyaan Umum Terkait Hak Cipta di Pusat Bantuan Hak Cipta.