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