Est-il un Android unique ID de l'appareil?
Ne les appareils Android ont un ID unique, et si oui, quel est un moyen simple d'accéder à l'aide de Java?
- Si vous utilisez
ANDROID_ID
assurez-vous de lire cette réponse et ce bogue. - Voici une intéressante réponse.
- Je l'ai trouvé parfait: stackoverflow.com/a/16929647/1318946
- J'ai trouvé cela très utile, car elle traite de tous les identificateurs uniques et pèse dans chaque et conclut le meilleur, stackoverflow.com/q/27233518/5252270
Vous devez vous connecter pour publier un commentaire.
Paramètres.Sécuriser#ANDROID_ID
retourne le Android ID unique pour chaque utilisateur 64-bit hex chaîne.ANDROID_ID
- je ne peux pas reproduire cela dans le test cependant la peine d'être au courant de toute façon...Mise à JOUR: Que des versions récentes d'Android, de nombreux problèmes avec
ANDROID_ID
ont été résolus, et je crois que cette approche n'est plus nécessaire. Veuillez prendre un coup d'oeil à Anthony répondre.Divulgation complète: mon application utilisée ci-dessous la démarche à l'origine, mais n'utilise plus cette approche, et nous allons maintenant utiliser l'approche décrite dans le Développeur Android Blog entrée emmby réponse liens (à savoir, la production et l'enregistrement d'un
UUID#randomUUID()
).Il y a plusieurs réponses à cette question, dont la plupart ne travaillent "un peu" de temps, et malheureusement, ce n'est pas assez bon.
Basé sur mes tests d'appareils (tous les téléphones, au moins un qui n'est pas activé):
TelephonyManager.getDeviceId()
TelephonyManager.getSimSerialNumber()
getSimSerialNumber()
(comme prévu)ANDROID_ID
ANDROID_ID
etTelephonyManager.getDeviceId()
-- tant que un compte Google a été ajouté lors de l'installation.Donc, si vous voulez quelque chose d'unique à l'appareil lui-même,
TM.getDeviceId()
devrait être suffisant. Évidemment, certains utilisateurs sont plus paranoïaque que d'autres, alors il pourrait être utile de hachage 1 ou plusieurs de ces identifiants, de sorte que la chaîne est encore pratiquement unique de l'appareil, mais ne prévoit pas explicitement l'identification de l'utilisateur du périphérique. Par exemple, à l'aide deString.hashCode()
, combiné avec un UUID:pourrait aboutir à quelque chose comme:
00000000-54b3-e7c7-0000-000046bffd97
Il fonctionne assez bien pour moi.
Comme Richard mentionne ci-dessous, n'oubliez pas que vous avez besoin de l'autorisation de lire le
TelephonyManager
propriétés, de façon à ajouter à votre manifeste:importation libs
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
pour le fichier manifeste. En cas de stockage dans une base de données, la chaîne renvoyée est de 36 caractères.getLine1Number()
), mais cela ne fonctionne pas toujours, et n'a pas vraiment aider de toute façon, nous l'avons supprimée. C'est juste un reste variable, bonne prise. 🙂 Je vais la retirer de l'exemple.getSimSerialNumber()
car l'utilisateur peut facilement changer de carte SIM.getDeviceId()
changé sur le Changement de la carte SIM. Pourquoi?getSimSerialNumber()
contributeur avec quelque chose d'autre (ou de les omettre, par la substitution0
à sa place.tm.getDeviceId()
était dépréciée de l'api de 26. wouldnt être un problème ?Dernière Mise À Jour: 6/2/15
Après la lecture de chaque Débordement de Pile post sur la création d'un IDENTIFIANT unique, Google blog des développeurs Android et de la documentation, je me sens comme si la "Pseudo ID" est la meilleure option possible.
Question principale: Matériel vs Logiciel
Matériel
Logiciel
Répartition globale avec Android
- Garantir l'unicité (inclure enracinée périphériques) pour l'API >= 9/10 (99,5% des appareils Android)
- Pas de droits supplémentaires
Pseudo code:
Grâce à @stansult pour l'affichage toutes nos options (dans ce Débordement de Pile question).
Liste des options - les raisons/pourquoi ne pas les utiliser:
Email 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 de l'appareil Android, l'adresse de messagerie principale)De L'Utilisateur Numéro De Téléphone - Logiciel
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
IMEI - Matériel (seuls les téléphones, les besoins
android.permission.READ_PHONE_STATE
)<uses-permission android:name="android.permission.READ_PHONE_STATE" />
Android ID - Matériel (peut être null, peut changer lors de la réinitialisation d'usine, peut être modifié sur un dispositif enracinée)
Adresse MAC WLAN - Matériel (besoins
android.permission.ACCESS_WIFI_STATE
)<uses-permission android:name="android.permission.ACCESS_WIFI_STATE "/>
Bluetooth - Adresse MAC du Matériel (appareils avec Bluetooth, les besoins
android.permission.BLUETOOTH
)<uses-permission android:name="android.permission.BLUETOOTH "/>
Pseudo-Unique ID - Logiciel (pour tous les appareils Android)
Je sais qu'il n'est pas "parfait" d'obtenir un ID unique sans l'aide d'autorisations; cependant, parfois nous n'avons vraiment besoin de suivre l'installation de l'appareil. Quand il s'agit de la création d'un IDENTIFIANT unique, nous pouvons créer un pseudo unique id " basée uniquement au large de l'information que l'API Android nous donne sans l'aide des autorisations supplémentaires. De cette façon, nous pouvons montrer à l'utilisateur de respect et d'essayer d'offrir une bonne expérience utilisateur.
Avec un pseudo-id unique, vous vraiment exécuter uniquement dans le fait qu'il peut y avoir des doublons sur la base du fait qu'il existe des dispositifs similaires. Vous pouvez modifier la méthode combinée pour le rendre plus unique; toutefois, certains développeurs ont besoin pour suivre l'installation des périphériques et cela fera l'affaire ou de la performance, basée sur des dispositifs similaires.
API >= 9:
Si leur appareil Android API 9 ou plus, c'est la garantie d'être unique en raison de la 'Construire.SÉRIE champ.
RAPPELEZ-vous, vous êtes techniquement seulement absent dehors sur environ 0,5% des utilisateurs qui ont API < 9. Vous pouvez donc vous concentrer sur le reste: C'est de 99,5% des utilisateurs!
API < 9:
Si l'utilisateur de l'appareil Android est inférieure à celle de l'API 9; avec de la chance, ils n'ont pas fait un factory reset et de leur Sécurité.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 est inférieur API 9 (moins de pain d'épice), a remis leur appareil ou 'Secure.ANDROID_ID' retourne 'null', puis tout simplement l'ID retourné sera uniquement basé sur leur appareil Android de l'information. C'est l'endroit où les collisions peuvent se produire.
Changements:
Veuillez jeter un oeil à la méthode ci-dessous:
Nouvelle (pour les applications avec des annonces ET Google Play Services):
Depuis le Google Play Developer console:
Mise en œuvre:
Autorisation:
Code:
Source/Docs:
http://developer.android.com/google/play-services/id.html
http://developer.android.com/reference/com/google/android/gms/ads/identifier/AdvertisingIdClient.html
Important:
Avertissement, les utilisateurs peuvent réinitialiser:
http://en.kioskea.net/faq/34732-android-reset-your-advertising-id
J'ai essayé de faire référence à tous les liens que j'ai pris des informations. Si vous êtes absent et doivent être inclus, s'il vous plaît commentaire!
Google Joueur Services InstanceID
https://developers.google.com/instance-id/
Build
le changement de classe lors de la mise à jour OS? Surtout si l'API s'est mis à jour? Si oui, comment avez-vous garantir ce qui est unique? (En parlant de la méthode que vous avez écrit)getBytes()
de chacun de ces éléments (commeBuild.BOARD
) à l'encontre delength()
d'entre eux, il est mieux de faire du résultat unique. Parce que la longueur d'articles, peut-être même à d'autres dispositifs.getUniquePsuedoID()
utilisationandroid.os.Build.class.getField("SERIAL").get(null).toString()
au lieu de simplementBuild.SERIAL
?O
aura pour effet de lier la lectureBuild.SERIAL
à une autorisation, afin deBuild.SERIAL
sera obsolète. 😐Build.SERIAL
est obsolète pour 25+ sdk (N_MR1) et renvoie toujours "inconnu". DoncPsuedoId
n'est pas unique plus. Bonne journée 🙂Build.getSerial()
(android-developers.googleblog.com/2017/04/...). Bonne journée aussi 🙂Comme Dave Webb mentionne, le Développeur Android Blog a un article que couvre ce. Leur solution préférée est de suivre l'application s'installe plutôt que de dispositifs, et qui fonctionne bien pour la plupart des cas d'utilisation. Le blog sera de vous montrer le code nécessaire pour faire ce travail, et je vous recommande de vérifier it out.
Cependant, le blog va sur pour discuter des solutions si vous avez besoin d'un identifiant de l'appareil plutôt que d'une application de l'identificateur d'installation. J'ai parlé avec quelqu'un de chez Google pour obtenir des précisions complémentaires sur quelques éléments dans le cas où vous avez besoin de le faire. Voici ce que j'ai découvert sur les identificateurs de l'instrument qui n'est PAS mentionné dans le blog précité:
Basé sur Google recommandations, j'ai mis en place une classe qui va générer un UUID unique pour chaque appareil à l'aide d'ANDROID_ID comme la semence, le cas échéant, pour retomber sur TelephonyManager.getDeviceId (), si nécessaire, et en cas d'échec, le recours à un unique généré de façon aléatoire UUID qui est conservé à travers application redémarre (mais pas app ré-installations).
Noter que pour les appareils qui ont de repli sur l'ID de l'appareil, l'IDENTIFIANT unique SERA persistent dans l'usine réinitialise. C'est quelque chose d'être conscient de. Si vous devez vous assurer qu'une réinitialisation aux paramètres d'usine réinitialiser votre ID unique, vous pouvez envisager de redescendre directement à l'aléatoire UUID au lieu de l'ID de l'appareil.
Encore une fois, ce code est pour l'ID de périphérique, pas une application d'identification de l'installation. Pour la plupart des situations, une application d'identification de l'installation est probablement ce que vous cherchez. Mais si vous avez besoin d'un ID de périphérique, puis le code suivant va probablement travailler pour vous.
SharedPreference
fichier, je pense qu'il est prudent de souligner que si l'utilisateur est enracinée, ils peuvent modifier ledevice_id.xml
fichier de fournir les pièces d'identité qu'ils veulent. Que pensez-vous @emmby ? Cela dit j'aime les réserves que vous utilisez. Je suis également d'envisager l'aide deandroid.os.Build.SERIAL
comme un secours pour les tablettes avant d'utiliser le dernier nombre aléatoire de secours.Voici le code que Reto Meier utilisé dans le Google I/O présentation cette année pour obtenir un id unique pour l'utilisateur:
Si vous couplez cela avec une stratégie de sauvegarde pour envoyer des préférences pour le cloud (également décrits dans Reto s parler, vous devez avoir une carte d'identité qui le lie à un utilisateur et autour de bâtons après que l'appareil a été effacé, ou même remplacés. J'ai l'intention de l'utiliser dans l'analytique à l'avenir (en d'autres termes, je n'ai pas fait que peu encore :).
Aussi, vous pouvez envisager de la connexion Wi-Fi gratuite adresse MAC de la carte. Extrait ainsi:
Nécessite une autorisation
android.permission.ACCESS_WIFI_STATE
dans le manifeste.Signalé à être disponible, même lorsque le Wi-Fi n'est pas connecté. Si Joe de la réponse ci-dessus donne l'essayer sur son, de nombreux appareils, ce serait sympa.
Sur certains appareils, il n'est pas disponible lors de la connexion Wi-Fi est désactivé.
REMARQUE: De Android 6.x, il retourne cohérente fausse adresse mac:
02:00:00:00:00:00
android.permission.ACCESS_WIFI_STATE
02:00:00:00:00:00
Il y a plutôt infos utiles ici.
Il couvre cinq différents types d'ID:
android.permission.READ_PHONE_STATE
)android.permission.ACCESS_WIFI_STATE
)android.permission.BLUETOOTH
)L'officiel des Développeurs Android Blog a maintenant un article complet juste à propos de ce sujet, Identifier Les Installations D'Applications.
À Google I/O Reto Meier a publié une solide réponse à la façon d'aborder ce qui devrait répondre à la plupart des développeurs besoins pour le suivi des utilisateurs à travers des installations. Anthony Nolan montre la direction dans sa réponse, mais je pensais écrire l'approche intégrale de sorte que d'autres personnes peuvent facilement voir comment le faire (il m'a fallu un certain temps à comprendre les détails).
Cette approche permettra de vous donner un anonyme, sécurisé ID d'utilisateur qui sera persistante de l'utilisateur à travers les différents dispositifs (basé sur le compte Google principal) et à travers le installe. L'approche de base est de générer de façon aléatoire un ID d'utilisateur et de les stocker dans les applications communes des préférences. Ensuite, vous utilisez Google l'agent de sauvegarde pour stocker les préférences partagées lié au compte Google dans le cloud.
Allons par le biais de l'approche intégrale. Tout d'abord, nous avons besoin de créer une copie de sauvegarde pour nos SharedPreferences à l'aide de la Sauvegarde Android Service. Commencez par enregistrer votre application via
http://developer.android.com/google/backup/signup.html
.Google vous donnera une sauvegarde de la clé de service dont vous avez besoin pour ajouter à la manifester. Vous devez également indiquer à l'application d'utiliser les BackupAgent comme suit:
Alors vous avez besoin pour créer la sauvegarde de l'agent et dites lui d'utiliser l'aide de l'agent pour les sharedpreferences:
Pour effectuer la sauvegarde, vous devez créer une instance de BackupManager dans votre Activité principale:
Enfin créer un ID d'utilisateur, si il n'existe pas déjà, et de le stocker dans les SharedPreferences:
Ce User_ID va maintenant être persistant à travers des installations, même si l'utilisateur déplace l'appareil.
Pour plus d'informations sur cette approche, voir Reto s talk.
Et pour des détails complets sur la façon de mettre en œuvre la sauvegarde de l'agent de voir La Sauvegarde Des Données. Je recommande en particulier la section du bas sur le test que la sauvegarde ne se fait pas instantanément et donc à tester, vous devez forcer la sauvegarde.
Je pense que c'est sûr moyen de la construction d'un squelette pour un ID unique... check it out.
Pseudo-ID Unique, qui fonctionne sur tous les appareils Android
Certains appareils ne disposent pas d'un téléphone (par exemple. Comprimés) ou pour une raison quelconque, vous ne souhaitez pas inclure la READ_PHONE_STATE autorisation. Vous pouvez lire les détails comme la Version de la ROM, nom du Fabricant, type de PROCESSEUR, et d'autres détails du matériel, qui sera bien adapté si vous souhaitez utiliser l'ID de série le contrôle de la clé, ou à d'autres fins générales. L'ID calculée de cette manière ne sera pas unique: il est possible de trouver deux appareils avec le même ID (basé sur le même matériel et l'image de la ROM), mais les changements dans les applications du monde réel sont négligeables. Pour cela vous pouvez utiliser l'accumulation de classe:
La plupart des Construire des membres sont des chaînes de caractères, ce que nous faisons ici est de prendre de leur longueur et de la transformer via modulo par un chiffre. Nous avons 13 de ces chiffres, et nous ajoutons deux autres à l'avant (35) pour avoir la même taille ID que le numéro IMEI (15 chiffres). Il y a ici d'autres possibilités sont bien, juste un coup d'oeil à ces chaînes.
Retourne quelque chose comme
355715565309247
. Aucune autorisation spéciale est nécessaire, ce qui rend cette approche très pratique.(Infos supplémentaires: La technique donnée ci-dessus a été copié à partir d'un article sur Poche Magique.)
Le code suivant renvoie l'appareil numéro de série à l'aide d'un caché l'API Android. Mais, ce code ne fonctionne pas sur Samsung Galaxy Tab parce que "ro.serialno" n'est pas défini sur cet appareil.
ro.serialno
est utilisé pour générer leSettings.Secure.ANDROID_ID
. Ils sont donc fondamentalement différentes représentations de la même valeur.ANDROID_ID
en est dérivé.android.os.Build.SERIAL
android.os.Build.SERIAL
sera obsolète dans Android O, voir android-developers.googleblog.com/2017/04/...À l'aide du code ci-dessous, vous pouvez obtenir l'IDENTIFIANT unique de l'appareil d'un système d'exploitation Android appareil comme une chaîne de caractères.
Un Série champ a été ajouté à la
Build
classe de l'API de niveau 9 (Android 2.3 - pain d'épices). La Documentation dit qu'il représente le numéro de série du matériel. Ainsi, il doit être unique, si elle existe sur l'appareil.Je ne sais pas si elle est réellement pris en charge (=not null) par tous les appareils avec l'API de niveau >= 9 si.
Une chose que je vais ajouter - j'ai une de ces situations particulières.
À l'aide de:
S'avère que même si mon Viewsonic G Tablet rapports un Id qui n'est pas Null, chaque G Tablette rapporte le même nombre.
Qui le rend intéressant jeu de Poche "Empires" qui vous donne un accès instantané à quelqu'un compte sur la base du "uniques" DeviceID.
Mon appareil ne dispose pas d'une cellule radio.
9774d56d682e549c
?Pour obtenir des instructions détaillées sur la façon d'obtenir un identifiant unique pour chaque appareil Android votre application est installée à partir de, voir l'officiel des Développeurs Android Blogue Identifier Les Installations D'Applications.
Il semble que la meilleure façon pour vous de générer un vous-même lors de l'installation et par la suite de le lire lorsque l'application est relancée.
Personnellement, je trouve cela acceptable, mais pas idéal. Pas un seul identificateur fourni par Android fonctionne dans tous les cas, comme la plupart dépendent du téléphone états radio (Wi-Fi, cellulaire on/off, Bluetooth on/off). Les autres, comme
Settings.Secure.ANDROID_ID
doit être mis en œuvre par le fabricant et ne sont pas garantis pour être unique.L'exemple suivant est un exemple de l'écriture de données sur un installation fichier qui est stocké avec d'autres données de l'application enregistre localement.
Ajouter le code ci-Dessous dans le fichier de classe:
Ajouter dans AndroidManifest.xml:
L'IDENTIFIANT unique de l'appareil d'un système d'exploitation Android de l'appareil en tant que Chaîne de caractères, à l'aide de
TelephonyManager
etANDROID_ID
, est obtenue par:Mais je vous conseille fortement une méthode proposée par Google, voir Identifier Les Installations D'Applications.
Il ya beaucoup de différentes approches pour contourner ces
ANDROID_ID
questions (peut êtrenull
parfois ou de dispositifs spécifiques d'un modèle retourne toujours le même ID) avec des avantages et des inconvénients:Moi je préfère utiliser un existant OpenUDID de mise en œuvre (voir https://github.com/ylechelle/OpenUDID) pour Android (voir https://github.com/vieux/OpenUDID). Il est facile à intégrer et rend l'utilisation de la
ANDROID_ID
avec des issues pour les questions mentionnées ci-dessus.Il y a 30+ de réponses ici, et certains sont mêmes et certaines sont uniques. Cette réponse est fondée sur quelques-unes de ces réponses. L'un d'eux étant @Lenn Dolling de réponse.
Il combine 3 Id et crée un 32 chiffres chaîne hexadécimale. Il a très bien fonctionné pour moi.
3 Id:
Pseudo-ID - Il est généré sur la base de physique spécifications de l'appareil
ANDROID_ID -
Settings.Secure.ANDROID_ID
Adresse Bluetooth - adaptateur Bluetooth adresse
Il sera de retour à quelque chose comme ceci: 551F27C060712A72730B0A0F734064B1
Remarque: Vous pouvez toujours ajouter plus d'Id pour la
longId
chaîne. Par exemple, le numéro de Série. wifi adresse de la carte. IMEI. De cette façon, vous rend plus unique pour chaque appareil.longId
et de le stocker dans un fichier, il sera le plus identifiant unique :String uuid = UUID.randomUUID().toString();
longId
. Changer une ligne comme ceci:String longId = pseudoId + androidId + btId + UUID.randomUUID().toString();
Cela garantit qui a généré le code d'identification unique.Comment au sujet de la IMEI. Qui est unique pour Android ou d'autres appareils mobiles.
Ici est de savoir comment je suis à la génération de l'identifiant unique:
Mes deux cents - NB c'est pour un appareil (err) ID unique - pas l'installation d'un tel que discuté dans la Les développeurs Android blog.
De noter que la solution fournis par @emmby retombe dans un ID d'application comme les SharedPreferences ne sont pas synchronisés sur l'ensemble des processus (voir ici et ici). Si j'ai évité tout cela.
Au lieu de cela, j'ai encapsulé les différentes stratégies pour obtenir un (périphérique) ID dans un enum - modification de l'ordre de l'énumération des constantes affecte la priorité des différentes façons d'obtenir l'ID. Le premier non-null retourne l'ID ou une exception est levée (comme par bonne Java pratiques de ne pas donner la valeur null à une signification). Ainsi, par exemple, j'ai la TÉLÉPHONIE une première, mais un bon choix serait le ANDROID_ID
beta:
Une autre façon est d'utiliser des
/sys/class/android_usb/android0/iSerial
dans une application, sans les autorisations que ce soit.Pour ce faire en Java, on pourrait simplement utiliser un FileInputStream pour ouvrir la iSerial fichier et de lire les caractères. Juste être sûr que vous enveloppez-le d'un gestionnaire d'exception, parce que pas tous les appareils de ce fichier.
Au moins pour les appareils suivants sont connus pour avoir accès à ce fichier lisible par tout le monde:
Vous pouvez aussi voir mon blog Fuite d'Android numéro de série matériel de non-privilégié apps où je discuter de ce que les autres fichiers sont disponibles pour plus d'informations.
De la reconnaissance du matériel spécifique d'un appareil Android, 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 leur est au moins un "wlan0" Interface sorcière WI-FI à puce.
Ce code fonctionne même lorsque le WI-FI n'est pas allumé.
P. S.
Il en existe un tas d'autres Interfaces que vous aurez à partir de la liste contenant les MACS Mais cela peut changer entre les téléphones.
J'utilise le code suivant pour obtenir la
IMEI
ou de l'utilisation de Secure.ANDROID_ID
comme une alternative, lorsque l'appareil ne dispose pas des capacités de téléphone:Plus précisément,
Settings.Secure.ANDROID_ID
. C'est un 64 bits qui est généré et stocké lorsque l'appareil démarre en premier. Il est réinitialisée lorsque l'appareil est effacé.ANDROID_ID
semble un bon choix pour un identifiant unique de l'appareil. Il y a des inconvénients: d'Abord, il n'est pas fiable à 100% sur les versions d'Android antérieures à 2,2(“Froyo”).
Aussi, il y a eu au moins un largement observé bug dans le populaire du combiné à partir d'un fabricant majeur, où chaque instance a le même ANDROID_ID.De comprendre la disposition des Id Uniques dans les appareils Android. Utilisez ce guide officiel.
Les meilleures pratiques pour les identificateurs uniques:
IMEI, les Adresses Mac, Id de l'Instance, Guid, SSAID, la Publicité, l'Id du Filet de Sécurité de l'API pour vérifier les périphériques.
https://developer.android.com/training/articles/user-data-ids
TelephonyManger.getDeviceId() Retourne l'IDENTIFIANT unique de l'appareil, par exemple, le numéro IMEI du GSM et de l'MEID ou ESN pour les téléphones CDMA.
Mais je recommande d'utiliser:
Paramètres.Sécurisé.ANDROID_ID qui renvoie le Android ID unique de 64 bits hex chaîne.
Parfois TelephonyManger.getDeviceId() retournera null, afin d'assurer un identifiant unique vous permettra d'utiliser cette méthode:
Google ID d'Instance
Publié au I/O 2015; sur Android nécessite jouer à des services 7.5.
https://developers.google.com/instance-id/
https://developers.google.com/instance-id/guides/android-implementation
Il semble que Google a l'intention de cet ID doit être utilisée pour identifier les installations sur Android, Chrome et iOS.
Il identifie une installation plutôt que d'un appareil, mais là encore, ANDROID_ID (qui est la réponse) maintenant n'est plus possible d'identifier des appareils. Avec l'ARC d'exécution d'un nouveau ANDROID_ID est généré pour chaque installation (les détails ici), tout comme cette nouvelle ID d'instance. Aussi, je pense que l'identification des installations (périphériques) est ce que la plupart d'entre nous sont en fait la recherche pour.
Les avantages de l'ID d'instance
Il me semble que Google a l'intention de les utiliser aux fins de l'identification de vos installations), il est multi-plateforme, et peut être utilisé pour un certain nombre d'autres fins (voir les liens ci-dessus).
Si vous utilisez GCM, ensuite vous serez amené à utiliser l'ID de cette instance, parce que vous en avez besoin afin d'obtenir le GCM jeton (qui remplace l'ancien GCM numéro d'inscription).
Les inconvénients/questions
Dans l'implémentation actuelle (GPS 7.5) l'ID d'instance est récupéré à partir d'un serveur que si votre application le demande. Cela signifie que l'appel ci-dessus est un appel de blocage - dans mon non scientifique des tests, il prend de 1 à 3 secondes si l'appareil est en ligne, et de 0,5 - 1,0 secondes si hors-ligne (sans doute c'est 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 le Nexus 5 avec Android 5.1.1 et GPS 7.5.
Si vous utilisez l'ID de l'application qu'ils ont l'intention - eg. l'authentification d'application, application d'identification, GCM - je pense que cette 1-3 secondes peuvent être une nuisance (en fonction de votre application, bien sûr).
Appareil Android mac id un identifiant unique, cela ne va pas changer suppose que si l'on formater le périphérique lui-même donc, en utilisant le code suivant pour obtenir mac id
Aussi, n'oubliez pas d'ajouter les autorisations dans votre
AndroidManifest.xml
Google a maintenant un La publicité ID.
Cela peut aussi être utilisé, mais note que :
et
Donc bien que cet id peut changer, il semble que bientôt nous ne pouvons pas avoir un choix, dépend de la finalité de cet id.
Plus d'infos @ develper.android
Copier-coller le code ici
HTH
1.Vous pouvez accéder à android id de l'appareil par le service gms. voir l'exemple donné ci-dessous,
2.Utiliser le responsable de la téléphonie, qui fournit un identifiant unique(c'est à dire IMEI). Voir l'exemple,
Cela nécessite android.la permission.READ_PHONE_STATE à votre utilisateur qui peut être difficile à justifier suivant le type d'application que vous avez fait.
Des périphériques sans les services de téléphonie tels que les comprimés doivent signaler un IDENTIFIANT unique de l'appareil qui est disponible via android.os.Construire.SÉRIE depuis Android 2.3 pain d'épice. Certains téléphones avoir des services de téléphonie pouvez également définir un numéro de série. Pas comme tous les appareils Android ont un Numéro de Série, cette solution n'est pas fiable.
Sur un premier dispositif de démarrage, une valeur aléatoire est généré et stocké. Cette valeur est disponible via les Paramètres.Sécurisé.ANDROID_ID. C'est un nombre de 64 bits qui doit rester constante pendant la durée de vie d'un appareil. ANDROID_ID semble un bon choix pour un identifiant unique de l'appareil, car il est disponible pour les smartphones et les tablettes. Pour récupérer la valeur, vous pouvez utiliser le code suivant,
Chaîne androidId = Paramètres.Sécurisé.getString(getContentResolver(),
Les paramètres.Sécurisé.ANDROID_ID);
Toutefois, la valeur peut changer si une réinitialisation est effectuée sur l'appareil. Il y a aussi un bug connu avec le populaire combiné à partir d'un fabricant qui, chaque instance a le même ANDROID_ID. Clairement, la solution n'est pas fiable à 100%.
Pas recommandé deviceId peut être utilisé que pour le suivi dans la 3ème partie les mains, mais c'est une autre façon.
Voici une réponse simple à obtenir AAID, testé fonctionne correctement juin 2019
lire la réponse complète dans le détail ici:
J'ai trouvé cette question il y a plusieurs années, et ont appris à mettre en œuvre généralisée de la solution basée sur des réponses très diverses.
J'ai utilisé la solution généralisée depuis plusieurs années, dans le monde réel du produit. Il me sert très bien jusqu'à présent. Voici l'extrait de code, basé sur diverses réponses apportées.
Note,
getEmail
renvoie la valeur null, la plupart du temps, que nous n'avons pas demandé la permission explicite.Afin d'inclure Android 9 je n'ai qu'une idée qui pourrait encore fonctionner que (probablement) ne viole pas les conditions, nécessite des autorisations, et fonctionne à travers des installations et des applications.
Empreintes impliquant un serveur, il doit être en mesure d'identifier un appareil unique.
La combinaison de matériel d'information + les applications installées et le temps d'installation devrait faire l'affaire.
D'abord le temps d'installation ne pas changer, sauf si une application est désinstallé et installé de nouveau. Mais cela devra être fait pour toutes les applications sur l'appareil afin de ne pas être en mesure d'identifier l'appareil (c'est à dire. après une réinitialisation d'usine).
C'est la façon dont j'allais à ce sujet:
C'est la façon dont vous extraire toutes les applications à partir d'Android (aucune autorisation n'est nécessaire):
NB: C'est un non-testé et non prouvées méthode! Je suis convaincu que cela va fonctionner, mais je suis assez sûr que si cela arrive, ils vont la fermer d'une manière ou d'une autre.
Juste un heads-up pour tout le monde la lecture de la recherche pour des informations plus à jour. Avec Android O il y a quelques changements à la façon dont le système gère ces identifiants.
https://android-developers.googleblog.com/2017/04/changes-to-device-identifiers-in.html
tl;dr de Série exigera de TÉLÉPHONE d'autorisation et Android ID va changer pour différentes applications basées sur leur emballage, le nom et la signature.
Et aussi Google a mis en place un beau document qui fournit des suggestions sur l'utilisation du matériel et des logiciels ids.
https://developer.android.com/training/articles/user-data-ids.html
Normalement, j'ai dispositif à usage unique id de mes applications. Mais j'ai parfois l'utilisation IMEI. Les deux sont des numéros uniques.
pour obtenir IMEI (international mobile equipment identifier)
pour obtenir appareil id unique
Renvoie le NUMÉRO de SÉRIE d'une chaîne unique à chaque périphérique.
Numéro de série est un IDENTIFIANT unique de l'appareil disponible via android.os.Construire.SERIAL.
Assurez-vous d'avoir READ_PHONE_STATE la permission avant d'appeler getSerial().
NOTE:- Il est Pas disponible avec les Appareils de téléphonie sans (comme le wifi seulement les tablettes).
Build.SERIAL
(ouBuild.getSerial()
) n'est pas toujours disponible. Plus d'infos sont disponibles dans le billet de blog Changements d'Identifiants d'appareils Android O. Aussi intéressant à lire: les Meilleures Pratiques pour les Identificateurs Uniques.Si vous ajoutez:
Android Peluches vous donnera l'avertissement suivant:
Donc, vous devez éviter l'utilisation de ce.
Comme mentionné dans Développeur Android documentation :
Oui , Chaque appareil Android ont un numéro de série unique, vous pouvez en mesure de l'obtenir à partir de code ci-dessous.
Construire.SÉRIE
Mais notez que cela n'a été ajouté dans l'API de niveau 9, et il peut ne pas être disponible sur tous les appareils.Pour obtenir un IDENTIFIANT unique sur les plates-formes antérieures, vous aurez besoin de lire quelque chose comme de l'adresse MAC ou IMEI.
Ce sera de retour quelle que soit la chaîne qui identifie l'appareil (IMEI sur GSM, MEID pour CDMA).
Vous aurez besoin de l'autorisation suivante dans votre AndroidManifest.xml:
Obtenir l'ID de l'appareil qu'une seule fois, puis le stocker dans une base de données ou un fichier. Dans ce cas, si c'est le premier démarrage de l'application, il génère un ID et le stocke. La prochaine fois, il ne fera que prendre de l'IDENTIFIANT stockées dans le fichier.
Pour être complet, voici comment vous pouvez obtenir le
Id
dansXamarin.Android
et C#:Ou si vous n'êtes pas dans un
Activity
:Où
context
est le passé dans le contexte.Pour obtenir un nom d'utilisateur vous pouvez utiliser Google Play Licence de la Bibliothèque.
Pour télécharger cette bibliothèque ouverte SDK Manager => Outils du kit SDK.
Le chemin d'accès au téléchargement des fichiers de la bibliothèque est:
Inclure la librairie dans votre projet (vous pouvez simplement copier ses fichiers).
Suivant vous avez besoin d'une mise en œuvre de
Policy
interface (vous pouvez simplement utiliser l'une des deux files de la bibliothèque:ServerManagedPolicy
ouStrictPolicy
).Id utilisateur sera fourni pour vous à l'intérieur de
processServerResponse()
fonction:Ensuite, vous devez construire le
LicenseChecker
avec une politique et d'un appelcheckAccess()
fonction. UtilisationMainActivity.java
comme un exemple de comment le faire.MainActivity.java
est situé à l'intérieur de ce dossier:N'oubliez pas d'ajouter CHECK_LICENSE la permission de votre AndroidManifest.xml.
Plus à propos de la Licence de la Bibliothèque: https://developer.android.com/google/play/licensing
Vérifier
SystemInfo.deviceUniqueIdentifier
De la Documentation:
http://docs.unity3d.com/Documentation/ScriptReference/SystemInfo-deviceUniqueIdentifier.html
Identifiant unique de l'appareil. Il est unique pour chaque appareil (en Lecture Seule).
iOS: sur la pré-iOS7 appareils, il sera de retour hash de l'adresse MAC. Sur iOS7 appareils il sera UIDevice identifierForVendor ou, si cela échoue pour une raison quelconque, ASIdentifierManager advertisingIdentifier.