В Android 6 и более поздних версиях поставщики услуг Wi-Fi и анализаторы пакетов не могут получать заводской MAC-адрес устройства через стек Wi-Fi из сетевых запросов. В Android 10 и более поздних версий действуют дополнительные ограничения, которые позволяют приложениям с привилегированнымуровнем разрешений получать доступ к идентификаторам устройств. Это защищает идентификаторы устройств, например
- IMEI, MEID, ESN и IMSI для телефонии;
- серийные номера сборки, SIM-карты или USB-устройства.
Кто может получить доступ к идентификаторам устройств
Идентификаторы устройств ограничены на всех устройствах с Android 10, даже если приложения предназначены для Android 9 или более ранних версий. Доступ к идентификаторам устройств могут иметь:
- Приложение по умолчанию для обмена SMS.
- Приложения, у которых есть разрешение
READ_PRIVILEGED_PHONE_STATEв классеManifest.permissionи которые добавлены в белый список в файлеprivapp-permission.xml. Их также необходимо загрузить в каталогpriv-app. - Приложения с правами оператора связи, определенными в UICC Carrier Privileges.
- Владелец устройства или профиля с разрешением
READ_PHONE_STATE, предоставленным в классеManifest.permission. (Добавление в белый список не требуется.)
Доступ к привилегированным пакетам
Для доступа к идентификаторам устройств пакет должен быть привилегированным. У него должно быть разрешение
READ_PRIVILEGED_PHONE_STATE в классе Manifest.permission, и он должен быть добавлен в белый список в файле privapp-permission.xml. Подробнее о добавлении разрешений в белый список…
Чтобы узнать, как получить уникальный идентификатор для непривилегированного пакета, ознакомьтесь с разделом Распространенные варианты использования и подходящие идентификаторы.
Ограничения на идентификаторы устройств и случайные MAC-адреса
Чтобы ещё больше ограничить использование идентификаторов устройств, все устройства с Android 10 по умолчанию передают случайные MAC-адреса как для запросов зондирования, так и для связанных запросов. При этом для каждого SSID должен использоваться отдельный случайный MAC-адрес. Не используйте заводской MAC-адрес устройства в клиентском режиме, в режиме точки доступа или Wi-Fi Direct. Он должен быть скрыт от общедоступных API, которые не являются привилегированными приложениями. Привилегированные приложения, которым для работы требуется заводской MAC-адрес, должны иметь разрешение LOCAL_MAC_ADDRESS.
Пользователи могут оставить случайный MAC-адрес по умолчанию, назначенный каждому SSID. Этот параметр можно найти в разделе Конфиденциальность в меню Настройки > Сведения о сети. Чтобы узнать, как получить случайный MAC-адрес, ознакомьтесь с разделом Случайные MAC-адреса.
Рисунок 1. MAC-адрес в разделе "Конфиденциальность" в сведениях о сети отображается как случайный.
Приложения, вызывающие API идентификаторов устройств
Приложения, вызывающие API идентификаторов устройств, должны соответствовать требованиям Android 10. В противном случае при попытке получить доступ к идентификаторам устройств будет возвращено следующее:
- Приложения, предназначенные для Android 10
SecurityExceptionвызывается из API идентификатора устройства.- Приложения, предназначенные для Android 9 или более ранних версий
- Если у них есть разрешение
READ_PHONE_STATE, возвращается ответnullили данные-заполнители. - Если это не так, API идентификатора устройства выдает исключение
SecurityException, которое содержит название вызванного метода и указание на то, что вызывающее приложение не соответствует требованиям для доступа к запрошенному идентификатору.
Подробнее о неизменяемых идентификаторах устройств и рекомендациях по использованию уникальных идентификаторов…
Тестирование
Приложения не должны иметь доступ к серийному номеру устройства, а также, если применимо, к IMEI- или MEID-коду, серийному номеру SIM-карты и идентификатору абонента. Приложения, у которых есть разрешение на доступ к этим идентификаторам, также должны соответствовать одному из критериев, перечисленных в разделе Кто может получать доступ к идентификаторам устройств.