Man mano che la tua app diventa più popolare, può anche attirare l'attenzione indesiderata di utenti malintenzionati che potrebbero volerne fare un uso improprio. Questo argomento descrive i consigli che dovresti seguire per contribuire a prevenire questi attacchi alla tua integrazione di fatturazione e ridurre l'impatto degli abusi nella tua app.
Sposta la logica sensibile nel tuo backend
Se possibile, sposta la logica e i dati sensibili su un server di backend controllato da te. Più dati e logica hai in un dispositivo frontend, più è vulnerabile a essere modificato o manomesso.
Ad esempio, una partita a scacchi online dovrebbe convalidare tutte le mosse nel backend instead of trusting that the frontend always sends legal moves.
Inoltre, se trovi vulnerabilità o problemi di sicurezza, a seconda del design del sistema, potrebbe essere più facile eseguire il debug, correggere e implementare gli aggiornamenti sul backend anziché sul frontend.
Verificare gli acquisti prima di concedere i diritti
Un caso speciale di dati e logica sensibili che devono essere gestiti nel backend è la verifica e il riconoscimento dell'acquisto. Dopo che un utente ha effettuato un acquisto, devi:
- Invia il
purchaseToken
corrispondente al tuo backend. Ciò significa che devi mantenere un record di tutti i valoripurchaseToken
per tutti gli acquisti. - Verifica che il valore
purchaseToken
per l'acquisto corrente non corrisponda a nessun valorepurchaseToken
precedente.purchaseToken
è un valore unico a livello globale, quindi puoi utilizzarlo in sicurezza 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 quindi concedere in sicurezza il diritto all'articolo o all'abbonamento in-app.
- Per gli abbonamenti, quando
linkedPurchaseToken
è impostato inPurchases.subscriptionsv2:get
, devi anche rimuovere illinkedPurchaseToken
dal database e revocare il diritto concesso allinkedPurchaseToken
per assicurarti che più utenti non abbiano diritto allo stesso acquisto. - Devi concedere il diritto solo quando lo stato dell'acquisto è
PURCHASED
e assicurarti di gestire correttamente gli acquistiPENDING
. Se si verifica un picco di acquisti diCANCELED
, potresti concedere i diritti quando l'acquisto è ancora in statoPENDING
. Puoi trovare ulteriori informazioni nella sezione Gestire le transazioni in sospeso. Dopo aver concesso il diritto, se vuoi utilizzare e confermare un prodotto consumabile, utilizza l'
Purchases.products:consume
API Play Developer 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
oPurchases.subscriptions:acknowledge
sul tuo server di backend sicuro. Il riconoscimento è obbligatorio, in quanto comunica a Google Play che all'utente è stato concesso il diritto di acquisto. Devi confermare l'acquisto immediatamente dopo aver concesso il diritto.Tieni presente che, anche se puoi confermare o utilizzare l'acquisto lato client tramite la tua app, le API lato server forniscono una protezione aggiuntiva contro problemi come la scarsa connettività di rete e le attività dannose. Ad esempio, immagina che un utente abbia acquistato un articolo dalla tua app, ma abbia perso la connettività di rete durante la convalida dell'acquisto. Senza conferma del server, l'utente potrebbe dover accedere di nuovo tramite l'app per completare la procedura di conferma. In caso contrario, se l'utente non accede nuovamente entro tre giorni, l'acquisto viene rimborsato automaticamente per mancata conferma dell'acquisto. Il riconoscimento del server impedisce questo scenario inviando il riconoscimento non appena Google Play comunica al server che l'acquisto è valido.
Per ulteriori informazioni sull'acknowledgment e sul consumo degli acquisti, consulta Elaborazione degli acquisti.
Protezione dei contenuti sbloccati
Per impedire agli utenti malintenzionati di ridistribuire i contenuti sbloccati, non li raggruppare nel file APK. Esegui invece una delle seguenti operazioni:
- 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 anche di mantenerli aggiornati.
- Utilizza un server remoto per pubblicare i tuoi contenuti.
Quando carichi contenuti da un server remoto o da un servizio in tempo reale, puoi memorizzare i contenuti sbloccati nella memoria del dispositivo o sulla scheda SD del dispositivo. Se memorizzi 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 quelli che sono stati annullati, revocati o per i quali è stato eseguito lo storno di addebito. Se un acquisto annullato aveva precedentemente concesso a un utente elementi in-app o altri contenuti, puoi utilizzare l'API Voided Purchases per ottenere il motivo dell'annullamento dell'acquisto, nonché eventuali contenuti associati che puoi recuperare.
Gli acquisti di abbonamenti e articoli in-app possono essere annullati per diversi motivi, tra cui:
- Un acquisto viene annullato dall'utente, dallo sviluppatore o da Google (inclusi gli acquisti annullati automaticamente non confermati). Per gli abbonamenti, tieni presente che si riferisce all'annullamento dell'acquisto di un abbonamento, anziché all'annullamento dell'abbonamento stesso.
- Viene effettuato uno storno di addebito di un acquisto.
- Lo sviluppatore dell'app annulla o rimborsa l'ordine di un utente e seleziona l'opzione "Rimuovi" nella console.
In base al motivo dell'annullamento dell'acquisto e tenendo conto dei dati sul comportamento degli utenti precedenti, puoi decidere un'azione da intraprendere. Ti consigliamo di implementare una o più delle seguenti soluzioni:
- Esegui il recesso: quando un acquisto viene annullato, puoi recedere dagli articoli non utilizzati come se non fossero mai stati acquistati. Ad esempio, se un acquisto di valuta in-game è stato annullato, puoi recuperare la valuta già concessa all'utente. Se l'utente ha già speso la valuta, ti consigliamo di impostare il saldo della valuta su un valore negativo e di limitare l'attività dell'app e gli acquisti futuri finché il saldo della valuta non sarà positivo.
- Implementazione di più avvertimenti: valuta la possibilità di adottare misure meno drastiche per i trasgressori per la prima volta, ad esempio la visualizzazione di avvisi in-app. Per i trasgressori ripetuti, possono essere prese misure più severe.
- Disattivare temporaneamente gli acquisti: in modo simile all'implementazione di più avvertimenti, ti consigliamo di disattivare gli acquisti per gli utenti con acquisti annullati finché non potrai esaminare più da vicino il motivo dell'annullamento.
- Non consentire temporaneamente o definitivamente l'accesso alla tua app:in casi estremi con attività dannose ripetute, valuta la possibilità di non consentire l'accesso alla tua app temporaneamente o definitivamente.
- Esegui chiamate frequenti all'API Voided Purchases: quando rilevi uno o più acquisti annullati, ti consigliamo di effettuare chiamate più frequenti all'API Voided Purchases per recuperare gli acquisti prima che l'utente possa utilizzarli. Puoi trovare ulteriori informazioni sulle quote dell'API Voided Purchases nella documentazione dell'API Voided Purchases.
Aiuta Google a rilevare le frodi prima che si verifichino
Alcuni tipi di attività fraudolenta sono correlati a utenti malintenzionati che creano più account Google e in-app per nascondere la propria attività.
Utilizza i metodi
setObfuscatedAccountId
e
setObfuscatedProfileId
nel generatore per
BillingFlowParams
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.
Azione contro la violazione di marchi e copyright
Se utilizzi un server remoto per pubblicare o gestire i contenuti, fai in modo che la tua app verifichi lo stato di acquisto dei contenuti sbloccati ogni volta che un utente vi accede. 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 intervenire rapidamente e in modo deciso. Per maggiori dettagli, consulta la pagina Domande frequenti sul copyright nel Centro assistenza sul copyright.