Является ли Secure.ANDROID_ID уникальным для каждого устройства?
Я использую этот вызов:
Secure.getString(getApplicationContext().getContentResolver(), Secure.ANDROID_ID);
Получить UID для устройства. Я думаю, что я получаю один и тот же идентификатор от нескольких устройств. Должно ли это быть возможным?
Требуемый идентификатор: 9774d56d682e549c и, по-видимому, существует проблема с несколькими устройствами, возвращающими этот идентификатор http://code.google.com/p/android/issues/list?cursor=10603&updated=10603&ts=1295993403
Ответы
Ответ 1
Проверьте эту тему. Однако вы должны быть осторожны, поскольку он задокументирован как "может измениться после сброса настроек". Используйте на свой страх и риск, и его можно легко изменить на корневом телефоне. Также кажется, что некоторые производители столкнулись с проблемами со своими телефонами, имеющими поток с повторяющимися номерами. В зависимости от того, что вы пытаетесь сделать, я, вероятно, не использовал бы это как UID.
Ответ 2
В Android O изменится поведение ANDROID_ID. ANDROID_ID будет отличаться для каждого приложения на телефоне.
Взято из: https://android-developers.googleblog.com/2017/04/changes-to-device-identifiers-in.html
Идентификатор Android
В O идентификатор Android (Settings.Secure.ANDROID_ID или SSAID) имеет другое значение для каждого приложения и каждого пользователя на устройстве. Разработчикам, требующим идентификатор с привязкой к устройству, вместо этого следует использовать идентификатор сбрасывания, такой как рекламный идентификатор, предоставляя пользователям больше контроля. Идентификатор рекламы также предоставляет настраиваемую пользователем настройку для ограничения отслеживания объявлений.
Дополнительно в Android O:
- Значение ANDROID_ID не изменится при удалении/переустановке пакета, так как
если имя пакета и ключ подписывания совпадают. Приложения могут полагаться
по этому значению для поддержания состояния через переустановки.
- Если приложение было установлено на устройстве с более ранней версией
Android, идентификатор Android остается тем же, когда устройство
обновляется до Android O, если приложение не удалено и
переустанавливать.
- Значение идентификатора Android изменяется только в том случае, если устройство factory
reset или если ключ подписи вращается между удалением и
переустановить события.
- Это изменение требуется только для производителей устройств
доставку с помощью сервисов Google Play и рекламного удостоверения. Другие
производители устройств могут предоставить альтернативный сбрасываемый
ID или продолжать предоставлять идентификатор ANDROID.
Ответ 3
Поэтому, если вам нужно что-то уникальное для самого устройства, 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" />
Ответ 4
Я прочитал несколько вещей об этом, и, к сожалению, для ANDROID_ID не следует полагаться на уникальную идентификацию отдельного устройства.
Это не похоже на соблюдение требований Android соответствия, и поэтому производители, похоже, реализуют его так, как они выбирают, в том числе некоторые используют его больше как идентификатор модели и т.д.
Кроме того, имейте в виду, что даже если производитель написал генератор, чтобы сделать его UUID (например), он не гарантирует выживание factory reset.
Ответ 5
Просто укажите альтернативное решение здесь, рекламный идентификатор:
https://support.google.com/googleplay/android-developer/answer/6048248?hl=en
Скопировано по ссылке выше:
Идентификатор рекламы - уникальный, сбрасываемый пользователем идентификатор для рекламы, предоставляемый службами Google Play. Это дает пользователям лучший контроль и предоставляет разработчикам простую стандартную систему, чтобы продолжать монетизировать свои приложения. Он позволяет пользователям reset их идентификатор или отказаться от персонализированных объявлений (ранее известных как объявления на основе интересов) в приложениях Google Play.
Ограничения:
- Только устройства с поддержкой Google Play.
- Политика конфиденциальности:
https://support.google.com/googleplay/android-developer/answer/113469?hl=en&rd=1#privacy
Ответ 6
//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 уникален для каждого устройства.