Неизменяемые идентификаторы устройств

В 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-адреса.

На экране показано, что для идентификатора устройства используется случайный MAC-адрес в целях конфиденциальности.

Рисунок 1. MAC-адрес в разделе "Конфиденциальность" в сведениях о сети отображается как случайный.

Приложения, вызывающие API идентификаторов устройств

Приложения, вызывающие API идентификаторов устройств, должны соответствовать требованиям Android 10. В противном случае при попытке получить доступ к идентификаторам устройств будет возвращено следующее:

  • Приложения, предназначенные для Android 10
    • SecurityException вызывается из API идентификатора устройства.
  • Приложения, предназначенные для Android 9 или более ранних версий
    • Если у них есть разрешение READ_PHONE_STATE, возвращается ответ null или данные-заполнители.
    • Если это не так, API идентификатора устройства выдает исключение SecurityException, которое содержит название вызванного метода и указание на то, что вызывающее приложение не соответствует требованиям для доступа к запрошенному идентификатору.

Подробнее о неизменяемых идентификаторах устройств и рекомендациях по использованию уникальных идентификаторов…

Тестирование

Приложения не должны иметь доступ к серийному номеру устройства, а также, если применимо, к IMEI- или MEID-коду, серийному номеру SIM-карты и идентификатору абонента. Приложения, у которых есть разрешение на доступ к этим идентификаторам, также должны соответствовать одному из критериев, перечисленных в разделе Кто может получать доступ к идентификаторам устройств.