Является ли 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 уникален для каждого устройства.