Является ли Secure.ANDROID_ID уникальным для каждого устройства? - PullRequest
63 голосов
/ 26 января 2011

Я использую этот вызов:

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

Чтобы получить UID для устройства. Я думаю, что я получаю один и тот же идентификатор с нескольких устройств, хотя. Это должно быть возможно?

Идентификационный номер: 9774d56d682e549c и, по-видимому, существует проблема с несколькими устройствами, возвращающими этот идентификатор http://code.google.com/p/android/issues/list?cursor=10603&updated=10603&ts=1295993403

Ответы [ 6 ]

32 голосов
/ 26 января 2011

Зарегистрируйся в этой теме,.Однако вы должны быть осторожны, так как это задокументировано как «может измениться после сброса настроек».Используйте на свой страх и риск, и это может быть легко изменено на рутированном телефоне.Также кажется, что у некоторых производителей были проблемы с их телефонами с дублирующимися номерами нить .В зависимости от того, что вы пытаетесь сделать, я, вероятно, не буду использовать это в качестве UID.

23 голосов
/ 13 апреля 2017

С 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 ID изменяется только в том случае, если устройство сбрасывается до заводских настроек или ключ подписи вращается между событиями удаления и
    переустановки.
  • Это изменение требуется только для производителей устройств, которые предоставляют услуги Google Play и рекламный идентификатор.Другие производители устройств могут предоставить альтернативный сбрасываемый идентификатор или продолжать предоставлять идентификатор ANDROID.
15 голосов
/ 26 мая 2012

Итак, если вы хотите что-то уникальное для самого устройства, 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" />
6 голосов
/ 26 января 2011

Я прочитал несколько вещей по этому поводу, и, к сожалению, на ANDROID_ID нельзя полагаться для уникальной идентификации отдельного устройства.

Кажется, что оно не соблюдается в требованиях соответствия Android, и поэтому производители, кажется, реализуют его так, как они выбирают, в том числе некоторые используют его в качестве идентификатора модели и т. Д.

Также имейте в виду, что даже если производитель написал генератор, чтобы сделать его UUID (например), он не гарантированно выживет после сброса к заводским настройкам.

1 голос
/ 15 августа 2016

Просто укажите альтернативное решение здесь, рекламный идентификатор:

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

Скопировано по ссылке выше:

Рекламный идентификатор - это уникальный, сбрасываемый пользователем идентификатор для рекламы, предоставляемый сервисами Google Play. Это дает пользователям лучший контроль и предоставляет разработчикам простую, стандартную систему для дальнейшей монетизации своих приложений. Он позволяет пользователям сбросить свой идентификатор или отказаться от персонализированной рекламы (ранее известной как реклама на основе интересов) в приложениях Google Play.

Ограничения:

  1. Только для устройств с поддержкой Google Play.
  2. Политика конфиденциальности: https://support.google.com/googleplay/android-developer/answer/113469?hl=en&rd=1#privacy
0 голосов
/ 05 сентября 2018
//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 уникален для каждого устройства.

...