W Androidzie 6 i nowszych dostawcy usług Wi-Fi oraz analizatory pakietów nie mogą już pobierać adresu MAC fabrycznego urządzenia za pomocą pakietu Wi-Fi z żądań sieciowych. Od Androida 10 obowiązują dodatkowe ograniczenia, które ograniczają dostęp do identyfikatorów urządzeń (ID) do aplikacji z poziomem uprawnień uprzywilejowanym. Dzięki temu identyfikatory urządzeń, takie jak:
- numery IMEI, MEID, ESN i IMSI;
- numerów seryjnych kompilacji, kart SIM lub urządzeń USB.
Kto ma dostęp do identyfikatorów urządzeń
Identyfikatory urządzeń są ograniczone na wszystkich urządzeniach z Androidem 10, nawet jeśli aplikacje są kierowane na Androida 9 lub starszego. Do identyfikatorów urządzeń mają dostęp:
- domyślna aplikacja do SMS-ów,
- Aplikacje z uprawnieniem
READ_PRIVILEGED_PHONE_STATE
w klasieManifest.permission
i z dostępem do listy dozwolonych w plikuprivapp-permission.xml
. Muszą one też być załadowane w katalogupriv-app
. - Aplikacje z uprawnieniami operatora zgodnie z definicją w uprawnieniach operatora UICC.
- właściciel urządzenia lub właściciel profilu z uprawnieniami
READ_PHONE_STATE
przyznanymi w klasieManifest.permission
. (umieszczanie na liście dozwolonych nie jest wymagane).
Dostęp do pakietów uprzywilejowanych
Pakiet musi mieć uprawnienia dostępu do identyfikatorów urządzeń. Musi mieć uprawnienie
READ_PRIVILEGED_PHONE_STATE
w klasie Manifest.permission
i być na liście dozwolonych w pliku privapp-permission.xml
. Informacje o procesie dodawania do listy dozwolonych znajdziesz w artykule Uprawnienia z poziomu aplikacji.
Informacje o uzyskiwaniu unikalnego identyfikatora dla nieuprzywilejowanego pakietu znajdziesz w artykule Powszechne przypadki użycia i odpowiednie identyfikatory.
Identyfikatory urządzeń z ograniczonym dostępem i randomizowane adresy MAC
Aby jeszcze bardziej ograniczyć identyfikatory urządzeń, wszystkie urządzenia z Androidem 10 domyślnie przesyłają losowe adresy MAC zarówno w przypadku zapytań sondujących, jak i powiązanych z nimi zapytań. Każdy SSID musi mieć inny losowy adres MAC. Nie używaj fabrycznego adresu MAC urządzenia w trybie klienta, w przypadku punktu dostępu (AP) z oprogramowaniem lub w przypadku korzystania z Wi-Fi Direct. Musi pozostać ukryty przed publicznie dostępnymi interfejsami API, które nie są aplikacjami uprzywilejowanymi. Aplikacje z uprawnieniami, które wymagają zwrócenia adresu MAC fabrycznego, muszą mieć uprawnienie LOCAL_MAC_ADDRESS
.
Użytkownicy mogą zachować domyślny losowy adres MAC przypisany do każdej sieci SSID. Opcja jest widoczna w sekcji Prywatność w sekcji Ustawienia > Szczegóły sieci. Więcej informacji o uzyskiwaniu losowego adresu MAC znajdziesz w artykule Randomizowane adresy MAC.

Rys. 1. Adres MAC jest losowy i wyświetla się w sekcji Prywatność w szczegółach sieci.
Aplikacje, które wywołują interfejsy API identyfikatora urządzenia
Aplikacje, które wywołują interfejsy API identyfikatora urządzenia, muszą spełniać wymagania Androida 10. W przeciwnym razie, gdy spróbują uzyskać dostęp do identyfikatorów urządzenia, zwrócone zostanie:
- Aplikacje kierowane na Androida 10
SecurityException
jest zgłaszany przez interfejsy API identyfikatora urządzenia.- Aplikacje kierowane na Androida 9 lub starszego
- Jeśli ma on uprawnienia
READ_PHONE_STATE
, zwracana jest odpowiedźnull
lub dane zastępcze. - Jeśli tak się nie stanie, interfejsy API identyfikatora urządzenia zwracają błąd
SecurityException
, zawierający nazwę wywoływanej metody i wskazanie, że wywołująca aplikacja nie spełnia wymagań dotyczących dostępu do żądanego identyfikatora.
Więcej informacji o niezmiennych identyfikatorach urządzeń znajdziesz w artykule Niezmiennicze identyfikatory urządzeń oraz sprawdzonych metodach stosowania unikalnych identyfikatorów.
Testowanie
Aplikacje muszą mieć zablokowany dostęp do numeru seryjnego urządzenia oraz, w stosownych przypadkach, numeru IMEI lub MEID, numeru seryjnego karty SIM i identyfikatora subskrybenta. Aplikacje, które mają uprawnienia do dostępu do tych identyfikatorów, muszą też spełniać jedno z kryteriów wymienionych w sekcji Kto może uzyskiwać dostęp do identyfikatorów urządzeń.