Używam tego połączenia:
Secure.getString(getApplicationContext().getContentResolver(), Secure.ANDROID_ID);
Aby uzyskać identyfikator UID dla urządzenia. Myślę jednak, że otrzymuję ten sam identyfikator z wielu urządzeń. Czy to powinno być możliwe?
Ten identyfikator to: 9774d56d682e549c i najwyraźniej występuje problem z kilkoma urządzeniami zwracającymi ten identyfikator http://code.google.com/p/android/issues/list?cursor=10603&updated=10603&ts=1295993403
android
uuid
uniqueidentifier
FoamyGuy
źródło
źródło
Odpowiedzi:
Sprawdzić w tym wątku ,. Należy jednak zachować ostrożność, ponieważ zostało udokumentowane jako „może ulec zmianie po przywróceniu ustawień fabrycznych”. Używaj na własne ryzyko i można go łatwo zmienić na zrootowanym telefonie. Wygląda również na to, że niektórzy producenci mieli problemy z telefonami mającymi podwójny wątek numerów . W zależności od tego, co próbujesz zrobić, prawdopodobnie nie użyłbym tego jako UID.
źródło
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
Z Androidem O zmieni się zachowanie ANDROID_ID. ANDROID_ID będzie różny w zależności od aplikacji i użytkownika w telefonie.
Zaczerpnięte z: https://android-developers.googleblog.com/2017/04/changes-to-device-identifiers-in.html
Identyfikator Androida
W wersji O identyfikator Androida (Settings.Secure.ANDROID_ID lub SSAID) ma inną wartość dla każdej aplikacji i każdego użytkownika na urządzeniu. Deweloperzy, którzy potrzebują identyfikatora w zakresie urządzenia, powinni zamiast tego używać identyfikatora możliwego do zresetowania, takiego jak identyfikator wyświetlania reklam, co zapewnia użytkownikom większą kontrolę. Identyfikator reklam zawiera również ustawienie widoczne dla użytkownika, które ogranicza śledzenie reklam.
Dodatkowo w systemie Android O:
zdarzeniami odinstalowania i ponownej instalacji.
źródło
Więc jeśli chcesz czegoś wyjątkowego dla samego urządzenia,
TM.getDeviceId()
powinno wystarczyć.Oto kod, który pokazuje, jak uzyskać identyfikator menedżera telefonii. Identyfikator urządzenia z Androidem, którego używasz, może zmienić się w ustawieniach fabrycznych, a niektórzy producenci mają problem z nadaniem unikalnego identyfikatora.
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());
Pamiętaj, aby uzyskać uprawnienia do
TelephonyManager
korzystania z<uses-permission android:name="android.permission.READ_PHONE_STATE" />
źródło
READ_PHONE_STATE
pozwolenia jest okropne. UżyjANDROID_ID
zamiast tego.TM.getDeviceId()
podejście, najpierw przyjrzyj się nowym wymaganiom dotyczącym uprawnień dla identyfikatorów urządzeń na urządzeniach z Androidem> = 10.Przeczytałem kilka rzeczy na ten temat i niestety nie należy polegać na ANDROID_ID w celu jednoznacznej identyfikacji pojedynczego urządzenia.
Wydaje się, że nie jest to wymuszone w wymaganiach zgodności Androida, więc producenci wydają się wdrażać go w wybrany przez siebie sposób, w tym niektórzy używają go bardziej jako identyfikatora „modelu” itp.
Należy również pamiętać, że nawet jeśli producent napisał generator, aby uczynić go identyfikatorem UUID (na przykład), nie ma gwarancji, że przetrwa reset do ustawień fabrycznych.
źródło
Istnieje wiele rozwiązań, ale żadne z nich nie jest doskonałe. chodźmy jeden po drugim.
1. Unique Telephony Number (IMEI, MEID, ESN, IMSI)
To rozwiązanie wymaga żądania od użytkownika android.permission.READ_PHONE_STATE, co może być trudne do uzasadnienia na podstawie typu złożonej aplikacji.
Ponadto to rozwiązanie jest ograniczone do smartfonów, ponieważ tablety nie mają usług telefonicznych. Jedną z zalet jest to, że wartość utrzymuje się do przywrócenia ustawień fabrycznych na urządzeniach.
2. MAC Address
3. Serial Number
4. Secure Android ID
Przy pierwszym uruchomieniu urządzenia generowana i zapisywana jest losowa wartość. Ta wartość jest dostępna za pośrednictwem Settings.Secure.ANDROID_ID. Jest to liczba 64-bitowa, która powinna pozostać niezmienna przez cały okres eksploatacji urządzenia. ANDROID_ID wydaje się dobrym wyborem dla unikalnego identyfikatora urządzenia, ponieważ jest dostępny dla smartfonów i tabletów.
String androidId = Settings.Secure.getString(getContentResolver(),Settings.Secure.ANDROID_ID);
Wartość może się jednak zmienić, jeśli na urządzeniu zostanie przywrócone ustawienia fabryczne. Istnieje również znany błąd związany z popularnym telefonem od producenta, w którym każda instancja ma ten sam ANDROID_ID. Oczywiście rozwiązanie nie jest w 100% niezawodne.
5. Use UUID
Ponieważ w przypadku większości aplikacji wymagana jest identyfikacja konkretnej instalacji, a nie urządzenia fizycznego, dobrym rozwiązaniem jest uzyskanie unikalnego identyfikatora użytkownika w przypadku używania klasy UUID. Poniższe rozwiązanie zostało zaprezentowane przez Reto Meier z Google w prezentacji Google I / O:
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; }
Zidentyfikowanie konkretnego urządzenia na Androidzie nie jest łatwe. Istnieje wiele dobrych powodów, aby tego uniknąć. Najlepszym rozwiązaniem jest prawdopodobnie zidentyfikowanie konkretnej instalacji za pomocą rozwiązania UUID. kredyt: blog
źródło
Wystarczy wymienić tutaj alternatywne rozwiązanie, identyfikator reklamowy:
https://support.google.com/googleplay/android-developer/answer/6048248?hl=en
Skopiowano z linku powyżej:
Identyfikator wyświetlania reklam to unikalny identyfikator reklamowy z możliwością resetowania przez użytkownika, udostępniany przez usługi Google Play. Zapewnia użytkownikom lepszą kontrolę i zapewnia programistom prosty, standardowy system umożliwiający dalsze zarabianie na aplikacjach. Umożliwia użytkownikom resetowanie identyfikatorów lub rezygnację ze spersonalizowanych reklam (wcześniej znanych jako reklamy oparte na zainteresowaniach) w aplikacjach Google Play.
Ograniczenia to:
https://support.google.com/googleplay/android-developer/answer/113469?hl=en&rd=1#privacy
źródło
//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); }
Tak, Secure.ANDROID_ID jest unikalny dla każdego urządzenia.
źródło