Comment récupérer un identifiant unique pour identifier les appareils Android ?

Certains développeurs peuvent avoir besoin d’un identifiant unique pour identifier les appareils Android. Les cas d’utilisation où les développeurs ont besoin de cet ID unique sont multiples.

Par exemple, lorsque vous voulez :

  • identifier un utilisateur Android pour stocker les scores des jeux sur un serveur
  • suivre l’installation des apps
  • générer des DRM pour la protection contre la copie.

Plusieurs solutions existent mais aucune n’est parfaite. Dans ce tutoriel, nous allons examiner cinq solutions et présenter leurs inconvénients :

1. Numéro de téléphonie unique (IMEI, MEID, ESN, IMSI)

Si vous ciblez uniquement les smartphones, vous pouvez profiter du fait que l’appareil dispose de services de téléphonie.

Cet identifiant unique peut être l’IMEI, le MEID, l’ESN ou l’IMSI. Ils peuvent être définis comme suit :

  • IMEI pour International Mobile Equipment Identity : le numéro unique pour identifier les téléphones mobiles GSM, WCDMA ainsi que certains téléphones satellites
  • MEID pour Mobile Equipment IDentifier : le numéro unique au monde identifiant une pièce physique d’équipement de station mobile CDMA, le MEID a été créé pour remplacer les ESN (Electronic Serial Number)
  • ESN pour Electronic Serial Number : le numéro unique permettant d’identifier les téléphones mobiles CDMA
  • IMSI (International Mobile Subscriber Identity) : l’identification unique associée à tous les utilisateurs de téléphones mobiles des réseaux GSM et UMTS

Pour récupérer l’ID unique associé à votre appareil, vous pouvez utiliser le code suivant :

Cette solution doit demander pour android.permission.READ_PHONE_STATE à votre utilisateur ce qui peut être difficile à justifier suite au type d’application que vous avez réalisé.

De plus, cette solution est limitée aux smartphones car les tablettes ne disposent pas de services de téléphonie. Un avantage est que la valeur survit aux réinitialisations d’usine des appareils.

2. Adresse MAC

Vous pouvez également essayer d’obtenir une adresse MAC à partir d’un appareil ayant un matériel Wi-Fi ou Bluetooth. Mais, cette solution n’est pas recommandée car tous les appareils ne disposent pas d’une connexion Wi-Fi. Même si l’utilisateur dispose d’une connexion Wi-Fi, celle-ci doit être activée pour récupérer les données. Sinon, l’appel ne rapporte pas l’adresse MAC.

3. Numéro de série

Les appareils sans services de téléphonie comme les tablettes doivent rapporter un ID d’appareil unique qui est disponible via android.os.Build.SERIAL depuis Android 2.3 Gingerbread. Certains téléphones ayant des services de téléphonie peuvent également définir un numéro de série. Comme tous les appareils Android ne possèdent pas de numéro de série, cette solution n’est pas fiable.

4. ID Android sécurisé

Au premier démarrage d’un appareil, une valeur aléatoire est générée et stockée. Cette valeur est disponible via Paramètres.Secure.ANDROID_ID . C’est un nombre de 64 bits qui doit rester constant pendant toute la durée de vie d’un appareil. ANDROID_ID semble être un bon choix pour l’identification unique d’un appareil car il est disponible pour les smartphones et les tablettes. Pour récupérer la valeur, vous pouvez utiliser le code suivant :

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

Cependant, la valeur peut changer si une réinitialisation d’usine est effectuée sur l’appareil. Il existe également un bogue connu avec un combiné populaire d’un fabricant où toutes les instances ont le même ANDROID_ID. Clairement, la solution n’est pas fiable à 100%.

5. Utiliser UUID

Comme l’exigence pour la plupart des applications est d’identifier une installation particulière et non un appareil physique, une bonne solution pour obtenir un identifiant unique pour un utilisateur si d’utiliser la classe UUID. La solution suivante a été présentée par Reto Meier de Google dans une présentation Google I/O :

La méthode UUID.randomUUID() génère un identifiant unique pour une installation spécifique. Il vous suffit de stocker cette valeur et votre utilisateur sera identifié au prochain lancement de votre application. Vous pouvez également essayer d’associer cette solution au service Android Backup pour garder les informations disponibles pour l’utilisateur même s’il installe votre application sur un autre appareil.

Conclusion

Identifier un appareil particulier sur Android n’est pas une chose facile. Il y a beaucoup de bonnes raisons d’éviter cela. La meilleure solution est probablement d’identifier une installation particulière en utilisant la solution UUID. Cependant, si vous voulez absolument identifier physiquement un appareil particulier, vous pouvez essayer d’utiliser la solution ANDROID_ID. Pas fiable à 100% mais meilleure que les autres solutions.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.