2010-11-22 7 views
8

La mia app è una specie di guida tascabile con alcuni dati per tutto l'anno. Suppongo che gli utenti utilizzeranno il programma almeno una volta con accesso a Internet per attivare la licenza. O almeno questa è la mia comprensione di come funziona il sistema di licenze Android. Sto usando ServerManagedPolicy.Durata controllo controllore licenze dello stato "attivato". Quanto è frequente troppo per l'utente?

Controlla periodicamente la licenza? C'è un modo per controllarlo? Non voglio che i miei utenti si trovino nel bel mezzo del nulla, con un'app già attivata in precedenza e improvvisamente dopo 1 settimana, 1 mese, 1 anno ecc. L'app inizia a limitare l'usabilità dell'app stessa perché la licenza non potrebbe Da verificare di nuovo. La mia app verrà utilizzata in luoghi remoti con accesso alla rete irregolare (non può essere data per scontata in ogni momento) da persone che vivranno lì per settimane, forse mesi.

Sento che dovrei almeno avvertirli che verrà loro chiesto ogni X settimane di farlo. Il sistema di licenze è addirittura draconiano?

So che posso gestire gli errori con il flag ERROR_CONTACTING_SERVER, sull'applicazione application void di LicenseCheckerCallback. La risposta "VT" è sempre la stessa (non è possibile testare questo su un account di prova/il mio account)? Ero solo curioso di sapere come tratti questa situazione nelle tue app di vita reale. Mi sto perdendo qualcosa qui? Per qualche motivo mi sento come sono. C'è qualche "cattura"?

// Modificato:

Ecco il codice che sto cercando in questo momento:

// ServerManagedPolicy.java 
private void setValidityTimestamp(String validityTimestamp) { 
    Long lValidityTimestamp; 
    try { 
     lValidityTimestamp = Long.parseLong(validityTimestamp); 
    } catch (NumberFormatException e) { 
     // No response or not parsable, expire in one minute. 
     Log.w(TAG, "License validity timestamp (VT) missing, caching for a minute"); 
     lValidityTimestamp = System.currentTimeMillis() + MILLIS_PER_MINUTE; 
     validityTimestamp = Long.toString(lValidityTimestamp); 
    } 
    // added by me---> 

    private static long maxLicense = 1000 * 3600 * 24 * 30; // ~ roughly 30 days 
    private static long minLicense = 1000 * 3600 * 24 * 3; // ~ roughly 3 days 

    long lMax = System.currentTimeMillis() + maxLicense; 
    long lMin = System.currentTimeMillis() + minLicense; 
    if ((lValidityTimestamp > lMin) && (lValidityTimestamp < lMax)) { 
     validityTimestamp = Long.toString(lMax); 
    } 

    // <--- added by me 

    mValidityTimestamp = lValidityTimestamp; 
    mPreferences.putString(PREF_VALIDITY_TIMESTAMP, validityTimestamp); 
} 
+0

hai letto http://developer.android.com/guide/publishing/licensing.html? – techiServices

+0

La domanda qui non è se ho letto. È quante volte ho fatto. Inclusi tutti i blog collegati da Tim Bray, Dan Galpin e Trevor Johns. : p – davidcesarino

risposta

4

Solo i miei due centesimi, è possibile definire un periodo di tempo che si desidera controllare (diciamo 3 giorni). Verifica la licenza dopo 3 giorni, se non c'è Internet, continua a lasciare che l'utente la usi per consentire di dire un'altra settimana al massimo, altrimenti l'app non sarà completamente funzionante. O tieni semplicemente a piena funzionalità fino a quando non c'è una connessione, quindi puoi controllare e resettare il tuo timestamp. Il controllore della licenza controllerà solo quando lo dirai.

Posso chiarire se necessario!

Buona fortuna

+0

È davvero una buona idea, in realtà. Mi hai persino chiesto se sarebbe stato il caso migliore. Potrei lasciare che gli utenti usino l'app per una settimana, che è sicuramente DOPO il periodo di rimborso, anche se solo indovinando i normali "VT". E dopo quel periodo, usa Internet alla prima opportunità per attivare l'app e scrivi il VT personalizzato alle preferenze per 30 o 40 giorni come voglio. Oh bene, se solo Google avesse una libreria LVL più personalizzabile ... vedrò cosa posso fare. So che sembra semplice, ma la mia domanda era semplice, credo. Mi hai fornito "l'intuizione" che stavo cercando. Grazie. – davidcesarino

+0

Lo prendo da lì (cosa hai proposto) e implemento il VT lungo. A volte due centesimi sono tutto ciò di cui abbiamo bisogno. – davidcesarino

+0

Felice di averlo aiutato! :) – zsniperx

1

Anche con la ServerManagedPolicy, la vostra applicazione sarà solo di controllo per una licenza quando chiami "checkAccess()" come descritto nella sezione checking access del documento di licenza. Se la chiamata non viene mai eseguita, l'app continuerà a funzionare a tempo indeterminato. Pertanto, se è possibile rilevare che gli utenti si trovano in una situazione in cui legittimamente non possono eseguire il ping del server per ottenere informazioni sulla licenza, è possibile racchiudere la chiamata "checkAccess" in una condizione per quello.

Più in basso nella pagina ci sono le informazioni sulla configurazione degli account di prova per verificare la funzionalità LVL. I altamente consigliano di fare buon uso di tale funzionalità di test.

+1

Guarda, apprezzo molto il tuo tempo per venire qui a rispondere, non prendermi in errore ... ma ovviamente lo sto testando con i conti di prova. E so che posso * non * chiamare checkAccess ... dopotutto, è quello che stavo facendo quando non avevo alcun meccanismo di licenza per cominciare :). La mia domanda qui riguarda la longevità della risposta ricevuta dalla licenza di mercato ... per quanto tempo devo aspettare ... quanto è il campo "VT" nel mondo reale. Probabilmente ora sai che qualsiasi account di prova avrà un segnale che scade la risposta in 1 minuto circa. I conti di prova non rispondono a questo. Grazie. – davidcesarino

2

David, la risposta breve dipende da voi.

Preso direttamente dal documento dello sviluppatore. "Ad esempio, il server fornisce valori raccomandati per il periodo di validità della licenza dell'applicazione, riprova il periodo di prova e il numero massimo di tentativi consentiti, tra gli altri."

A seconda di come si sceglie di implementare la politica, si sceglie la risposta alla propria domanda.

+0

Vedo, grazie. Ma il mio punto è ... come faccio? Ancora meglio: qual è il modo consigliato? In questo momento, questo è quello che sto facendo ... Ho modificato la classe ServerManagedPolicy, in "setValidityTimestamp". Se lValidityTimestamp è più grande di 3 giorni da oggi o inferiore a 1 mese da ora (ottengo questo utilizzando System.currenttimemillis), imposto automaticamente lValidityTimestamp a 1 mese. Per ora, questo è quello che sto provando ... Non posso dirlo con certezza perché gli account test non ricevono gli "extra" VT ecc. – davidcesarino

+0

La logica dietro è che sto cercando di "interferire" "sul materiale predefinito se è più grande del periodo di rimborso (3 giorni in più del necessario) o inferiore a 1 mese. Per ora, lo sto testando ... Voglio un minimo di 1 mese di "senza preoccupazioni" per i miei clienti. Immagino che il mercato possa tornare più di 1 mese, il che è ancora meglio per me e per i miei clienti. Ma come ho detto, sono cieco con i conti di prova. Pensi che funzionerà? Penso che pubblicherò il mio codice per farti vedere. – davidcesarino

+1

Beh, potresti fare due cose. Uno, convalidare ciò che è possibile utilizzare la risposta di prova da un account dell'editore. Due, dai un'occhiata all'applicazione di implementazione di esempio (credo che questo venga fornito con il download di LVL) e confronti le implementazioni. Tutto quello che devi fare è guardare la risposta che ottieni e gestirla in modo appropriato per tutto ciò che vuoi che accada. Non sono del tutto sicuro del motivo per cui sarebbe importante ciò che viene restituito nel timestamp di validità purché lo gestisci in modo appropriato per la tua parte. – user432209

1

ho avuto la risposta a questo in modo molto semplice. Connetti un dispositivo reale via USB al tuo computer. Modifica il codice sorgente della libreria LVL in ServerManagedPolicy.java e aggiungi un'istruzione di registro per la variabile lValidityTimestamp utilizzando DateFormat.getDateTimeInstance (DateFormat.MEDIUM, DateFormat.MEDIUM). Quindi disinstallare l'applicazione per cancellare qualsiasi timestamp della cache della licenza precedente, reinstallare ed eseguire l'app. Questo contatta il server e quindi la tua dichiarazione di registrazione rivela la risposta. Nei miei test, il VT ritorna esattamente ad 1 giorno (quando la licenza è controllata).

+2

Potresti approfondire questa risposta? Qui ottengo 1 minuto, come previsto dal codice sopra. Secondo, stai provando con un account di prova o no? Cosa stai facendo il debug? Se è la tua app, come non ottieni la risposta standard "1 minuto"? Perché presumo che tu non stia modificando la fonte di altre app (in altre parole, smontando) per includere il Log, per testarlo. Ottima risposta, ma ora ho ancora più domande. – davidcesarino

Problemi correlati