Classi e interfacce LVL
La tabella 1 elenca tutti i file sorgente nella sezione Verifica licenza
Libreria (LVL) disponibile tramite l'SDK Android. Tutti i file fanno parte di
il pacchetto com.android.vending.licensing
.
Categoria | Nome | Descrizione |
---|---|---|
Controllo della licenza e risultato | Controllore licenza | Classe per cui crei un'istanza (o sottoclasse) per avviare un controllo della licenza. |
Callback controllo licenza | Interfaccia che implementi per gestire i risultati del controllo delle licenze. | |
Norme | Norme | Interfaccia che implementi per determinare se consentire l'accesso all'applicazione, in base alla risposta della licenza. |
Criterio gestito dal server | Implementazione predefinita di Policy . Utilizza le impostazioni fornite dalla
server di licenze per gestire l'archiviazione locale dei dati delle licenze, la validità delle licenze
riprova. |
|
Criteriorigoroso | Implementazione alternativa di Policy . Obbliga le licenze sulla base di una
solo la risposta alla licenza
dal server. Nessuna memorizzazione nella cache o richiesta di nuovo tentativo. |
|
Offuscamento dei dati (facoltativo) |
Offuscatore | Interfaccia che implementi se utilizzi un Policy (ad esempio
ServerManagedPolicy) che memorizza nella cache i dati delle risposte alle licenze in un archivio permanente.
Applica un algoritmo di offuscamento per codificare e decodificare i dati scritti o
lette. |
AESOoffuscatore | Implementazione predefinita dell'offuscatore che utilizza la crittografia/decrittografia AES per offuscare/non offuscare i dati. | |
Limitazioni del dispositivo (facoltativo) |
Limite di dispositivi | Interfaccia che implementi se vuoi limitare l'utilizzo di un su un dispositivo specifico. Chiamata da LicenseValidator. Implementazione DeviceLimiter non è consigliato per la maggior parte delle applicazioni perché richiede un server di backend e potrebbe causare la perdita dell'accesso da parte dell'utente alle applicazioni concesse in licenza, a meno che non siano state progettate con cura. |
NullDeviceLimiter | L'implementazione predefinita di DeviceLimiter è indipendente (consente l'accesso a tutti dispositivi). | |
Base della libreria, nessuna integrazione necessaria | Dati di risposta | Classe che contiene i campi di una risposta alla licenza. |
Strumento di convalida licenze | Classe che decripta e verifica una risposta ricevuta dalla licenza o server web. | |
Eccezione convalida | Classe che indica gli errori che si verificano durante la convalida dell'integrità dei dati gestite da un Offuscatore. | |
Offuscatore Preference | Classe di utilità che scrive/legge dati offuscati nel
SharedPreferences negozio. |
|
Servizio di sicurezza | Interfaccia IPC unidirezionale su cui viene passata una richiesta di controllo della licenza client di Google Play. | |
ILicenseResultListener | Implementazione unidirezionale di callback IPC per cui l'applicazione riceve una risposta asincrona dal server di licenze. |
Risposta del server
La tabella 2 elenca tutti i campi di risposta alle licenze restituiti dalla server di licenze.
Campo | Descrizione |
---|---|
responseCode |
Il codice di risposta restituito dal server di licenze. I codici di risposta sono descritti in Codici di risposta del server. |
signedData |
Una concatenazione di stringhe che contiene i dati restituiti dal server di licenze, come segue:
responseCode|nonce|packageName|versionCode|userId|timestamp:extras .
|
signature |
La firma di signedData con una chiave specifica dell'app.
|
Codici di risposta del server
La tabella 3 elenca tutti i codici di risposta di licenza supportati dalla server di licenze. In generale, un'applicazione dovrebbe gestire tutte queste risposte i codici. Per impostazione predefinita, la classe LicenseValidator in LVL fornisce tutti la gestione necessaria di questi codici di risposta.
Codice di risposta | Rappresentazione di valori interi | Descrizione | Firmato? | Extra | Commenti |
---|---|---|---|---|---|
LICENSED |
0 |
L'applicazione è concessa in licenza all'utente. L'utente ha acquistato applicazione o disponi dell'autorizzazione a scaricare e installare la versione alpha o beta dell'applicazione. | Sì | VT , GT e GR |
Consenti l'accesso in base ai vincoli Policy . |
LICENSED_OLD_KEY |
2 |
L'applicazione è concessa in licenza all'utente, ma è disponibile un'applicazione aggiornata disponibile firmata con una chiave diversa. | Sì | VT , GT , GR , UT |
Facoltativamente, consenti l'accesso in base ai vincoli Policy .
Può indicare che la coppia di chiavi utilizzata dell'applicazione non è valida o è compromessa. L'applicazione può consentire l'accesso se necessario o informare l'utente che è disponibile un upgrade e limitarne l'utilizzo fino all'upgrade. |
NOT_LICENSED |
1 |
L'applicazione non è concessa in licenza all'utente. | No | Non consentire l'accesso. | |
ERROR_CONTACTING_SERVER |
257 |
Errore locale: l'applicazione Google Play non è riuscita a raggiungere il server di licenze, probabilmente a causa di problemi di disponibilità di rete. | No | Riprova il controllo della licenza in base ai limiti di Policy nuovi tentativi. |
|
ERROR_SERVER_FAILURE |
4 |
Errore del server: il server non è riuscito a caricare la chiave dell'applicazione per la licenza. | No | Riprova il controllo della licenza in base ai limiti di Policy nuovi tentativi.
|
|
ERROR_INVALID_PACKAGE_NAME |
258 |
Errore locale: l'applicazione ha richiesto un controllo delle licenze per un pacchetto. non installato sul dispositivo. | No | Non riprovare a eseguire il controllo della licenza.
In genere è causato da un errore di sviluppo. |
|
ERROR_NON_MATCHING_UID |
259 |
Errore locale: l'applicazione ha richiesto un controllo delle licenze per un pacchetto. il cui UID (pacchetto, coppia ID utente) non corrisponde a quello della richiesta un'applicazione. | No | Non riprovare a eseguire il controllo della licenza.
In genere è causato da un errore di sviluppo. |
|
ERROR_NOT_MARKET_MANAGED |
3 |
Errore del server. L'applicazione (nome del pacchetto) non è stata riconosciuta da su Google Play. | No | Non riprovare a eseguire il controllo della licenza.
Può indicare che l'applicazione non è stata pubblicata tramite Google Play o che sia presente un errore di sviluppo nella licenza implementazione. |
Nota: come documentato in Configurazione dell'ambiente di test, il codice di risposta può essere manuale per lo sviluppatore dell'applicazione e per gli eventuali utenti di test registrati tramite Google Play Console.
Nota: in precedenza potevi testare un'app Caricare una "bozza" non pubblicata completamente gestita. Questa funzionalità non è più supportati; devi pubblicarlo nella distribuzione alpha o beta canale. Per ulteriori informazioni, vedi Bozze di app non sono più supportati.
Opzioni per la risposta del server
Per assistere la tua applicazione nella gestione dell'accesso all'applicazione per il rimborso dell'applicazione periodo e fornire altre informazioni, Il server di licenze include diverse parti nelle risposte alle licenze. Nello specifico, il servizio fornisce valori consigliati per periodo di validità della licenza dell'applicazione, periodo di tolleranza per i nuovi tentativi, numero massimo consentito di nuovi tentativi e altro impostazioni. Se la tua applicazione utilizza un APK file di espansione, la risposta include anche i nomi, le dimensioni e gli URL dei file. Il server aggiunge le impostazioni come coppie chiave-valore nella risposta della licenza "extra" .
Qualsiasi implementazione di Policy
può estrarre le impostazioni extra dalla licenza
della risposta e utilizzarle in base alle esigenze. L'implementazione predefinita di Policy
per l'LVL, ServerManagedPolicy
, funziona
dell'implementazione e un'illustrazione di come ottenere, archiviare e utilizzare
impostazioni.
Extra | Descrizione |
---|---|
VT |
Timestamp della validità della licenza. Specifica la data/l'ora in cui l'impostazione La risposta alla licenza (memorizzata nella cache) scade e deve essere ricontrollata sul server di licenze. Consulta la sezione di seguito in merito a Periodo di validità della licenza. |
GT |
Timestamp del periodo di tolleranza. Specifica la fine del periodo durante il quale
Il criterio potrebbe consentire l'accesso all'applicazione, anche se lo stato della risposta è
RETRY . Il valore è gestito dal server, ma un valore tipico è 5 o più giorni. Consulta la sezione di seguito relative a Periodo di tentativo e numero massimo di nuovi tentativi. |
GR |
Numero massimo di nuovi tentativi. Specifica il numero di controlli consecutivi della licenza RETRY
Policy deve consentire l'accesso prima di negare all'utente l'accesso all'applicazione.
Il valore è gestito dal server, tuttavia un valore tipico è "10" o in alto. Consulta la sezione di seguito relative a Periodo di tentativo e numero massimo di nuovi tentativi. |
UT |
Aggiorna timestamp. Specifica il giorno/l'ora in cui è stato eseguito l'aggiornamento più recente a
questa applicazione è stata caricata e pubblicata. Il server restituisce questo extra
solo per le risposte |
FILE_URL1 o FILE_URL2 |
L'URL per un file di espansione (1 per il file principale, 2 per il file patch). Da utilizzare per: scaricare il file tramite HTTP. |
FILE_NAME1 o FILE_NAME2 |
Il nome del file di espansione (1 per il file principale, 2 per il file patch). Devi utilizzare questo quando salvi il file sul dispositivo. |
FILE_SIZE1 o FILE_SIZE2 |
La dimensione del file in byte (1 è per il file principale, 2 è il file patch). Da utilizzare per: assistere il download e garantire che ci sia spazio sufficiente sui contenuti condivisi del dispositivo posizione di archiviazione prima del download. |
Periodo di validità della licenza
Il server di licenze di Google Play imposta un periodo di validità della licenza per tutti
le applicazioni scaricate. Il periodo esprime l'intervallo di tempo durante il quale un
dello stato della licenza dell'applicazione devono essere
considerati non modificabili e memorizzabili nella cache
un Policy
di licenza nella richiesta. Il server di licenze include
periodo di validità in risposta a tutti i controlli delle licenze, aggiungendo
timestamp di fine validità alla risposta come extra nella chiave VT
. R
Policy
può estrarre il valore chiave VT e utilizzarlo per consentire l'accesso in modo condizionale
la richiesta senza ricontrollarla, fino al periodo di validità
scade.
La validità della licenza indica a un Policy
di licenze quando deve ricontrollare il
stato di licenza con il server di licenze. Non intende sottintendere
se un'applicazione è
effettivamente concessa in licenza per l'uso. Ovvero, quando
scade il periodo di validità della licenza, ciò non significa che
l'applicazione non è più concessa in licenza per l'uso, indica piuttosto
Policy
deve ricontrollare lo stato della licenza con il server. Ne consegue che,
a condizione che il periodo di validità della licenza non sia scaduto, è accettabile per le
Policy
per memorizzare nella cache in locale lo stato iniziale della licenza e restituire la licenza memorizzata nella cache
anziché inviare un nuovo controllo delle licenze al server.
Il server di licenze gestisce il periodo di validità per aiutare applicare correttamente la licenza per tutto il periodo di rimborso offerto da Google Play per le applicazioni a pagamento. Imposta il periodo di validità in base se l'applicazione è stata acquistata e, in tal caso, da quanto tempo. In particolare, il server imposta un periodo di validità come segue:
- Per un'applicazione a pagamento, il server imposta il periodo di validità iniziale della licenza
in modo che la risposta relativa alla licenza rimanga valida per tutto il tempo della richiesta
rimborsabile. Una licenza
Policy
nell'applicazione potrebbe memorizzare nella cache risultato del controllo iniziale della licenza e non è necessario ricontrollarla fino alla scadenza del periodo di validità. - Quando un'applicazione non è più rimborsabile, il server imposta un periodo di validità più lungo, in genere un numero di giorni.
- Per un'applicazione senza costi, il server imposta il periodo di validità su un intervallo
(
long.MAX_VALUE
). Ciò garantisce che, a condizione chePolicy
abbia memorizzato nella cache a livello locale, non sarà necessario ricontrollare della licenza dell'applicazione in futuro.
L'implementazione ServerManagedPolicy
utilizza il timestamp estratto
(mValidityTimestamp
) come condizione principale per determinare se
per ricontrollare lo stato della licenza con il server prima di consentire all'utente di accedere a
per l'applicazione.
Periodo dei nuovi tentativi e numero massimo di nuovi tentativi
In alcuni casi, le condizioni di sistema o di rete possono impedire che il controllo delle licenze non raggiunga il server delle licenze oppure impedisca l'accesso dalla ricezione dell'applicazione client Google Play. Ad esempio, l'utente potrebbe avviare un'applicazione quando non è disponibile una rete cellulare o dati connessione disponibile, ad esempio quando si è in aereo o quando La connessione di rete è instabile o il segnale della rete cellulare è debole.
Quando problemi di rete impediscono o interrompono il controllo delle licenze, il team
Il client di Google Play avvisa l'applicazione restituendo un codice di risposta RETRY
a
il metodo processServerResponse()
di Policy
. Nel caso di modelli di sistema
ad esempio quando l'applicazione non riesce a essere associata al
ILicensingService
, la libreria LicenseChecker
stessa chiama
Metodo del criterio processServerResponse()
con un codice di risposta RETRY
.
In generale, il codice di risposta RETRY
segnala all'applicazione che
si è verificato un errore che ha impedito il completamento di un controllo delle licenze.
Il server di Google Play aiuta un'applicazione a gestire le licenze in
condizioni di errore impostando un "periodo di tolleranza" per un nuovo tentativo e il numero massimo consigliato
numero di nuovi tentativi. Il server include questi valori in tutte le risposte del controllo delle licenze.
aggiungendoli come extra sotto i tasti GT
e GR
.
L'applicazione Policy
può estrarre gli extra GT
e GR
e utilizzarli per
consentire l'accesso all'applicazione in modo condizionale, come segue:
- Per un controllo delle licenze che genera una risposta
RETRY
,Policy
deve Memorizza nella cache il codice di rispostaRETRY
e incrementa il conteggio diRETRY
risposte. Policy
deve consentire all'utente di accedere all'applicazione, a condizione che il periodo di tolleranza per i nuovi tentativi è ancora attivo oppure il numero massimo di nuovi tentativi è non è stato raggiunto.
ServerManagedPolicy
utilizza i valori GT
e GR
forniti dal server come
descritti sopra. L'esempio seguente mostra la gestione condizionale del nuovo tentativo
risposte predefinite nel metodo allow()
. Il numero di risposte RETRY
è
mantenuto nel metodo processServerResponse()
, non mostrato.
Kotlin
fun allowAccess(): Boolean { val ts = System.currentTimeMillis() return when(lastResponse) { LICENSED -> { // Check if the LICENSED response occurred within the validity timeout. ts <= validityTimestamp // Cached LICENSED response is still valid. } RETRY -> { ts < lastResponseTime + MILLIS_PER_MINUTE && // Only allow access if we are within the retry period // or we haven't used up our max retries. (ts <= retryUntil || retryCount <= maxRetries) } else -> false } }
Java
public boolean allowAccess() { long ts = System.currentTimeMillis(); if (lastResponse == LicenseResponse.LICENSED) { // Check if the LICENSED response occurred within the validity timeout. if (ts <= validityTimestamp) { // Cached LICENSED response is still valid. return true; } } else if (lastResponse == LicenseResponse.RETRY && ts < lastResponseTime + MILLIS_PER_MINUTE) { // Only allow access if we are within the retry period // or we haven't used up our max retries. return (ts <= retryUntil || retryCount <= maxRetries); } return false; }