Come recuperare un ID unico per identificare i dispositivi Android?

Alcuni sviluppatori possono aver bisogno di un ID unico per identificare i dispositivi Android. I casi d’uso in cui gli sviluppatori hanno bisogno di questo ID unico sono molteplici.

Per esempio, quando si vuole :

  • identificare un utente Android per memorizzare i punteggi dei giochi su un server
  • tracciare l’installazione delle applicazioni
  • generare DRM per la protezione dalla copia.

Esistono diverse soluzioni ma nessuna è perfetta. In questo tutorial, esamineremo cinque soluzioni e presenteremo i loro svantaggi :

1. Numero di telefonia unico (IMEI, MEID, ESN, IMSI)

Se si punta solo agli smartphone, si può approfittare del fatto che il dispositivo ha servizi di telefonia, quindi si può facilmente recuperare un ID unico che identifica il dispositivo.

Questo ID unico può essere IMEI, MEID, ESN o IMSI. Possono essere definiti come segue:

  • IMEI per International Mobile Equipment Identity: il numero unico per identificare i telefoni cellulari GSM, WCDMA e alcuni telefoni satellitari
  • MEID per Mobile Equipment IDentifier: il numero globalmente unico che identifica un pezzo fisico dell’attrezzatura della stazione mobile CDMA, il MEID è stato creato per sostituire gli ESN (Electronic Serial Number)
  • ESN per Electronic Serial Number: il numero unico per identificare i telefoni cellulari CDMA
  • IMSI (International Mobile Subscriber Identity): l’identificazione unica associata a tutti gli utenti di telefonia mobile delle reti GSM e UMTS

Per recuperare l’ID unico associato al tuo dispositivo, puoi usare il seguente codice :

Questa soluzione deve richiedere l’autorizzazione android.permission.READ_PHONE_STATE al vostro utente, il che può essere difficile da giustificare in base al tipo di applicazione che avete fatto.

Inoltre, questa soluzione è limitata agli smartphone perché i tablet non hanno servizi di telefonia. Un vantaggio è che il valore sopravvive ai reset di fabbrica sui dispositivi.

2. Indirizzo MAC

Si può anche cercare di ottenere un indirizzo MAC da un dispositivo che ha un hardware Wi-Fi o Bluetooth. Ma questa soluzione non è raccomandata perché non tutti i dispositivi hanno una connessione Wi-Fi. Anche se l’utente ha una connessione Wi-Fi, questa deve essere attivata per recuperare i dati. Altrimenti, la chiamata non riporta il MAC Address.

3. Numero di serie

I dispositivi senza servizi di telefonia come i tablet devono riportare un ID unico del dispositivo che è disponibile tramite android.os.Build.SERIAL da Android 2.3 Gingerbread. Alcuni telefoni che hanno servizi di telefonia possono anche definire un numero di serie. Poiché non tutti i dispositivi Android hanno un numero di serie, questa soluzione non è affidabile.

4. Secure Android ID

Al primo avvio del dispositivo, viene generato e memorizzato un valore casuale. Questo valore è disponibile tramite Settings.Secure.ANDROID_ID . È un numero a 64 bit che dovrebbe rimanere costante per tutta la vita del dispositivo. ANDROID_ID sembra una buona scelta per un identificatore unico del dispositivo perché è disponibile per smartphone e tablet. Per recuperare il valore, è possibile utilizzare il seguente codice :

String androidId = Settings.Secure.getString(getContentResolver(),
Settings.Secure.ANDROID_ID);

Tuttavia, il valore può cambiare se viene eseguito un reset di fabbrica sul dispositivo. C’è anche un bug noto con un popolare portatile di un produttore in cui ogni istanza ha lo stesso ANDROID_ID. Chiaramente, la soluzione non è affidabile al 100%.

5. Utilizzare UUID

Poiché il requisito della maggior parte delle applicazioni è quello di identificare una particolare installazione e non un dispositivo fisico, una buona soluzione per ottenere un id unico per un utente è quella di utilizzare la classe UUID. La seguente soluzione è stata presentata da Reto Meier di Google in una presentazione Google I/O :

Il metodo UUID.randomUUUID() genera un identificatore unico per una specifica installazione. Dovete solo memorizzare questo valore e il vostro utente sarà identificato al prossimo lancio della vostra applicazione. Puoi anche provare ad associare questa soluzione al servizio Android Backup per mantenere le informazioni disponibili per l’utente anche se installa la tua applicazione su un altro dispositivo.

Conclusione

Identificare un particolare dispositivo su Android non è una cosa facile. Ci sono molte buone ragioni per evitarlo. La soluzione migliore è probabilmente quella di identificare una particolare installazione utilizzando la soluzione UUID. Tuttavia, se vuoi assolutamente identificare fisicamente un particolare dispositivo, puoi provare a usare la soluzione ANDROID_ID. Non è affidabile al 100% ma è meglio di altre soluzioni.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.