Lotta ad attività fraudolente e illecite

Man mano che la tua app diventa sempre più popolare, può anche attirare l'attenzione indesiderata di utenti malintenzionati che potrebbero voler abusare della tua app. In questo argomento vengono descritti dei consigli da seguire per evitare questi attacchi all'integrazione della fatturazione e ridurre l'impatto degli abusi nella tua app.

Sposta la logica sensibile nel backend

Nella misura consentita dalla progettazione dell'app, sposta la logica e i dati sensibili su un server di backend controllato da te. Maggiore è la quantità di dati e logica contenuti in un dispositivo frontend, più vulnerabile è la sua modifica o la sua manomissione.

Ad esempio, in un gioco di scacchi online devono convalidare tutte le mosse nel backend invece di confidare che il frontend invii sempre mosse legali.

Inoltre, se rilevi vulnerabilità o problemi di sicurezza, a seconda della progettazione del tuo sistema potrebbe essere più semplice eseguire il debug, la correzione e l'implementazione degli aggiornamenti sul backend anziché sul frontend.

Verifica gli acquisti prima di concedere i diritti

Un caso speciale di logica e dati sensibili che dovrebbe essere gestito nel backend sono la verifica e il riconoscimento dell'acquisto. Dopo che un utente ha effettuato un acquisto, devi procedere come segue:

  1. Invia il valore purchaseToken corrispondente al tuo backend. Ciò significa che devi conservare un record di tutti i valori purchaseToken per tutti gli acquisti.
  2. Verifica che il valore purchaseToken per l'acquisto corrente non corrisponda ad alcun valore precedente di purchaseToken. purchaseToken è univoco a livello globale, quindi puoi tranquillamente utilizzare questo valore come chiave primaria nel tuo database.
  3. Utilizza gli endpoint Purchases.products:get o Purchases.subscriptionsv2:get nell'API Google Play Developer per verificare con Google che l'acquisto sia legittimo.
  4. Se l'acquisto è legittimo e non è stato utilizzato in passato, puoi concedere in sicurezza il diritto all'articolo in-app o all'abbonamento.
  5. Per gli abbonamenti, se la proprietà linkedPurchaseToken è impostata su Purchases.subscriptionsv2:get, devi anche rimuovere linkedPurchaseToken dal database e revocare il diritto concesso a linkedPurchaseToken per assicurarti che più utenti non abbiano diritto per lo stesso acquisto.
  6. Devi concedere il diritto solo quando lo stato di acquisto è PURCHASED e assicurarti di gestire correttamente gli acquisti di PENDING. Se si verifica un picco di CANCELED acquisti, è possibile che tu stia concedendo diritti quando l'acquisto è ancora nello stato PENDING. Puoi trovare ulteriori informazioni nella sezione Gestire le transazioni in attesa.
  7. Dopo aver concesso il diritto, se vuoi consumare e confermare un prodotto di consumo, usa l'API Play Developer Purchases.products:consume sul tuo server di backend sicuro. Per confermare un prodotto non consumabile o un abbonamento, chiama l'endpoint API Play Developer pertinente, Purchases.products:acknowledge o Purchases.subscriptions:acknowledge sul tuo server di backend sicuro. È richiesta l'accettazione, in quanto informa Google Play che all'utente è stato concesso il diritto all'acquisto. Devi confermare l'acquisto subito dopo aver concesso il diritto.

    Tieni presente che sebbene tu possa confermare o utilizzare l'acquisto sul lato client tramite l'app, le API lato server offrono ulteriore protezione da problemi come scarsa connettività di rete e attività dannose. Ad esempio, valuta se un utente ha acquistato un articolo dalla tua app, ma ha perso la connettività di rete durante la convalida dell'acquisto. Senza la conferma del server, potrebbero dover accedere di nuovo tramite l'app per completare il processo di conferma. In caso contrario, se l'utente non esegue nuovamente l'accesso entro tre giorni, l'acquisto viene rimborsato automaticamente a causa della mancata conferma dell'acquisto. La conferma del server impedisce questo scenario inviando una conferma non appena Google Play comunica al server che l'acquisto è valido.

    Per ulteriori informazioni sulla conferma e sul consumo degli acquisti, consulta la sezione Elaborazione degli acquisti.

Protezione dei contenuti sbloccati

Per impedire a utenti malintenzionati di ridistribuire i contenuti sbloccati, non raggrupparli nel file APK. Procedi invece in uno dei seguenti modi:

  • Utilizza un servizio in tempo reale per pubblicare i tuoi contenuti, ad esempio un feed di contenuti. La pubblicazione di contenuti tramite un servizio in tempo reale ti consente inoltre di mantenerli aggiornati.
  • Utilizza un server remoto per inviare i contenuti.

Quando invii contenuti da un server remoto o da un servizio in tempo reale, puoi archiviare i contenuti sbloccati nella memoria del dispositivo o sulla scheda SD del dispositivo. Se archivi contenuti su una scheda SD, assicurati di criptarli e di utilizzare una chiave di crittografia specifica per il dispositivo.

Rileva e gestisci gli acquisti annullati

Gli acquisti annullati sono acquisti che sono stati annullati, revocati o stornati. Se un acquisto annullato aveva precedentemente concesso a un utente articoli in-app o altri contenuti, puoi utilizzare l'API Voided Purchases per conoscere il motivo dell'annullamento dell'acquisto e gli eventuali contenuti associati che puoi recuperare.

Gli acquisti di articoli in-app e abbonamenti possono essere annullati per diversi motivi, tra cui:

  • Un acquisto viene annullato dall'utente, dallo sviluppatore o da Google. Per gli abbonamenti, tieni presente che l'annullamento riguarda l'acquisto di un abbonamento, anziché l'annullamento dell'abbonamento stesso.
  • Un acquisto viene riaddebitato.
  • Lo sviluppatore dell'app annulla o rimborsa l'ordine di un utente e controlla l'opzione "revoca" nella console.

In base al motivo dell'annullamento dell'acquisto e tenendo conto dei precedenti dati sul comportamento degli utenti, puoi decidere come procedere. Ti consigliamo di implementare uno o più dei seguenti passaggi:

  • Usa i clawback: quando un acquisto viene annullato, puoi recuperare gli articoli inutilizzati come se non fossero mai stati acquistati. Ad esempio, se l'acquisto di valuta in-game è stato annullato, potresti recuperare la valuta già concessa all'utente. Nel caso in cui l'utente abbia già speso la valuta, valuta la possibilità di impostare il saldo della valuta su negativo e di limitare l'attività nell'app e gli acquisti futuri finché il saldo in valuta non diventa positivo.
  • Implementazione di più avvertimenti: prendi in considerazione la possibilità di adottare azioni meno drastiche per i trasgressori per la prima volta, ad esempio mostrare avvisi in-app. In caso di trasgressori recidivi, prendi in considerazione misure più severe.
  • Disattiva temporaneamente gli acquisti: analogamente a quanto accade per l'implementazione degli avvertimenti multipli, valuta la possibilità di disattivare gli acquisti degli utenti con acquisti annullati fino a quando non potrai esaminare più a fondo il motivo dell'annullamento degli acquisti.
  • Non consentire temporaneamente o in modo permanente l'accesso alla tua app: in casi estremi con attività dannose ripetute, valuta la possibilità di non consentire l'accesso all'app, in modo temporaneo o permanente.
  • Effettua chiamate frequenti all'API Voided Purchases: quando rilevi uno o più acquisti annullati, valuta la possibilità di effettuare chiamate più frequenti all'API Voided Purchases per riprendere gli acquisti prima che l'utente possa usufruirne. Puoi trovare ulteriori informazioni sulle quote dell'API Voided Purchases nella documentazione dell'API Voided Purchases.

Aiuta Google a rilevare le attività fraudolente prima che si verifichino

Alcuni tipi di attività fraudolente sono correlati a utenti malintenzionati che creano più account Google e in-app per nascondere le proprie attività.

Utilizza i metodi setObfuscatedAccountId e setObfuscatedProfileId nello strumento di creazione per BillingFlowParams per aiutare Google a mappare gli Account Google agli account in-app.

Google utilizza questi dati per rilevare comportamenti sospetti e bloccare alcuni tipi di transazioni fraudolente prima che vengano completate.

Provvedimenti contro la violazione di marchi e copyright

Se utilizzi un server remoto per consegnare o gestire i contenuti, fai in modo che la tua app verifichi lo stato di acquisto dei contenuti sbloccati ogni volta che un utente accede ai contenuti. In questo modo, puoi revocare l'utilizzo quando necessario e ridurre al minimo la pirateria. Se noti che i tuoi contenuti vengono ridistribuiti su Google Play, assicurati di agire rapidamente e con decisione. Per ulteriori dettagli, consulta la pagina Domande frequenti sul copyright nel Centro assistenza sul copyright.