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ą
- Domyślna aplikacja do SMS-ów.
- Aplikacje z uprawnieniem
READ_PRIVILEGED_PHONE_STATE
w klasieManifest.permission
i listą dozwolonych w plikuprivapp-permission.xml
. Należy je również załadować do katalogupriv-app
. - Aplikacje z uprawnieniami operatora określonymi w Uprawnieniach operatora UICC .
- Właściciel urządzenia lub właściciel profilu z uprawnieniem
READ_PHONE_STATE
przyznanym w klasieManifest.permission
. (Umieszczenie na liście dozwolonych nie jest wymagane).
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 .
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
- Z interfejsów API identyfikatora urządzenia zgłaszany jest
SecurityException
. - Aplikacje przeznaczone na Androida 9 lub starszego
- Jeśli mają uprawnienie
READ_PHONE_STATE
, zwracana jest odpowiedź o wartościnull
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ń .