Le licenze di Google Play sono un servizio basato sulla rete che consente a un'applicazione di eseguire query su un server di licenze di Google Play attendibile per determinare se l'applicazione è concessa in licenza all'attuale utente del dispositivo. Il servizio di licenze si basa sulla capacità del server di licenze di Google Play di determinare se un determinato utente dispone della licenza per l'utilizzo di una determinata applicazione. Google Play considera che l'utente dispone della licenza se l'utente è un acquirente registrato dell'applicazione.
La richiesta inizia quando la tua applicazione effettua una richiesta a un servizio ospitato dall'applicazione client di Google Play. L'applicazione Google Play invia quindi una richiesta al server di licenze e riceve il risultato. L'applicazione Google Play invia il risultato all'applicazione, che può consentire o non consentire l'ulteriore utilizzo dell'applicazione, se necessario.
Nota: se una versione di un'app si trova nei canali di test chiusi o aperti, tutti gli utenti autorizzati a scaricare e installare l'app vengono considerati utenti dell'app con licenza. Per ulteriori informazioni, consulta Utilizzare i canali di test per ricevere preziosi feedback in anticipo dagli utenti.
![](https://developer.android.com/static/images/google/play/licensing/licensing_arch.png?authuser=6&hl=it)
Figura 1. L'applicazione avvia un controllo delle licenze tramite la Libreria di verifica delle licenze e il client Google Play, che gestisce la comunicazione con il server di Google Play.
Nota: in precedenza, potevi testare un'app caricando una versione "bozza" non pubblicata. Questa funzionalità non è più supportata; devi pubblicarla nei canali di test chiusi o aperti. Per ulteriori informazioni, consulta la sezione Le bozze di app non sono più supportate.
Per identificare correttamente l'utente e determinare lo stato della licenza, il server di licenze richiede informazioni sull'applicazione e sull'utente: l'applicazione e il client di Google Play collaborano per assemblare le informazioni e il client di Google Play le trasmette al server.
Per aiutarti ad aggiungere licenze alla tua applicazione, l'SDK Android fornisce un insieme scaricabile di origini della libreria che puoi includere nel tuo progetto di applicazione: il pacchetto di licenze di Google Market. La License Verification Library (LVL) è una libreria che puoi aggiungere alla tua applicazione che gestisce tutte le comunicazioni relative alle licenze con il servizio di licenze di Google Play. Dopo aver aggiunto l'LVL all'applicazione, quest'ultima può determinare lo stato di licenza per l'utente corrente semplicemente chiamando un metodo e implementando un callback che riceve la risposta dello stato.
La tua applicazione non esegue query direttamente sul server di licenze, ma chiama il client Google Play su IPC remoto per avviare una richiesta di licenza. Nella richiesta di licenza:
- L'applicazione fornisce: il nome del pacchetto, un nonce che viene successivamente utilizzato per convalidare qualsiasi risposta del server e un callback tramite il quale la risposta può essere restituita in modo asincrono.
- Il client Google Play raccoglie le informazioni necessarie sull'utente e sul dispositivo, ad esempio il nome utente principale dell'Account Google principale, l'IMSI e altre informazioni. Poi invia la richiesta di controllo della licenza al server per conto della tua applicazione.
- Il server di Google Play valuta la richiesta utilizzando tutte le informazioni disponibili, cercando di stabilire l'identità dell'utente con un livello di sicurezza sufficiente. Il server confronta quindi l'identità dell'utente in base ai record di acquisto dell'applicazione e restituisce una risposta relativa alla licenza, che il client Google Play restituisce alla tua applicazione tramite il callback IPC.
Puoi scegliere quando e con quale frequenza vuoi che l'applicazione controlli la propria licenza e hai il pieno controllo su come gestisce la risposta, verifica i dati della risposta firmata e applica i controlli di accesso.
Tieni presente che durante il controllo della licenza l'applicazione non gestisce connessioni di rete né utilizza API correlate alle licenze nella piattaforma Android.
Le risposte relative alle licenze sono sicure
Per garantire l'integrità di ogni query relativa alla licenza, il server firma i dati relativi alle risposte alle licenze utilizzando una coppia di chiavi RSA condivisa esclusivamente tra il server di Google Play e te.
Il servizio di licenze genera una singola coppia di chiavi di licenza per ogni applicazione ed espone la chiave pubblica nella pagina Servizi e API dell'applicazione in Play Console. Devi copiare la chiave pubblica da Play Console e incorporarla nel codice sorgente dell'applicazione. Il server conserva la chiave privata internamente e la utilizza per firmare le risposte di licenza per le applicazioni pubblicate con quell'account.
Quando l'applicazione riceve una risposta firmata, utilizza la chiave pubblica incorporata per verificare i dati. L'uso della crittografia a chiave pubblica nel servizio di licenze consente all'applicazione di rilevare le risposte manomissioni o spoofing.
Libreria di verifica delle licenze
L'SDK Android fornisce un pacchetto scaricabile chiamato Google Market Licensing Package, che include la License Verification Library (LVL). L'LVL semplifica notevolmente il processo di aggiunta delle licenze all'applicazione e contribuisce a garantire un'implementazione più sicura e solida per la tua applicazione. L'LVL fornisce classi interne che gestiscono la maggior parte delle operazioni standard relative a una query di licenza, come contattare il client di Google Play per avviare una richiesta di licenza e verificare e convalidare le risposte. Inoltre, espone interfacce che ti consentono di inserire facilmente il tuo codice personalizzato per definire i criteri di licenza e gestire l'accesso in base alle esigenze della tua applicazione. Le interfacce LVL principali sono:
Policy
- L'implementazione determina se consentire l'accesso all'applicazione, in base alla risposta alla licenza ricevuta dal server e a qualsiasi altro dato disponibile (ad esempio, quello di un server di backend associato alla tua applicazione). L'implementazione può valutare i vari campi della risposta alla licenza e applicare altri vincoli, se necessario. L'implementazione consente anche di gestire la gestione dei controlli delle licenze che comportano errori, come errori di rete.
LicenseCheckerCallback
- La tua implementazione gestisce l'accesso
all'applicazione in base al risultato della gestione della risposta di licenza
da parte dell'oggetto
Policy
. L'implementazione può gestire l'accesso in qualsiasi modo necessario, ad esempio mostrando il risultato della licenza nell'interfaccia utente o indirizzando l'utente ad acquistare l'applicazione (se attualmente non è in licenza).
Per aiutarti a iniziare a utilizzare Policy
, l'LVL fornisce due implementazioni Policy
completamente complete che puoi utilizzare senza modifiche o adattarsi alle tue esigenze:
ServerManagedPolicy
- Un
Policy
flessibile che utilizza le impostazioni fornite dal server di licenze per gestire la memorizzazione nella cache delle risposte e l'accesso all'applicazione quando il dispositivo è offline (ad esempio quando l'utente è in aereo). Per la maggior parte delle applicazioni, si consiglia di utilizzareServerManagedPolicy
. StrictPolicy
- Un elemento
Policy
restrittivo che non memorizza nella cache dati di risposta e consente l'accesso all'applicazione solo quando il server restituisce una risposta concessa in licenza.
L'LVL è disponibile come pacchetto scaricabile dell'SDK Android. Il pacchetto include sia l'LVL stesso, sia un'applicazione di esempio che mostra come la libreria dovrebbe essere integrata con l'applicazione e come l'applicazione deve gestire i dati della risposta, l'interazione con l'interfaccia utente e le condizioni di errore.
Le origini LVL vengono fornite come progetto di libreria Android, il che significa che puoi gestire un singolo insieme di origini delle librerie e condividerle tra più applicazioni. Tramite l'SDK è disponibile anche un ambiente di test completo, che ti consente di sviluppare e testare l'implementazione delle licenze nelle tue applicazioni prima di pubblicarle, anche se non hai accesso a un dispositivo fisico.
Requisiti e limitazioni
Le licenze di Google Play sono progettate per consentirti di applicare controlli delle licenze alle applicazioni che pubblichi tramite Google Play. Il servizio non è progettato per consentirti di controllare l'accesso alle applicazioni non pubblicate su Google Play o che vengono eseguite su dispositivi che non offrono il client Google Play.
Ecco alcuni punti da tenere presente quando implementi le licenze nella tua applicazione:
- Un'applicazione può utilizzare il servizio solo se il client Google Play è installato sul dispositivo host e se sul dispositivo è in esecuzione Android 1.5 (livello API 3) o versioni successive.
- Per completare un controllo delle licenze, il server di licenze deve essere accessibile sulla rete. Puoi implementare comportamenti di memorizzazione nella cache delle licenze per gestire l'accesso alla tua applicazione in assenza di connettività di rete.
- La sicurezza dei controlli delle licenze dell'applicazione dipende in ultima analisi dalla progettazione dell'implementazione stessa. Il servizio fornisce gli elementi di base che ti consentono di controllare in sicurezza le licenze, ma l'applicazione effettiva e la gestione effettiva della licenza sono fattori che spetta a te. Segui le best practice riportate nei seguenti documenti per assicurarti che la tua implementazione sia sicura.
- L'aggiunta di licenze a un'applicazione non influisce sul funzionamento dell'applicazione quando viene eseguita su un dispositivo che non offre Google Play.
- Puoi implementare i controlli delle licenze per un'app senza costi, ma solo se utilizzi il servizio per fornire file di espansione APK.
Sostituzione per la protezione dalla copia
Le licenze di Google Play sono un meccanismo flessibile e sicuro per controllare l'accesso alle tue applicazioni. Sostituisce di fatto il meccanismo di protezione dalla copia (non più supportato) offerto in precedenza su Google Play e offre un maggiore potenziale di distribuzione per le tue applicazioni.
Le licenze ti consentono di passare a un modello basato su licenza applicabile a tutti i dispositivi che hanno accesso a Google Play. L'accesso non è vincolato alle caratteristiche del dispositivo host, ma alla tua applicazione su Google Play (tramite la chiave pubblica dell'app) e al criterio di licenza che definisci. L'applicazione può essere installata e gestita su qualsiasi dispositivo e spazio di archiviazione, inclusa la scheda SD.
Anche se nessun meccanismo di licenza può impedire completamente ogni utilizzo non autorizzato, il servizio di licenze ti consente di controllare l'accesso per la maggior parte dei normali utilizzi, su tutti i dispositivi compatibili, bloccati o sbloccati.
Per iniziare ad aggiungere le licenze dell'applicazione alla tua applicazione, passa alla sezione Configurazione per le licenze.