Les appareils Android ont-ils un ID unique et, dans l'affirmative, quel est un moyen simple d'y accéder en utilisant Java?
android
uniqueidentifier
Tyler
la source
la source
ANDROID_ID
assurez-vous de lire cette réponse et ce bogue .Réponses:
Settings.Secure#ANDROID_ID
renvoie l'ID Android comme unique pour chaque chaîne hexadécimale 64 bits d' utilisateur .la source
MISE À JOUR : Depuis les versions récentes d'Android, de nombreux problèmes
ANDROID_ID
ont été résolus et je pense que cette approche n'est plus nécessaire. Veuillez jeter un œil à la réponse d'Anthony .Divulgation complète: mon application a utilisé l'approche ci-dessous à l'origine mais n'utilise plus cette approche, et nous utilisons maintenant l'approche décrite dans l' entrée du blog des développeurs Android à laquelle la réponse d'Emby est liée (à savoir, générer et enregistrer un
UUID#randomUUID()
).Il existe de nombreuses réponses à cette question, dont la plupart ne fonctionneront que "parfois", et malheureusement ce n'est pas suffisant.
Sur la base de mes tests d'appareils (tous les téléphones, dont au moins un n'est pas activé):
TelephonyManager.getDeviceId()
TelephonyManager.getSimSerialNumber()
getSimSerialNumber()
(comme prévu)ANDROID_ID
ANDROID_ID
etTelephonyManager.getDeviceId()
- tant que qu'un compte Google a été ajouté lors de la configuration.Donc, si vous voulez quelque chose d'unique à l'appareil lui-même, cela
TM.getDeviceId()
devrait suffire. De toute évidence, certains utilisateurs sont plus paranoïaques que d'autres, il peut donc être utile de hacher 1 ou plusieurs de ces identifiants, afin que la chaîne soit toujours pratiquement unique à l'appareil, mais n'identifie pas explicitement l'appareil réel de l'utilisateur. Par exemple, en utilisantString.hashCode()
, combiné avec un UUID:pourrait entraîner quelque chose comme:
00000000-54b3-e7c7-0000-000046bffd97
Cela fonctionne assez bien pour moi.
Comme Richard le mentionne ci-dessous, n'oubliez pas que vous avez besoin d'une autorisation pour lire les
TelephonyManager
propriétés, alors ajoutez ceci à votre manifeste:importer des bibliothèques
la source
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
au fichier manifeste. En cas de stockage dans une base de données, la chaîne renvoyée comporte 36 caractères.Dernière mise à jour: 6/2/15
Après avoir lu chaque article Stack Overflow sur la création d'un ID unique, le blog des développeurs Google et la documentation Android, j'ai l'impression que le `` pseudo ID '' est la meilleure option possible.
Problème principal: matériel vs logiciel
Matériel
Logiciel
Répartition globale avec Android
- Garantir l'unicité (inclure les appareils enracinés) pour l'API> = 9/10 (99,5% des appareils Android)
- Pas d'autorisations supplémentaires
Code du pseudo:
Merci à @stansult d'avoir publié toutes nos options (dans cette question Stack Overflow).
Liste des options - raisons pour lesquelles / pourquoi ne pas les utiliser:
Courriel de l'utilisateur - Logiciel
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
ou<uses-permission android:name="android.permission.READ_PROFILE" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
( Comment obtenir l'adresse e-mail principale de l'appareil Android )Numéro de téléphone de l'utilisateur - Logiciel
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
IMEI - Matériel (uniquement téléphones, besoins
android.permission.READ_PHONE_STATE
)<uses-permission android:name="android.permission.READ_PHONE_STATE" />
ID Android - Matériel (peut être nul, peut changer lors de la réinitialisation d'usine, peut être modifié sur un appareil rooté)
Adresse MAC WLAN - Matériel (besoins
android.permission.ACCESS_WIFI_STATE
)<uses-permission android:name="android.permission.ACCESS_WIFI_STATE "/>
Adresse MAC Bluetooth - Matériel (appareils avec Bluetooth, besoins
android.permission.BLUETOOTH
)<uses-permission android:name="android.permission.BLUETOOTH "/>
ID pseudo-unique - Logiciel (pour tous les appareils Android)
Je sais qu'il n'y a pas de moyen «parfait» d'obtenir un identifiant unique sans utiliser d'autorisations; cependant, il nous suffit parfois de suivre l'installation de l'appareil. Lorsqu'il s'agit de créer un identifiant unique, nous pouvons créer un 'pseudo identifiant unique' basé uniquement sur des informations que l'API Android nous donne sans utiliser d'autorisations supplémentaires. De cette façon, nous pouvons montrer le respect de l'utilisateur et essayer d'offrir une bonne expérience utilisateur également.
Avec un identifiant pseudo-unique, vous ne rencontrez vraiment que des doublons basés sur le fait qu'il existe des appareils similaires. Vous pouvez modifier la méthode combinée pour la rendre plus unique; cependant, certains développeurs ont besoin de suivre les installations d'appareils et cela fera l'affaire ou les performances basées sur des appareils similaires.
API> = 9:
Si leur appareil Android est API 9 ou supérieur, cela est garanti unique en raison du champ 'Build.SERIAL'.
N'OUBLIEZ PAS , vous ne manquez techniquement qu'environ 0,5% des utilisateurs qui ont une API <9 . Vous pouvez donc vous concentrer sur le reste: c'est 99,5% des utilisateurs!
API <9:
Si l'appareil Android de l'utilisateur est inférieur à l'API 9; nous espérons qu'ils n'ont pas effectué de réinitialisation d'usine et que leur 'Secure.ANDROID_ID' sera conservé ou non 'null'. (voir http://developer.android.com/about/dashboards/index.html )
Si tout le reste échoue:
Si tout le reste échoue, si l'utilisateur a une version inférieure à API 9 (inférieure à Gingerbread), a réinitialisé son appareil ou `` Secure.ANDROID_ID '' renvoie `` null '', alors simplement l'ID retourné sera uniquement basé sur les informations de son appareil Android. C'est là que les collisions peuvent se produire.
Changements:
Veuillez consulter la méthode ci-dessous:
Nouveau (pour les applications avec annonces ET services Google Play):
Depuis la console du développeur Google Play:
Réalisation :
Autorisation:
Code:
Source / Documents:
http://developer.android.com/google/play-services/id.html http://developer.android.com/reference/com/google/android/gms/ads/identifier/AdvertisingIdClient.html
Important:
Attention, les utilisateurs peuvent réinitialiser:
http://en.kioskea.net/faq/34732-android-reset-your-advertising-id
J'ai essayé de référencer tous les liens dont j'ai tiré des informations. Si vous manquez et devez être inclus, veuillez commenter!
InstanceID des services Google Player
https://developers.google.com/instance-id/
la source
Build
classe ne changerait-elle pas lors de la mise à jour du système d'exploitation? Surtout si l'API a été mise à jour? Si oui, comment garantissez-vous que ce soit unique? (En parlant de la méthode que vous avez écrite)Comme le mentionne Dave Webb, le blog des développeurs Android contient un article qui couvre cela. Leur solution préférée est de suivre les installations d'applications plutôt que les appareils, et cela fonctionnera bien pour la plupart des cas d'utilisation. Le billet de blog vous montrera le code nécessaire pour que cela fonctionne, et je vous recommande de le vérifier.
Cependant, l'article de blog continue pour discuter des solutions si vous avez besoin d'un identifiant d'appareil plutôt que d'un identifiant d'installation d'application. J'ai parlé à quelqu'un chez Google pour obtenir des éclaircissements supplémentaires sur quelques éléments au cas où vous en auriez besoin. Voici ce que j'ai découvert à propos des identifiants d'appareil NON mentionnés dans le billet de blog susmentionné:
Sur la base des recommandations de Google, j'ai implémenté une classe qui générera un UUID unique pour chaque appareil, en utilisant ANDROID_ID comme valeur de départ le cas échéant, en recourant à TelephonyManager.getDeviceId () si nécessaire, et si cela échoue, en recourant à un UUID unique généré de manière aléatoire qui persiste à travers les redémarrages des applications (mais pas les réinstallations d'applications).
Notez que pour les appareils qui doivent recourir à l'ID de l'appareil, l'ID unique SERA persistera dans les réinitialisations d'usine. C'est quelque chose dont il faut être conscient. Si vous devez vous assurer qu'une réinitialisation d'usine réinitialise votre ID unique, vous pouvez envisager de retomber directement sur l'UUID aléatoire au lieu de l'ID de l'appareil.
Encore une fois, ce code est pour un ID d'appareil, pas un ID d'installation d'application. Pour la plupart des situations, un ID d'installation d'application est probablement ce que vous recherchez. Mais si vous avez besoin d'un ID d'appareil, le code suivant fonctionnera probablement pour vous.
la source
Voici le code que Reto Meier a utilisé dans la présentation Google I / O cette année pour obtenir un identifiant unique pour l'utilisateur:
Si vous associez cela à une stratégie de sauvegarde pour envoyer des préférences au cloud (également décrit dans l' exposé de Reto , vous devriez avoir un identifiant qui se lie à un utilisateur et reste après que l'appareil a été effacé, ou même remplacé. Je prévois d'utiliser cela dans l'analyse à l'avenir (en d'autres termes, je ne l'ai pas encore fait :).
la source
Vous pouvez également considérer l'adresse MAC de l'adaptateur Wi-Fi. Récupéré comme ceci:
Nécessite une autorisation
android.permission.ACCESS_WIFI_STATE
dans le manifeste.Signalé comme étant disponible même lorsque le Wi-Fi n'est pas connecté. Si Joe de la réponse ci-dessus essaye celui-ci sur ses nombreux appareils, ce serait bien.
Sur certains appareils, il n'est pas disponible lorsque le Wi-Fi est désactivé.
REMARQUE: à partir d'Android 6.x, il renvoie une fausse adresse mac cohérente:
02:00:00:00:00:00
la source
android.permission.ACCESS_WIFI_STATE
02:00:00:00:00:00
Il y a des informations plutôt utiles ici .
Il couvre cinq types d'ID différents:
android.permission.READ_PHONE_STATE
)android.permission.ACCESS_WIFI_STATE
)android.permission.BLUETOOTH
)la source
Le blog officiel des développeurs Android a maintenant un article complet sur ce même sujet, Identifier les installations d'applications .
la source
Chez Google I / O Reto Meier a publié une réponse solide sur la façon d'aborder ce problème, qui devrait répondre à la plupart des besoins des développeurs pour suivre les utilisateurs sur les installations. Anthony Nolan montre la direction dans sa réponse, mais je pensais que j'écrirais l'approche complète afin que les autres puissent facilement voir comment le faire (il m'a fallu un certain temps pour comprendre les détails).
Cette approche vous donnera un ID utilisateur anonyme et sécurisé qui sera persistant pour l'utilisateur sur différents appareils (en fonction du compte Google principal) et sur toutes les installations. L'approche de base consiste à générer un ID utilisateur aléatoire et à le stocker dans les préférences partagées des applications. Vous utilisez ensuite l'agent de sauvegarde de Google pour stocker les préférences partagées liées au compte Google dans le cloud.
Passons en revue l'approche complète. Tout d'abord, nous devons créer une sauvegarde pour nos SharedPreferences à l'aide du service de sauvegarde Android. Commencez par enregistrer votre application via
http://developer.android.com/google/backup/signup.html
.Google vous fournira une clé de service de sauvegarde que vous devez ajouter au manifeste. Vous devez également indiquer à l'application d'utiliser le BackupAgent comme suit:
Ensuite, vous devez créer l'agent de sauvegarde et lui dire d'utiliser l'agent d'assistance pour les préférences partagées:
Pour terminer la sauvegarde, vous devez créer une instance de BackupManager dans votre activité principale:
Enfin, créez un ID utilisateur, s'il n'existe pas déjà, et stockez-le dans SharedPreferences:
Cet ID_utilisateur sera désormais persistant dans toutes les installations, même si l'utilisateur déplace l'appareil.
Pour plus d'informations sur cette approche, voir le discours de Reto .
Et pour plus de détails sur la façon d'implémenter l'agent de sauvegarde, voir Sauvegarde des données . Je recommande particulièrement la section en bas sur les tests car la sauvegarde ne se fait pas instantanément et donc pour tester, vous devez forcer la sauvegarde.
la source
Je pense que c'est un moyen sûr de construire un squelette pour une identification unique ... vérifiez-le.
ID pseudo-unique, qui fonctionne sur tous les appareils Android Certains appareils n'ont pas de téléphone (par exemple, des tablettes) ou pour une raison quelconque, vous ne voulez pas inclure l'autorisation READ_PHONE_STATE. Vous pouvez toujours lire des détails tels que la version de la ROM, le nom du fabricant, le type de processeur et d'autres détails matériels, qui seront bien adaptés si vous souhaitez utiliser l'ID pour une vérification de clé de série ou à d'autres fins générales. L'ID ainsi calculé ne sera pas unique: il est possible de trouver deux appareils avec le même ID (basé sur le même matériel et la même image ROM) mais les changements dans les applications réelles sont négligeables. Pour cela, vous pouvez utiliser la classe Build:
La plupart des membres de Build sont des chaînes, ce que nous faisons ici est de prendre leur longueur et de la transformer via modulo en un chiffre. Nous avons 13 de ces chiffres et nous en ajoutons deux de plus à l'avant (35) pour avoir le même ID de taille que l'IMEI (15 chiffres). Il existe d'autres possibilités ici sont bien, jetez un oeil à ces chaînes. Renvoie quelque chose comme
355715565309247
. Aucune autorisation spéciale n'est requise, ce qui rend cette approche très pratique.(Information supplémentaire: la technique indiquée ci-dessus a été copiée d'un article sur Pocket Magic .)
la source
Le code suivant renvoie le numéro de série de l'appareil à l'aide d'une API Android masquée. Mais, ce code ne fonctionne pas sur Samsung Galaxy Tab car "ro.serialno" n'est pas défini sur cet appareil.
la source
ro.serialno
est utilisé pour générer leSettings.Secure.ANDROID_ID
. Ce sont donc essentiellement des représentations différentes de la même valeur.ANDROID_ID
dérive.android.os.Build.SERIAL
android.os.Build.SERIAL
sera déconseillé dans Android O, voir android-developers.googleblog.com/2017/04/…C'est une question simple, sans réponse simple.
De plus, toutes les réponses existantes ici sont obsolètes ou peu fiables.
Donc, si vous cherchez une solution en 2020 .
Voici quelques éléments à prendre en compte:
Tous les identifiants basés sur le matériel (SSAID, IMEI, MAC, etc.) ne sont pas fiables pour les appareils autres que Google (tout sauf les pixels et les Nexus), qui représentent plus de 50% des appareils actifs dans le monde. Par conséquent, les meilleures pratiques des identifiants Android officiels indiquent clairement:
Cela rend la plupart des réponses ci-dessus invalides. En raison également de différentes mises à jour de sécurité Android, certaines d'entre elles nécessitent des autorisations d'exécution plus récentes et plus strictes, qui peuvent être simplement refusées par l'utilisateur.
Comme exemple
CVE-2018-9489
qui affecte toutes les techniques basées sur WIFI mentionnées ci-dessus.Cela rend ces identifiants non seulement peu fiables, mais aussi inaccessibles dans de nombreux cas.
Donc, en termes plus simples: n'utilisez pas ces techniques .
De nombreuses autres réponses suggèrent d'utiliser le
AdvertisingIdClient
, qui est également incompatible, car sa conception devrait être utilisée uniquement pour le profilage des annonces. Il est également indiqué dans la référence officielleIl est non seulement peu fiable pour l'identification de l'appareil, mais vous devez également respecter la confidentialité des utilisateurs concernant le suivi des annonces politique de , qui stipule clairement que l'utilisateur peut la réinitialiser ou la bloquer à tout moment.
Alors ne l'utilisez pas non plus .
Étant donné que vous ne pouvez pas disposer de l'identifiant d'appareil statique globalement unique et fiable souhaité. La référence officielle d'Android suggère:
C'est unique pour l'installation de l'application sur l'appareil, donc lorsque l'utilisateur désinstalle l'application - elle est effacée, donc ce n'est pas fiable à 100%, mais c'est la meilleure chose à faire.
Pour utiliser,
FirebaseInstanceId
ajoutez la dernière dépendance de messagerie Firebase dans votre gradleEt utilisez le code ci-dessous dans un fil d'arrière-plan:
Si vous devez stocker l'identification de l'appareil sur votre serveur distant, ne la stockez pas telle quelle (texte brut), mais un hachage avec du sel .
Aujourd'hui, ce n'est pas seulement une meilleure pratique, vous devez en fait le faire conformément à la loi conformément au RGPD - identificateurs et réglementations similaires.
la source
En utilisant le code ci-dessous, vous pouvez obtenir l'ID d'appareil unique d'un appareil Android OS sous forme de chaîne.
la source
Un champ Série a été ajouté au
Build
classe dans l'API niveau 9 (Android 2.3 - Gingerbread). La documentation indique qu'il représente le numéro de série du matériel. Il doit donc être unique s'il existe sur l'appareil.Je ne sais pas si elle est réellement prise en charge (= non nulle) par tous les appareils avec un niveau API> = 9.
la source
Une chose que j'ajouterai - j'ai une de ces situations uniques.
En utilisant:
Il s'avère que même si ma tablette Viewsonic G signale un DeviceID qui n'est pas nul, chaque tablette G rapporte le même nombre.
Il est intéressant de jouer à "Pocket Empires" qui vous donne un accès instantané au compte de quelqu'un en fonction du DeviceID "unique".
Mon appareil n'a pas de radio cellulaire.
la source
9774d56d682e549c
?Pour obtenir des instructions détaillées sur la façon d'obtenir un identifiant unique pour chaque appareil Android à partir duquel votre application est installée, consultez la publication officielle du blog des développeurs Android Identification des installations d'applications .
Il semble que le meilleur moyen consiste à en générer un vous-même lors de l'installation et à le lire ensuite lorsque l'application est relancée.
Personnellement, je trouve cela acceptable mais pas idéal. Aucun identifiant fourni par Android ne fonctionne dans tous les cas, car la plupart dépendent des états de la radio du téléphone (Wi-Fi activé / désactivé, cellulaire activé / désactivé, Bluetooth activé / désactivé). Les autres, comme
Settings.Secure.ANDROID_ID
doivent être mis en œuvre par le fabricant et ne sont pas garantis d'être uniques.Voici un exemple d'écriture de données dans un fichier d' installation qui seraient stockées avec toutes les autres données que l'application enregistre localement.
la source
Ajouter le code ci-dessous dans le fichier de classe:
Ajoutez dans AndroidManifest.xml:
la source
L'ID d'appareil unique d'un appareil Android OS en tant que chaîne, à l'aide de
TelephonyManager
etANDROID_ID
, est obtenu par:Mais je recommande fortement une méthode suggérée par Google, voir Identification des installations d'applications .
la source
Il existe de nombreuses approches différentes pour contourner ces
ANDROID_ID
problèmes (null
parfois, ou les appareils d'un modèle spécifique retournent toujours le même ID) avec des avantages et des inconvénients:Je préfère moi-même utiliser une implémentation OpenUDID existante (voir https://github.com/ylechelle/OpenUDID ) pour Android (voir https://github.com/vieux/OpenUDID ). Il est facile à intégrer et utilise les solutions de
ANDROID_ID
secours pour les problèmes mentionnés ci-dessus.la source
Que diriez-vous de l' IMEI . C'est unique pour Android ou d'autres appareils mobiles.
la source
Voici comment je génère l'identifiant unique:
la source
Mes deux cents - NB c'est pour un identifiant unique de périphérique (err) - pas celui d'installation comme discuté dans le blog des développeurs Android .
Il est à noter que la solution fournie par @emmby retombe dans un ID par application car les SharedPreferences ne sont pas synchronisées entre les processus (voir ici et ici ). J'ai donc complètement évité cela.
Au lieu de cela, j'ai encapsulé les différentes stratégies pour obtenir un ID (périphérique) dans une énumération - la modification de l'ordre des constantes d'énumération affecte la priorité des différentes façons d'obtenir l'ID. Le premier ID non nul est renvoyé ou une exception est levée (conformément aux bonnes pratiques Java de ne pas donner de sens à null). Par exemple, j'ai d'abord le TELEPHONY - mais un bon choix par défaut serait la bêta d' ANDROID_ID :
la source
Il y a plus de 30 réponses ici et certaines sont identiques et certaines sont uniques. Cette réponse est basée sur quelques-unes de ces réponses. L'un d'eux étant la réponse de @Lenn Dolling.
Il combine 3 ID et crée une chaîne hexadécimale à 32 chiffres. Cela a très bien fonctionné pour moi.
3 ID sont:
Pseudo-ID - Il est généré sur la base des spécifications de l'appareil physique
ANDROID_ID -
Settings.Secure.ANDROID_ID
Adresse Bluetooth - Adresse de l' adaptateur Bluetooth
Il renverra quelque chose comme ceci: 551F27C060712A72730B0A0F734064B1
Remarque: vous pouvez toujours ajouter d'autres ID à la
longId
chaîne. Par exemple, Serial #. adresse de l'adaptateur wifi. IMEI. De cette façon, vous le rendez plus unique par appareil.la source
longId
et le stocker dans un fichier, en fera l'identifiant le plus unique:String uuid = UUID.randomUUID().toString();
longId
. Modifiez cette ligne comme ceci:String longId = pseudoId + androidId + btId + UUID.randomUUID().toString();
Cela garantit que l'ID généré sera unique.Une autre façon est d'utiliser
/sys/class/android_usb/android0/iSerial
dans une application sans aucune autorisation.Pour ce faire en Java, il suffit d'utiliser un FileInputStream pour ouvrir le fichier iSerial et lire les caractères. Assurez-vous simplement de l'envelopper dans un gestionnaire d'exceptions, car tous les périphériques n'ont pas ce fichier.
Au moins les périphériques suivants sont connus pour avoir ce fichier lisible dans le monde:
Vous pouvez également voir mon article de blog Fuite du numéro de série du matériel Android sur des applications non privilégiées où je discute des autres fichiers disponibles pour information.
la source
TelephonyManger.getDeviceId () Renvoie l'ID d'appareil unique, par exemple, l'IMEI pour GSM et le MEID ou ESN pour les téléphones CDMA.
Mais je recommande d'utiliser:
Settings.Secure.ANDROID_ID qui renvoie l'ID Android sous la forme d'une chaîne hexadécimale unique de 64 bits.
Parfois TelephonyManger.getDeviceId () retournera null, donc pour assurer un identifiant unique, vous utiliserez cette méthode:
la source
Pour la reconnaissance matérielle d'un appareil Android spécifique, vous pouvez vérifier les adresses MAC.
vous pouvez le faire de cette façon:
dans AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET" />
maintenant dans votre code:
Dans chaque appareil Android, il s'agit au moins d'une interface "wlan0", la puce WI-FI. Ce code fonctionne même lorsque le WI-FI n'est pas activé.
PS Il y a un tas d'autres interfaces que vous obtiendrez dans la liste contenant MACS Mais cela peut changer entre les téléphones.
la source
J'utilise le code suivant pour obtenir le
IMEI
ou utiliser Secure.ANDROID_ID
comme alternative, lorsque l'appareil n'a pas de fonctionnalités téléphoniques:la source
Plus précisément,
Settings.Secure.ANDROID_ID
. Il s'agit d'une quantité 64 bits générée et stockée lors du premier démarrage de l'appareil. Il est réinitialisé lorsque l'appareil est essuyé.ANDROID_ID
semble un bon choix pour un identifiant d'appareil unique. Il y a des inconvénients: tout d'abord, il n'est pas fiable à 100% sur les versions d'Android antérieures à la version 2.2.En(“Froyo”).
outre, il y a eu au moins un bogue largement observé dans un combiné populaire d'un grand fabricant, où chaque instance a le même ANDROID_ID.la source
Pour comprendre les identifiants uniques disponibles sur les appareils Android. Utilisez ce guide officiel.
Meilleures pratiques pour les identifiants uniques:
IMEI, adresses Mac, identifiant d'instance, GUID, SSAID, identifiant publicitaire, API Safety Net pour vérifier les appareils.
https://developer.android.com/training/articles/user-data-ids
la source
ID d'instance Google
Sorti à I / O 2015; sur Android nécessite des services de jeu 7.5.
https://developers.google.com/instance-id/
https://developers.google.com/instance-id/guides/android-implementation
Il semble que Google ait l'intention d'utiliser cet ID pour identifier les installations sur Android, Chrome et iOS.
Il identifie une installation plutôt qu'un périphérique, mais là encore, ANDROID_ID (qui est la réponse acceptée) n'identifie plus les périphériques non plus. Avec le runtime ARC, un nouvel ANDROID_ID est généré pour chaque installation ( détails ici ), tout comme ce nouvel ID d'instance. De plus, je pense que l'identification des installations (et non des appareils) est ce que la plupart d'entre nous recherchent réellement.
Les avantages de l'ID d'instance
Il me semble que Google a l'intention de l'utiliser à cette fin (identification de vos installations), il est multiplateforme et peut être utilisé à plusieurs autres fins (voir les liens ci-dessus).
Si vous utilisez GCM, vous devrez éventuellement utiliser cet ID d'instance car vous en aurez besoin pour obtenir le jeton GCM (qui remplace l'ancien ID d'enregistrement GCM).
Les inconvénients / problèmes
Dans l'implémentation actuelle (GPS 7.5), l'ID d'instance est récupéré d'un serveur lorsque votre application le demande. Cela signifie que l'appel ci-dessus est un appel bloquant - dans mes tests non scientifiques, cela prend 1 à 3 secondes si l'appareil est en ligne, et 0,5 à 1 seconde s'il est hors ligne (probablement le temps d'attente avant d'abandonner et de générer un ID aléatoire). Cela a été testé en Amérique du Nord sur Nexus 5 avec Android 5.1.1 et GPS 7.5.
Si vous utilisez l'ID aux fins prévues - par exemple. authentification de l'application, identification de l'application, GCM - Je pense que cette période de 1 à 3 secondes pourrait être gênante (selon votre application, bien sûr).
la source