2013-02-25 2 views
13

Ho pubblicato un'app per Android.Limite (Limita) installazioni di app per account (rilevate da dispositivi univoci) in Android

Il problema è che se qualcuno compra la mia app, può installarla su più dispositivi utilizzando lo stesso account.

Posso limitare l'installazione a pochi (diciamo 2) dispositivi univoci per account?

Se l'utente desidera utilizzarlo su un altro dispositivo con lo stesso account, dovrà prima disinstallarlo da un altro.

Per esempio, MyBackup Pro only allows two unique devices.

Come posso realizzare questo nella mia app?

+1

La maggior parte degli utenti probabilmente si aspetterebbe che l'app funzioni su tutti i propri dispositivi. Se hai un motivo come MyBackup Pro (ad esempio, ogni dispositivo si aggiunge ai costi di archiviazione e trasferimento), penso che finché si chiarisce prima che un utente acquisti, allora va bene. Se non si dispone di un motivo per limitare i dispositivi in ​​questo modo, direi di non farlo in modo da non sminuire l'esperienza dell'utente. – Alec

risposta

2

È possibile identificare il dispositivo, ad esempio tramite l'indirizzo MAC del modulo wlan o l'IMEI (entrambi possono essere recuperati tramite i servizi di sistema Android). Successivamente si identifica l'installazione con il proprio server, se il server risponde che questo utente/cliente l'ha già installato su un altro dispositivo, si blocca l'app e si comunica all'utente cosa succede.

+0

Non voglio mantenere un server per questo. Preferirei verificare se Google lo consente con il manifest o i server (come fa google Licsensing) – Programer

+0

In che modo un'installazione della tua app sa che esiste già un'altra installazione dell'app su un altro dispositivo? Google potrebbe fornire tale funzionalità, ma non credo che lo facciano. – FWeigl

+0

Ho già utilizzato google Licsencing. Forniscono un server e il programma controlla se il file viene copiato da un computer a un altro e lo fa con i servizi di google server (controlla se questa macchina o questo account hanno acquistato questa app). Voglio che questo server limiti anche gli acquisti legali e non solo la pirateria – Programer

10

Google helps you do this.

This page helps you set it up.

In particolare, it looks like you want to add a DeviceLimiter:

In alcuni casi, si potrebbe desiderare la vostra politica per limitare il numero di dispositivi reali che hanno il permesso di utilizzare una singola licenza. Ciò impedirà a un utente di spostare un'applicazione con licenza su un numero di dispositivi e di utilizzare l'applicazione su tali dispositivi con lo stesso ID account . Inoltre impedirebbe a un utente di "condividere" l'applicazione fornendo le informazioni sull'account associate alla licenza ad altre persone, che potrebbero quindi accedere a quell'account sui propri dispositivi e accedere alla licenza per l'applicazione.

LVL supporta la licenza per dispositivo fornendo un'interfaccia DeviceLimiter , che dichiara un singolo metodo, allowDeviceAccess(). Quando un LicenseValidator gestisce una risposta dal server delle licenze, chiama allowDeviceAccess(), passando una stringa ID utente estratta dalla risposta .

Se non si desidera supportare la limitazione del dispositivo, non è richiesto alcun lavoro - la classe LicenseChecker utilizza automaticamente un'implementazione predefinita denominata NullDeviceLimiter. Come suggerisce il nome, NullDeviceLimiter è una classe "no-op" il cui metodo allowDeviceAccess() restituisce semplicemente una risposta LICENSED per tutti gli utenti e dispositivi.

Attenzione: Per-dispositivo di licenza non è raccomandato per la maggior parte delle applicazioni perché:

Si richiede di fornire un server back-end per la gestione a utenti e dispositivi mappatura, e potrebbe involontariamente causare un utente di essere negato l'accesso a un'applicazione che ha legittimamente acquistato su un altro dispositivo.

Il codice sorgente per DeviceLimitercan be found here.

La fonte spiega più o meno come ci si fa a utilizzare DeviceLimiter per implementare ciò che si vuole:

/* The LICENSED response from the server contains a user identifier unique to 
* the <application, user> pair. The developer can send this identifier 
* to their own server along with some device identifier (a random number 
* generated and stored once per application installation, 
* {@link android.telephony.TelephonyManager#getDeviceId getDeviceId}, 
* {@link android.provider.Settings.Secure#ANDROID_ID ANDROID_ID}, etc). 
* 
* The more sources used to identify the device, the harder it will be for an 
* attacker to spoof. 
3

Sia Ascorbin e Yarian risposte sono bello spiegare.

Secondo le mie conoscenze, può essere gestito in due modi.

1. Con Google è di per sé

2. Con una propria implementazione

Consente di controllare uno per uno,

1. Con Google è di per sé

La risposta di Ascorbin spiega bene come implementarla e come google gestirlo. Quindi spero di averlo capito. Altrimenti, fammi sapere.

2. Con una propria implementazione

Se si dispone di un proprio server allora si può mettere codice che controlla per i dispositivi app installate. Ogni dispositivo ha un numero IMEI univoco in modo da poter facilmente monitorare lo stesso numero IMEI e bloccare o consentire l'installazione dell'app o il funzionamento dell'app.

Nota: Google consente di utilizzare la stessa app su un altro dispositivo se il dispositivo ha configurato lo stesso account. quindi in tal caso può essere possibile solo rilevando lo stesso account con diversi IMEI o indirizzi MAC.

Spero che tu abbia capito il punto.

Sentitevi liberi di commentare. :)

Problemi correlati