Man mano che la tua app diventa più popolare, può attirare anche l'attenzione indesiderata di utenti malintenzionati che potrebbero volerla usare in modo improprio. Questo argomento descrive i consigli da utilizzare per prevenire questi attacchi all'integrazione della fatturazione e ridurre l'impatto dell'uso improprio nella tua app.
Sposta la logica sensibile nel backend
Per quanto lo consenta la progettazione dell'app, sposta i dati e la logica sensibili su un server di backend che controlli. Più dati e logica sono presenti in un dispositivo frontend, più è vulnerabile a modifiche o manomissioni.
Ad esempio, una partita a scacchi online deve convalidare tutte le mosse nel backend invece di dare per scontato che il frontend invii sempre mosse legali.
Inoltre, se trovi vulnerabilità o problemi di sicurezza, a seconda della progettazione 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 la conferma dell'acquisto. Dopo che un utente ha effettuato un acquisto, devi procedere nel seguente modo:
- Invia il
purchaseToken
corrispondente al tuo backend. Ciò significa che devi mantenere un registro di tutti i valoripurchaseToken
per tutti gli acquisti. - Verifica che il valore di
purchaseToken
per l'acquisto corrente non corrisponda a nessun valore dipurchaseToken
precedente.purchaseToken
è univoco a livello globale, quindi puoi utilizzare questo valore in modo sicuro 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, quando
linkedPurchaseToken
è impostato inPurchases.subscriptionsv2:get
, devi anche rimuoverelinkedPurchaseToken
dal database e revocare il diritto concesso alinkedPurchaseToken
per assicurarti che più utenti non abbiano diritto allo stesso acquisto. - Devi concedere i diritti solo quando lo stato dell'acquisto è
PURCHASED
e assicurati di gestire correttamente gli acquistiPENDING
. Se si verifica un picco di acquisti diCANCELED
, potresti concedere diritti quando l'acquisto è ancora in statoPENDING
. Per ulteriori informazioni, visita la pagina 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 non consumabile o un abbonamento, chiama l'endpoint API Play Developer pertinente,Purchases.products:acknowledge
oPurchases.subscriptions:acknowledge
sul tuo server di backend sicuro. La conferma è obbligatoria, in quanto comunica a Google Play che all'utente sono stati concessi i diritti per l'acquisto. Devi riconoscere l'acquisto immediatamente dopo aver concesso i diritti.Tieni presente che, sebbene tu possa 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 attività dannose. Ad esempio, considera 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, potrebbe essere necessario accedere di nuovo tramite l'app per completare la procedura di conferma. In caso contrario, se l'utente non esegue di nuovo 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 la conferma non appena Google Play comunica al server che l'acquisto è valido.
Per ulteriori informazioni sulla conferma e sull'utilizzo degli acquisti, vedi Elaborazione degli acquisti.
Proteggere i contenuti sbloccati
Per impedire agli utenti malintenzionati di ridistribuire i tuoi contenuti sbloccati, non includerli 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 anche di mantenerli aggiornati.
- Utilizza un server remoto per pubblicare i tuoi contenuti.
Quando fornisci 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 acquisti che sono stati cancellati, revocati o stornati. Se un acquisto annullato aveva precedentemente concesso articoli in-app o altri contenuti a un utente, puoi utilizzare l'API Voided Purchases per ottenere il motivo dell'annullamento dell'acquisto insieme a tutti i contenuti associati che puoi recuperare.
Gli acquisti di abbonamenti e articoli in-app possono essere annullati per una serie di 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 questo si riferisce all'annullamento dell'acquisto di un abbonamento, anziché all'annullamento dell'abbonamento stesso.
- Un acquisto viene stornato.
- Lo sviluppatore dell'app annulla o rimborsa un ordine dell'utente e seleziona l'opzione "Revoca" nella console.
In base al motivo dell'annullamento dell'acquisto e tenendo conto dei dati comportamentali precedenti dell'utente, puoi decidere un corso d'azione. Ti consigliamo di implementare una o più delle seguenti soluzioni:
- Eseguire i recuperi: quando un acquisto viene annullato, puoi recuperare gli articoli inutilizzati 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. Nel caso in cui l'utente abbia già speso la valuta, valuta la possibilità 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ù avvisi:valuta la possibilità di intraprendere azioni meno drastiche per i trasgressori alla prima infrazione, ad esempio la visualizzazione di avvisi in-app. Per i recidivi, valuta misure più severe.
- Disattivare temporaneamente gli acquisti: in modo simile all'implementazione dei vari avvisi, valuta la possibilità di disattivare gli acquisti per gli utenti con acquisti annullati finché non riesci a esaminare più a fondo il motivo per cui gli acquisti sono stati annullati.
- Disabilita temporaneamente o definitivamente l'accesso alla tua app:per casi estremi con attività dannose ripetute, valuta la possibilità di disabilitare l'accesso alla tua app, in modo temporaneo o definitivo.
- 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 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.
Aiutare Google a rilevare le frodi prima che si verifichino
Alcuni tipi di frode sono correlati a utenti malintenzionati che creano più account Google e in-app per nascondere la loro attività.
Utilizza i metodi
setObfuscatedAccountId
e
setObfuscatedProfileId
nel builder 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 le violazioni 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 dell'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, agisci in modo rapido e deciso. Per maggiori dettagli, consulta la pagina Domande frequenti sul copyright nel Centro assistenza sul copyright.