Предисловие
udid:
UDID — это аббревиатура уникального идентификатора устройства, а его китайское значение — уникальная идентификация устройства.
UUID — это аббревиатура Universally Unique Identifier, что на китайском языке означает универсальный уникальный идентификационный код.
Вкратце: udid соответствует определенному аппаратному устройству и является уникальным идентификатором аппаратного устройства. Помимо уникальной идентификации оборудования, uuid также может использоваться для идентификации программного обеспечения. Например, UUID различных приложений на мобильном телефоне являются взаимоисключающими.
Как получить udid на устройстве Android?
Здесь наша основная цель — получить уникальный идентификационный код Android-устройства, то есть udid.
Для платформы Android не существует стабильного API, позволяющего разработчикам получать такие идентификаторы устройств.
Разработчики обычно сталкиваются с такой дилеммой: по мере развития проекта идентификаторы устройств требуются во всё большем количестве мест, однако по мере обновления версии Android получить идентификатор устройства становится всё сложнее;
В сочетании с фрагментацией платформы Android путь к получению идентификатора устройства можно назвать трудным.
Существует лишь несколько API-интерфейсов для получения идентификации устройства, и все они имеют некоторые проблемы.
Идентификаторы устройств Android обычно имеют следующие типы (но они не обязательно уникальны и могут измениться после перепрошивки):
1. IMEI
IMEI должен быть самым идеальным идентификатором устройства. Он уникален и не изменится при восстановлении заводских настроек (действительно относится к устройству). Проверить код IMEI вашего мобильного телефона можно, набрав *#06#.
Однако для получения IMEI требуется разрешение READ_PHONE_STATE, я думаю, все знают, насколько хлопотно это разрешение.
Такие разрешения необходимо применять динамически, особенно после Android 6.0, и многие пользователи могут отказаться от авторизации. Мы заметили, что некоторые приложения нельзя использовать без предоставления этого разрешения, что может снизить предпочтение приложения пользователями. Более того, Android 10.0 полностью запретит сторонним приложениям получать IMEI устройства (даже если запрошено разрешение READ_PHONE_STATE). Поэтому, если это новое приложение, не рекомендуется использовать IMEI в качестве идентификатора устройства; если вы уже использовали IMEI в качестве идентификатора, вам необходимо быстро выполнить работу по совместимости, особенно сопоставление нового идентификатора устройства и IMEI.
2. Серийный номер оборудования (номер SN)
на Android 7.1или более ранние системы(SDK<=25),Java доступен через android.os.Build.SERIAL,Предоставлено производителем.
Если производитель более стандартизирован, серийный номер устройства + Сборка.ПРОИЗВОДИТЕЛЬ должен однозначно идентифицировать устройство. Но реальность такова, что не все производители соблюдают спецификации, особенно ранние модели.
Самое смертельное то, что Android 8.0 и Вот и все(SDK>=26),android.os.Build.SERIAL общий доход «неизвестно»; чтобы получить серийный номер, вызовите Build.getSerial(). , но вам нужно подать заявку READ_PHONE_STATE разрешения.
Прибытие Android 10.0(SDK>=29)Вот и все,Это то же самое, что IMEI,Также запрещено получать.
Метод Android ndk для получения номера sn:
`//Читать серийный номер
__system_property_get("ro.serialno",m_szDevID);
LOGE("%s", m_szDevID);
`
3. MAC-адрес
Большинство устройств Android имеют модули Wi-Fi, поэтому MAC-адрес модуля Wi-Fi можно использовать в качестве идентификатора устройства. Из соображений конфиденциальности официально не рекомендуется получать
Получить MAC-адрес становится все сложнее. После Android 6.0 mac, полученный через WifiManager, будет исправлен: 02:00:00:00:00:00.
Чтение /sys/class/net/wlan0/address после 7.0 получить невозможно (Xiaomi 6).
4. ANDROID_ID
Android ID имеет самый низкий порог для получения, не требует каких-либо разрешений, имеет 64-битный диапазон значений и очень уникален.
Но и недостатки очевидны:
1. Перепрошивка, рутирование, восстановление заводских настроек и т. д. приведут к изменению Android ID;
2. После Android 8.0 изменились правила Android ID:
Для приложений, установленных до обновления до версии 8.0, ANDROID_ID останется неизменным. Если вы удалите, а затем переустановите, ANDROID_ID изменится.
Для приложений, установленных в системах 8.0, ANDROID_ID зависит от подписи приложения и пользователя. ANDROID_ID однозначно определяется комбинацией подписи приложения, пользователя и устройства.
Результатом этих двух правил является:
Во-первых, если пользователь установил приложение на устройство версии ниже 8.0, затем удалил его, затем обновил до версии 8.0 и затем переустановил приложение, идентификатор Android будет другим;
Во-вторых, приложения с разными подписями получат разные идентификаторы Android.
Второй пункт может повлиять на рекламные сети и тому подобное (если они используют Android ID для сравнения данных), поэтому в документе Google написано «Пожалуйста, используйте рекламный идентификатор»,
Но все знают, что сервисы Google в стране недоступны.
Идентификатор Android ограничен, что играет определенную роль в защите конфиденциальности, и нет проблем с его использованием для собственной статистики активности приложения.
Подвести итог
В настоящее время в основном используются номер sn и MAC-адрес, а некоторые используют номер Soc в качестве udid устройства Android.