Man mano che la tua app diventa più popolare, può anche attirare l'attenzione indesiderata di utenti malintenzionati che potrebbero voler utilizzare in modo illecito la tua app. In questo argomento vengono descritti i consigli da adottare per evitare questi attacchi all'integrazione della fatturazione e ridurre l'impatto degli abusi nella tua app.
Sposta la logica sensibile nel backend
Per quanto consentito dal design della tua app, sposta la logica e i dati sensibili in un server di backend controllato da te. Più dati e logica hai in un dispositivo frontend, più vulnerabile è la sua modifica o la manomissione.
Ad esempio, un gioco di scacchi online deve 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 nel backend anziché nel frontend.
Verifica gli acquisti prima di concedere i diritti
Un caso speciale di dati sensibili e logica che devono essere gestiti nel backend sono la verifica e la conferma dell'acquisto. Dopo che un utente ha effettuato un acquisto, devi procedere come segue:
- Invia il valore
purchaseToken
corrispondente al tuo backend. Ciò significa che devi conservare un record di tutti i valoripurchaseToken
per tutti gli acquisti. - Verifica che il valore
purchaseToken
per l'acquisto corrente non corrisponda ad alcun valorepurchaseToken
precedente.purchaseToken
è univoco a livello globale, quindi puoi tranquillamente utilizzare questo valore come chiave primaria nel tuo database. - Utilizza gli endpoint
Purchases.products:get
oPurchases.subscriptionsv2:get
nell'API Google Play Developer per verificare con Google che l'acquisto sia legittimo. - Se l'acquisto è legittimo e non è stato utilizzato in passato, puoi concedere in sicurezza il diritto all'articolo in-app o all'abbonamento.
- Per gli abbonamenti, se l'elemento
linkedPurchaseToken
è impostato suPurchases.subscriptionsv2:get
, devi anche rimuoverelinkedPurchaseToken
dal database e revocare il diritto concesso alinkedPurchaseToken
per assicurarti che non abbiano più diritti per lo stesso acquisto. - Devi concedere il diritto solo quando lo stato di acquisto è
PURCHASED
e assicurati di gestire correttamente gli acquisti diPENDING
. In caso di picco di acquisti diCANCELED
, potresti concedere dei diritti quando l'acquisto è ancora nello statoPENDING
. Puoi trovare maggiori informazioni nella sezione Gestire le transazioni in sospeso. Dopo aver concesso il diritto, se vuoi utilizzare e confermare un prodotto di consumo, utilizza l'API Play Developer
Purchases.products:consume
sul tuo server di backend sicuro. Per confermare un prodotto o un abbonamento non consumabili, chiama l'endpoint API Play Developer pertinente,Purchases.products:acknowledge
oPurchases.subscriptions:acknowledge
sul tuo server di backend sicuro. È richiesta la conferma, perché informa Google Play che all'utente è stato concesso il diritto di effettuare l'acquisto. Devi confermare l'acquisto subito dopo aver concesso il diritto.Tieni presente che sebbene tu possa confermare o consumare l'acquisto sul lato client tramite la tua app, le API lato server forniscono 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 connettività di rete durante la convalida dell'acquisto. Senza conferma del server, potrebbe essere necessario accedere di nuovo tramite l'app per completare il processo di conferma. Altrimenti, se l'utente non accede di nuovo entro tre giorni, l'acquisto viene automaticamente rimborsato 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 sull'utilizzo degli acquisti, consulta Elaborazione degli acquisti.
Proteggere i 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 carichi 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.
Rilevare e gestire gli acquisti annullati
Gli acquisti annullati sono acquisti annullati, revocati o riaddebitati. Se un acquisto annullato aveva precedentemente concesso a un utente articoli in-app o altri contenuti, puoi utilizzare l'API Voided Purchases per scoprire il motivo dell'annullamento dell'acquisto e tutti i 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 ciò si riferisce all'annullamento dell'acquisto di un abbonamento anziché all'annullamento dell'abbonamento stesso.
- L'acquisto viene riaddebitato.
- Lo sviluppatore di 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 prendendo in considerazione i precedenti dati comportamentali degli utenti, puoi decidere come procedere. Ti consigliamo di implementare una o più delle seguenti opzioni:
- Esegui gli accorsi: 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, puoi 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à dell'app e gli acquisti futuri finché il saldo della valuta non è positivo.
- Implementazione di più avvertimenti: valuta la possibilità di intraprendere azioni meno drastiche per i nuovi trasgressori, ad esempio mostrare avvisi in-app. Per i trasgressori recidivi, prendi in considerazione misure più severe.
- Disattiva temporaneamente gli acquisti: come per l'implementazione degli avvertimenti multipli, valuta la possibilità di disabilitare gli acquisti per gli utenti con acquisti annullati finché non avrai modo di indagare più a fondo sul motivo dell'annullamento.
- Disattivare temporaneamente o definitivamente l'accesso alla tua app: in casi estremi con attività dannose ripetute, valuta la possibilità di impedire l'accesso all'app, temporaneamente o definitivamente.
- Effettua chiamate frequenti all'API Voided Purchases: se rilevi uno o più acquisti annullati, valuta la possibilità di effettuare chiamate più frequenti all'API Voided Purchases per annullare 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 loro attività.
Utilizza i metodi setObfuscatedAccountId
e setObfuscatedProfileId
nello strumento per la creazione di 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.
Prendiamo provvedimenti contro la violazione di marchi e copyright
Se utilizzi un server remoto per consegnare o gestire i contenuti, chiedi alla tua app di verificare 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.