Ich benutze diesen Anruf:
Secure.getString(getApplicationContext().getContentResolver(), Secure.ANDROID_ID);
So erhalten Sie eine UID für das Gerät. Ich glaube, ich bekomme die gleiche ID von mehreren Geräten. Sollte das möglich sein?
Die fragliche ID lautet: 9774d56d682e549c und anscheinend gibt es ein Problem mit mehreren Geräten, die diese ID zurückgeben. Http://code.google.com/p/android/issues/list?cursor=10603&updated=10603&ts=1295993403
android
uuid
uniqueidentifier
FoamyGuy
quelle
quelle
Antworten:
In diesen Thread einchecken ,. Sie sollten jedoch vorsichtig sein, da dokumentiert ist, dass "sich beim Zurücksetzen auf die Werkseinstellungen ändern kann". Die Verwendung erfolgt auf eigenes Risiko und kann problemlos auf einem gerooteten Telefon geändert werden. Es scheint auch, als hätten einige Hersteller Probleme mit ihren Telefonen mit doppeltem Nummernfaden . Je nachdem, was Sie versuchen, würde ich dies wahrscheinlich nicht als UID verwenden.
quelle
A 64-bit number (as a hex string) that is randomly generated on the device's first boot and should remain constant for the lifetime of the device
Mit Android O ändert sich das Verhalten der ANDROID_ID. Die ANDROID_ID ist pro App und Benutzer auf dem Telefon unterschiedlich.
Entnommen aus: https://android-developers.googleblog.com/2017/04/changes-to-device-identifiers-in.html
Android ID
In O hat die Android-ID (Settings.Secure.ANDROID_ID oder SSAID) für jede App und jeden Benutzer auf dem Gerät einen anderen Wert. Entwickler, die eine Gerätekennung benötigen, sollten stattdessen eine zurücksetzbare Kennung wie die Werbe-ID verwenden, um den Benutzern mehr Kontrolle zu geben. Die Werbe-ID bietet auch eine benutzerbezogene Einstellung, um die Anzeigenverfolgung einzuschränken.
Zusätzlich in Android O:
Neuinstallationsereignissen dreht .
quelle
Wenn Sie also etwas Einzigartiges für das Gerät selbst wünschen ,
TM.getDeviceId()
sollte dies ausreichen.Hier ist der Code, der zeigt, wie Sie die Telefonie-Manager-ID erhalten. Die von Ihnen verwendete Android-Geräte-ID kann sich in den Werkseinstellungen ändern, und auch einige Hersteller haben Probleme, eine eindeutige ID anzugeben.
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());
Stellen Sie sicher, dass Sie die Berechtigungen für
TelephonyManager
verwenden<uses-permission android:name="android.permission.READ_PHONE_STATE" />
quelle
READ_PHONE_STATE
Erlaubnis zu verlangen ist schrecklich. Verwenden SieANDROID_ID
stattdessen.TM.getDeviceId()
Ansatz implementieren , werfen Sie zunächst einen Blick auf die neuen Berechtigungsanforderungen für Gerätekennungen auf Android> = 10-Geräten.Ich habe ein paar Dinge darüber gelesen und leider sollte man sich nicht auf die ANDROID_ID verlassen, um ein einzelnes Gerät eindeutig zu identifizieren.
Es scheint nicht in den Android-Konformitätsanforderungen durchgesetzt zu sein, und daher scheinen die Hersteller es so zu implementieren, wie sie es wünschen, einschließlich einiger, die es eher als "Modell" -ID usw. verwenden.
Beachten Sie auch, dass selbst wenn ein Hersteller einen Generator geschrieben hat, um ihn zu einer UUID zu machen (zum Beispiel), es nicht garantiert ist, dass er einen Werksreset überlebt.
quelle
Es gibt mehrere Lösungen, aber keine davon ist perfekt. Lass uns eins nach dem anderen gehen.
1. Unique Telephony Number (IMEI, MEID, ESN, IMSI)
Diese Lösung muss android.permission.READ_PHONE_STATE bei Ihrem Benutzer anfordern , was nach dem von Ihnen erstellten Anwendungstyp schwer zu rechtfertigen ist.
Darüber hinaus ist diese Lösung auf Smartphones beschränkt, da Tablets keine Telefoniedienste haben. Ein Vorteil ist, dass der Wert bis zum Zurücksetzen auf die Werkseinstellungen der Geräte erhalten bleibt.
2. MAC Address
3. Serial Number
4. Secure Android ID
Beim ersten Start eines Geräts wird ein zufälliger Wert generiert und gespeichert. Dieser Wert ist über Settings.Secure.ANDROID_ID verfügbar. Es ist eine 64-Bit-Zahl, die für die Lebensdauer eines Geräts konstant bleiben sollte. ANDROID_ID scheint eine gute Wahl für eine eindeutige Gerätekennung zu sein, da sie für Smartphones und Tablets verfügbar ist.
String androidId = Settings.Secure.getString(getContentResolver(),Settings.Secure.ANDROID_ID);
Der Wert kann sich jedoch ändern, wenn das Gerät auf die Werkseinstellungen zurückgesetzt wird. Es gibt auch einen bekannten Fehler mit einem beliebten Mobilteil eines Herstellers, bei dem jede Instanz dieselbe ANDROID_ID hat. Die Lösung ist eindeutig nicht 100% zuverlässig.
5. Use UUID
Da die meisten Anwendungen eine bestimmte Installation und kein physisches Gerät identifizieren müssen, ist dies eine gute Lösung, um eine eindeutige ID für einen Benutzer zu erhalten, wenn die UUID-Klasse verwendet werden soll. Die folgende Lösung wurde von Reto Meier von Google in einer Google I / O-Präsentation vorgestellt:
private static String uniqueID = null; private static final String PREF_UNIQUE_ID = "PREF_UNIQUE_ID"; public synchronized static String id(Context context) { if (uniqueID == null) { SharedPreferences sharedPrefs = context.getSharedPreferences( PREF_UNIQUE_ID, Context.MODE_PRIVATE); uniqueID = sharedPrefs.getString(PREF_UNIQUE_ID, null); if (uniqueID == null) { uniqueID = UUID.randomUUID().toString(); Editor editor = sharedPrefs.edit(); editor.putString(PREF_UNIQUE_ID, uniqueID); editor.commit(); } } return uniqueID; }
Es ist nicht einfach, ein bestimmtes Gerät unter Android zu identifizieren. Es gibt viele gute Gründe, dies zu vermeiden. Die beste Lösung besteht wahrscheinlich darin, eine bestimmte Installation mithilfe der UUID-Lösung zu identifizieren. Kredit: Blog
quelle
Listen Sie hier einfach eine alternative Lösung auf, die Werbe-ID:
https://support.google.com/googleplay/android-developer/answer/6048248?hl=en
Vom obigen Link kopiert:
Die Werbe-ID ist eine eindeutige, vom Benutzer zurücksetzbare ID für Werbung, die von Google Play-Diensten bereitgestellt wird. Es bietet Benutzern eine bessere Kontrolle und bietet Entwicklern ein einfaches Standardsystem, mit dem sie ihre Apps weiterhin monetarisieren können. Benutzer können ihre Kennung zurücksetzen oder personalisierte Anzeigen (früher als interessenbezogene Anzeigen bezeichnet) in Google Play-Apps deaktivieren.
Die Einschränkungen sind:
https://support.google.com/googleplay/android-developer/answer/113469?hl=en&rd=1#privacy
quelle
//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); }
Ja, Secure.ANDROID_ID ist für jedes Gerät eindeutig.
quelle