web-dev-qa-db-fra.com

Secure.Android_ID est-il unique pour chaque appareil?

J'utilise cet appel:

Secure.getString(getApplicationContext().getContentResolver(), Secure.Android_ID);

Pour obtenir un UID pour le périphérique. Je pense cependant que je reçois le même identifiant de plusieurs appareils. Cela devrait-il être possible? 

L'ID en question est: 9774d56d682e549c et apparemment, plusieurs appareils l'ont renvoyé http://code.google.com/p/Android/issues/list?cursor=10603&updated=10603&ts=1295993403

61
FoamyGuy

Vérifiez dans ce thread ,. Cependant, vous devez faire attention car il est documenté que "peut changer lors de la réinitialisation d'usine". Utilisez-le à vos risques et périls et il peut être facilement modifié sur un téléphone enraciné. En outre, il semble que certains fabricants ont eu des problèmes avec leurs téléphones ayant des numéros en double thread . Selon ce que vous essayez de faire, je ne l’utiliserai probablement pas comme un UID.

29
ninjasense

Avec Android O, le comportement de Android_ID va changer. Android_ID sera différent par application et par utilisateur du téléphone.

Extrait de: https://Android-developers.googleblog.com/2017/04/changes-to-device-identifiers-in.html

Identifiant Android

Dans O, l'ID Android (Settings.Secure.Android_ID ou SSAID) a une valeur différente pour chaque application et pour chaque utilisateur de l'appareil. Les développeurs nécessitant un identifiant ayant une étendue d'appareil devraient plutôt utiliser un identifiant réinitialisable, tel que l'ID de publicité, pour donner plus de contrôle aux utilisateurs. L'ID de publicité fournit également un paramètre permettant aux utilisateurs de limiter le suivi des annonces. 

De plus dans Android O: 

  • La valeur Android_ID ne changera pas lors de la désinstallation/réinstallation du package, car Tant que le nom du package et la clé de signature sont identiques. Les applications peuvent compter sur cette valeur pour maintenir l’état lors des réinstallations. 
  • Si une application a été installée sur un appareil exécutant une version antérieure d'A. Android, l'identifiant Android reste le même lorsque l'appareil est mis à jour vers Android O, sauf si l'application est désinstallée et Réinstallée. 
  • La valeur de l'ID Android ne change que si le périphérique est d'usine Reset ou si la clé de signature tourne entre désinstaller et
    réinstaller les événements. 
  • Cette modification n'est requise que pour les fabricants d'appareils Livrés avec les services Google Play et l'ID de publicité. Les autres fabricants d’appareils peuvent fournir une autre option réinitialisableID ou continuer à fournir l’identification Android.
19
userM1433372

Donc, si vous voulez quelque chose d'unique sur le périphérique lui-même, TM.getDeviceId() devrait suffira. 

Voici le code qui montre comment obtenir un ID de gestionnaire de téléphonie. L'ID de périphérique Android que vous utilisez peut changer en fonction des paramètres d'usine. Certains fabricants ont également du mal à donner un ID unique.

TelephonyManager tm = 
        (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE);
String androidId = Secure.getString(this.getContentResolver(), Secure.Android_ID);
Log.d("ID", "Android ID: " + androidId);
Log.d("ID", "Device ID : " + tm.getDeviceId());

Assurez-vous de prendre les autorisations pour TelephonyManager en utilisant

<uses-permission Android:name="Android.permission.READ_PHONE_STATE" />
13
Vincent Vettukal

J'ai lu quelques articles à ce sujet et, malheureusement, on ne devrait pas se fier à Android_ID pour identifier un appareil en particulier.

Il ne semble pas être appliqué dans les exigences de conformité Android et les fabricants semblent donc le mettre en œuvre comme ils le souhaitent, y compris en l'utilisant davantage comme identifiant de modèle, etc.

Sachez également que même si un fabricant a écrit un générateur pour en faire un UUID (par exemple), il n’est pas garanti qu’il survivra à une réinitialisation des paramètres d’usine.

6
Squonk

Il suffit de lister ici une autre solution, l’identifiant publicitaire:

https://support.google.com/googleplay/Android-developer/answer/6048248?hl=en

Copié à partir du lien ci-dessus:

L'identifiant publicitaire est un identifiant publicitaire unique, réinitialisable par l'utilisateur, fourni par les services Google Play. Il offre aux utilisateurs de meilleurs contrôles et fournit aux développeurs un système simple et standard pour continuer à monétiser leurs applications. Il permet aux utilisateurs de réinitialiser leur identifiant ou de désactiver les annonces personnalisées (anciennement appelées annonces par centres d'intérêt) dans les applications Google Play.

Les limitations sont:

  1. Appareils compatibles avec Google Play uniquement.
  2. Politique de confidentialité: https://support.google.com/googleplay/Android-developer/answer/113469?hl=en&rd=1#privacy
1
semicircle21
//Fields
String myID;
int myversion = 0;


myversion = Integer.valueOf(Android.os.Build.VERSION.SDK);
if (myversion < 23) {
        TelephonyManager mngr = (TelephonyManager) 
getSystemService(Context.TELEPHONY_SERVICE);
        myID= mngr.getDeviceId();
    }
    else
    {
        myID = 
Settings.Secure.getString(getApplicationContext().getContentResolver(), 
Settings.Secure.Android_ID);
    }

Oui, Secure.Android_ID est unique pour chaque appareil.

0
boraberka