Я использую этот вызов:
Secure.getString(getApplicationContext().getContentResolver(), Secure.ANDROID_ID);
Чтобы получить UID для устройства. Я думаю, что получаю один и тот же идентификатор с нескольких устройств. Возможно ли это?
Идентификатор, о котором идет речь: 9774d56d682e549c, и, по-видимому, существует проблема с несколькими устройствами, возвращающими этот идентификатор http://code.google.com/p/android/issues/list?cursor=10603&updated=10603&ts=1295993403
android
uuid
uniqueidentifier
FoamyGuy
источник
источник
Ответы:
Проверьте в эту тему ,. Однако вы должны быть осторожны, поскольку это описано как «может измениться после сброса настроек». Используйте на свой страх и риск, и его можно легко изменить на рутированном телефоне. Кроме того , представляется, что некоторые производители имели проблемы с их телефонами дублированного номера ниткой . В зависимости от того, что вы пытаетесь сделать, я, вероятно, не буду использовать это как UID.
источник
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
В Android O поведение ANDROID_ID изменится. ANDROID_ID будет отличаться для каждого приложения для каждого пользователя на телефоне.
Взято с: https://android-developers.googleblog.com/2017/04/changes-to-device-identifiers-in.html.
Android ID
В O Android ID (Settings.Secure.ANDROID_ID или SSAID) имеет разные значения для каждого приложения и каждого пользователя на устройстве. Разработчики, которым требуется идентификатор на уровне устройства, должны вместо этого использовать сбрасываемый идентификатор, например идентификатор рекламы, что дает пользователям больше контроля. Рекламный идентификатор также предоставляет пользователю настройку для ограничения отслеживания рекламы.
Дополнительно в Android O:
событиями повторной установки.
источник
Так что, если вы хотите что-то уникальное для самого устройства, этого
TM.getDeviceId()
должно быть достаточно.Вот код, который показывает, как получить идентификатор диспетчера телефонии. Идентификатор устройства Android, который вы используете, может измениться в заводских настройках, а также у некоторых производителей есть проблемы с предоставлением уникального идентификатора.
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());
Обязательно примите разрешения
TelephonyManager
с помощью<uses-permission android:name="android.permission.READ_PHONE_STATE" />
источник
READ_PHONE_STATE
разрешения ужасно.ANDROID_ID
Вместо этого используйте .TM.getDeviceId()
подход, сначала ознакомьтесь с новыми требованиями к разрешениям для идентификаторов устройств на устройствах Android> = 10.Я читал кое-что об этом, и, к сожалению, нельзя полагаться на ANDROID_ID для уникальной идентификации отдельного устройства.
Кажется, что это не предусмотрено требованиями соответствия Android, и поэтому производители, похоже, реализуют его так, как они хотят, включая некоторые, использующие его больше как идентификатор модели и т. Д.
Кроме того, имейте в виду, что даже если производитель написал генератор, чтобы сделать его UUID (например), не гарантируется, что он выдержит сброс до заводских настроек.
источник
Существует несколько решений, но ни одно из них не является идеальным. пойдем один за другим.
1. Unique Telephony Number (IMEI, MEID, ESN, IMSI)
Это решение должно запрашивать у пользователя android.permission.READ_PHONE_STATE, что может быть трудно оправдать в соответствии с типом созданного вами приложения.
Кроме того, это решение ограничено смартфонами, потому что на планшетах нет услуг телефонии. Одним из преимуществ является то, что значение сохраняется до заводских сбросов на устройствах.
2. MAC Address
3. Serial Number
4. Secure Android ID
При первой загрузке устройства генерируется и сохраняется случайное значение. Это значение доступно через Settings.Secure.ANDROID_ID. Это 64-битное число, которое должно оставаться постоянным на протяжении всего срока службы устройства. ANDROID_ID кажется хорошим выбором для уникального идентификатора устройства, поскольку он доступен для смартфонов и планшетов.
String androidId = Settings.Secure.getString(getContentResolver(),Settings.Secure.ANDROID_ID);
Однако значение может измениться, если на устройстве будет выполнен сброс настроек до заводских. Также существует известная ошибка в популярном телефоне от производителя, где у каждого экземпляра одинаковый ANDROID_ID. Ясно, что решение не на 100% надежно.
5. Use UUID
Поскольку для большинства приложений требуется идентифицировать конкретную установку, а не физическое устройство, хорошее решение для получения уникального идентификатора для пользователя, если использовать класс UUID. Следующее решение было представлено Рето Мейером из Google в презентации 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; }
Определить конкретное устройство на Android - непростая задача. Есть много веских причин избегать этого. Лучшее решение - это, вероятно, идентифицировать конкретную установку с помощью решения UUID. кредит: блог
источник
Просто укажите здесь альтернативное решение, идентификатор рекламы:
https://support.google.com/googleplay/android-developer/answer/6048248?hl=en
Скопировано по ссылке выше:
Рекламный идентификатор - это уникальный сбрасываемый пользователем идентификатор рекламы, предоставляемый сервисами Google Play. Это дает пользователям лучший контроль и предоставляет разработчикам простую стандартную систему для продолжения монетизации своих приложений. Он позволяет пользователям сбросить свой идентификатор или отказаться от персонализированной рекламы (ранее известной как реклама на основе интересов) в приложениях Google Play.
Ограничения:
https://support.google.com/googleplay/android-developer/answer/113469?hl=en&rd=1#privacy
источник
//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); }
Да, Secure.ANDROID_ID уникален для каждого устройства.
источник