Stałe identyfikatory urządzeń

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:

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.

Ekran pokazujący, czy identyfikator urządzenia używa losowego adresu MAC w celu ochrony prywatności

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
  • 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ń.