Niezmienne identyfikatory urządzeń

W systemie Android 6 i nowszych wersjach dostawcy usług Wi-Fi i analizatory pakietów nie mogą pobierać fabrycznego adresu MAC urządzenia za pośrednictwem stosu Wi-Fi z żądań sieciowych. Począwszy od Androida 10, obowiązują dodatkowe ograniczenia, które ograniczają dostęp do identyfikatorów urządzeń (ID) do aplikacji z uprzywilejowanym poziomem uprawnień . Chroni to identyfikatory urządzeń, takie jak

  • numery telefoniczne IMEI, MEID, ESN i IMSI.
  • numery seryjne kompilacji, karty SIM lub USB.

Kto może uzyskać dostęp do identyfikatorów urządzeń

Identyfikatory urządzeń są ograniczone na wszystkich urządzeniach z Androidem 10, nawet jeśli aplikacje są przeznaczone dla Androida 9 lub starszego. Dostęp do identyfikatorów urządzeń można uzyskać za pomocą

Uprzywilejowany dostęp do pakietów

Pakiet musi być uprzywilejowany, aby uzyskać dostęp do identyfikatorów urządzeń. Musi mieć uprawnienia READ_PRIVILEGED_PHONE_STATE w klasie Manifest.permission i znajdować się na liście dozwolonych w pliku privapp-permission.xml . Aby uzyskać informacje na temat procesu tworzenia listy dozwolonych, zobacz Lista dozwolonych uprawnień uprzywilejowanych .

Aby uzyskać informacje na temat uzyskiwania unikalnego identyfikatora dla pakietu nieuprzywilejowanego , zobacz Typowe przypadki użycia i odpowiedni identyfikator do użycia .

Ograniczone identyfikatory urządzeń i losowe adresy MAC

Aby jeszcze bardziej ograniczyć identyfikatory urządzeń, wszystkie urządzenia z systemem Android 10 domyślnie przesyłają losowe adresy MAC zarówno w przypadku żądań sondujących, jak i powiązanych z nimi, i muszą mieć inny losowy adres MAC dla każdego identyfikatora SSID. Nie używaj fabrycznego adresu MAC urządzenia w trybie klienta, programowym punkcie dostępu (AP) ani w przypadkach użycia Wi-Fi Direct. Musi pozostać ukryty przed publicznie dostępnymi interfejsami API, które nie są aplikacjami uprzywilejowanymi. Uprzywilejowane aplikacje, które wymagają zwrotu fabrycznego adresu MAC, muszą mieć uprawnienia LOCAL_MAC_ADDRESS .

Użytkownicy mają możliwość zachowania domyślnego losowego adresu MAC przypisanego do każdego identyfikatora SSID. Opcję tę można wyświetlić w obszarze Prywatność w Ustawieniach > Szczegóły sieci . Aby dowiedzieć się więcej na temat uzyskiwania losowego adresu MAC, zobacz Losowe adresy MAC .

Screen shows if device ID uses a randomized MAC address for privacy
Rysunek 1. Adres MAC jest wyświetlany losowo w obszarze Prywatność w szczegółach sieci

Aplikacje wywołujące interfejsy API identyfikatorów urządzeń

Aplikacje wywołujące interfejsy API identyfikatorów urządzeń muszą spełniać wymagania systemu Android 10. W przeciwnym razie, gdy spróbują uzyskać dostęp do identyfikatorów urządzeń, zwracany jest następujący komunikat:

  • Aplikacje kierowane na Androida 10
  • Aplikacje przeznaczone na Androida 9 lub starszego
    • Jeśli mają uprawnienie READ_PHONE_STATE , zwracana jest odpowiedź o wartości null lub dane zastępcze.
    • Jeśli tak się nie stanie, interfejsy API identyfikatora urządzenia zgłaszają wyjątek SecurityException zawierający nazwę wywoływanej metody oraz informację, że aplikacja wywołująca nie spełnia wymagań dotyczących dostępu do żądanego identyfikatora.

Aby uzyskać więcej informacji na temat niezmiennych identyfikatorów urządzeń, zobacz Nieresetowalne identyfikatory urządzeń i najlepsze praktyki dotyczące unikalnych identyfikatorów .

Testowanie

Należy uniemożliwić aplikacjom dostęp do numeru seryjnego urządzenia oraz, w stosownych przypadkach, IMEI/MEID, numeru seryjnego karty SIM i identyfikatora abonenta. Aplikacje z uprawnieniami dostępu do tych identyfikatorów muszą także spełniać jedno z kryteriów wymienionych w sekcji Kto może uzyskać dostęp do identyfikatorów urządzeń .