Zmiany w ochronie prywatności w Androidzie 10

Android 10 (poziom interfejsu API 29) wprowadza szereg funkcji i zmian w działaniu, aby lepiej chronić prywatność użytkowników. Te zmiany zwiększają przejrzystość i kontrolę, jaką użytkownicy mają nad swoimi danymi i możliwościami, które udostępniają aplikacjom. Te funkcje mogą oznaczać, że określone zachowania lub dane, od których zależy działanie Twojej aplikacji, mogą działać inaczej niż w przypadku starszych wersji platformy. Jeśli aplikacja jest zgodna z aktualnymi sprawdzonymi metodami postępowania z danymi użytkowników, wpływ na aplikację powinien być minimalny.

Zawiera ona podsumowanie każdej zmiany.

Najważniejsze zmiany

Ta sekcja zawiera najważniejsze zmiany w Androidzie 10 związane z prywatnością.

Dostęp do pamięci zewnętrznej ograniczony do plików aplikacji i multimediów

Domyślnie aplikacje kierowane na Androida 10 i nowsze wersje mają dostęp do pamięci zewnętrznej w zakresie lub pamięci w zakresie. Takie aplikacje mogą wyświetlać następujące typy plików na zewnętrznym urządzeniu pamięci masowej bez konieczności proszenia użytkownika o uprawnienia związane z pamięcią:

Aby dowiedzieć się więcej o ograniczonym miejscu na dane oraz o udostępnianiu, otwieraniu i modyfikowaniu plików zapisanych na zewnętrznych urządzeniach pamięci, przeczytaj przewodniki na temat zarządzania plikami w pamięci zewnętrznej oraz uzyskiwaniu dostępu do plików multimedialnych i ich modyfikowaniu.

Dostęp do lokalizacji urządzenia w tle wymaga uprawnień

Aby zapewnić użytkownikom dodatkową kontrolę nad dostępem aplikacji do informacji o lokalizacji, Android 10 wprowadza uprawnienie ACCESS_BACKGROUND_LOCATION.

W przeciwieństwie do uprawnień ACCESS_FINE_LOCATION i ACCESS_COARSE_LOCATION uprawnienie ACCESS_BACKGROUND_LOCATION wpływa na dostęp aplikacji do lokalizacji tylko wtedy, gdy działa ona w tle. Uznaje się, że aplikacja korzysta z lokalizacji w tle, chyba że jest spełniony jeden z tych warunków:

  • Widoczna będzie aktywność należąca do aplikacji.
  • Aplikacja działa w ramach usługi na pierwszym planie, która zadeklarowała typ usługi na pierwszym planie o wartości location.

    Aby zadeklarować typ usługi na pierwszym planie w aplikacji, ustaw parametr targetSdkVersion lub compileSdkVersion na wartość 29 lub wyższą. Dowiedz się więcej o tym, jak usługi działające na pierwszym planie mogą kontynuować działania inicjowane przez użytkownika, które wymagają dostępu do lokalizacji.

Jeśli Twoja aplikacja tworzy i monitoruje geofencing oraz jest kierowana na Androida w wersji 10 (poziom interfejsu API 29) lub nowszej, musisz zadeklarować uprawnienie ACCESS_BACKGROUND_LOCATION.

Dostęp przyznany automatycznie w przypadku kierowania na Androida 9 lub starszego

Jeśli Twoja aplikacja działa na Androidzie 10 lub nowszym, ale jest kierowana na Androida 9 (poziom interfejsu API 28) lub starszego, platforma stosuje to działanie:

  • Jeśli aplikacja deklaruje element <uses-permission> dla właściwości ACCESS_FINE_LOCATION lub ACCESS_COARSE_LOCATION, podczas instalacji system automatycznie doda element <uses-permission> dla parametru <uses-permission>.ACCESS_BACKGROUND_LOCATION
  • Jeśli aplikacja wysyła żądanie ACCESS_FINE_LOCATION lub ACCESS_COARSE_LOCATION, system automatycznie doda do niego parametr ACCESS_BACKGROUND_LOCATION.

Dostęp po uaktualnieniu urządzenia do Androida 10

Jeśli użytkownik przyzna Twojej aplikacji dostęp do lokalizacji urządzenia (ACCESS_COARSE_LOCATION lub ACCESS_FINE_LOCATION), a następnie przejdzie na Androida 9 na Androida 10, system automatycznie zaktualizuje zestaw uprawnień związanych z lokalizacją przyznanymi aplikacji. Zestaw uprawnień, jakie aplikacja otrzymuje po uaktualnieniu, zależy od docelowej wersji pakietu SDK i określonych uprawnień, tak jak pokazano w tej tabeli:

Tabela 1. Zmiany w stanie dostępu do lokalizacji po uaktualnieniu urządzenia do Androida 10

Wersja platformy docelowej Przyznanie
przybliżone czy dokładne?
Uprawnienia w tle
zdefiniowane w pliku manifestu?
Domyślny stan uprawnień został zaktualizowany
Android 10 Tak Tak Dostęp na pierwszym planie i w tle
Android 10 Tak Nie Tylko dostęp na pierwszym planie
Android 10 Nie (Ignorowane przez system) Brak dostępu
Android 9 lub starszy Tak Dodane automatycznie przez system w momencie uaktualniania urządzenia Dostęp na pierwszym planie i w tle
Android 9 lub starszy Nie (Ignorowane przez system) Brak dostępu

Pamiętaj, że użytkownik może zmienić ten poziom dostępu nawet wtedy, gdy system automatycznie zaktualizuje dostęp aplikacji do lokalizacji urządzenia. Użytkownik może na przykład ograniczyć dostęp aplikacji tylko do pierwszego planu lub całkowicie go anulować. Przed próbą uzyskania dostępu do lokalizacji urządzenia (zwłaszcza w usłudze na pierwszym planie) aplikacja powinna sprawdzić, czy nadal zezwala na to aplikacja.

Dostęp cofnięty podczas aktualizowania docelowego poziomu interfejsu API na urządzeniach z Androidem 10

Weź pod uwagę przypadek, w którym aplikacja jest już zainstalowana na urządzeniu z Androidem 10. Jeśli w takiej sytuacji zaktualizujesz aplikację, aby była kierowana na Androida 10, urządzenie cofnie uprawnienie ACCESS_BACKGROUND_LOCATION.

Więcej informacji o pobieraniu lokalizacji urządzenia, gdy aplikacja działa w tle, znajdziesz w przewodniku na temat odbierania okresowych aktualizacji lokalizacji.

Ograniczenia dotyczące rozpoczynania działań w tle

Począwszy od Androida 10 system ogranicza możliwość uruchamiania działań w tle. Ta zmiana sposobu działania pozwala zminimalizować przerwy w działaniu użytkownika i zapewnić mu większą kontrolę nad tym, co wyświetla się na ekranie. O ile aplikacja uruchamia działania bezpośrednio w wyniku interakcji użytkownika, te ograniczenia najprawdopodobniej nie mają wpływu na aplikację.

Więcej informacji o zalecanej alternatywie dla rozpoczynania działań w tle znajdziesz w przewodniku dotyczącym powiadamiania użytkowników o pilnych wydarzeniach w aplikacji.

Identyfikatory i dane

W tej sekcji znajdziesz informacje o zmianach związanych z pracą z identyfikatorami urządzeń i danymi.

Usunięcie koligacji kontaktów

Począwszy od Androida 10 platforma nie śledzi informacji o podobnych zainteresowaniach kontaktów. Jeśli aplikacja wyszukuje kontakty użytkownika, wyniki nie są uporządkowane według częstotliwości interakcji.

Przewodnik na temat ContactsProvider zawiera informacje opisujące konkretne pola i metody, które są nieaktualne na wszystkich urządzeniach od Androida 10.

losowa kolejność adresów MAC

Na urządzeniach z Androidem 10 lub nowszym system domyślnie przesyła losowe adresy MAC.

Jeśli Twoja aplikacja obsługuje firmowy przypadek użycia, platforma udostępnia interfejsy API do kilku operacji związanych z adresami MAC:

  • Uzyskiwanie losowego adresu MAC: aplikacje właścicieli urządzeń i właścicieli profilu mogą pobierać losowe adresy MAC przypisane do określonej sieci, wywołując metodę getRandomizedMacAddress().
  • Uzyskiwanie rzeczywistego, fabrycznego adresu MAC: aplikacje właściciela urządzenia mogą pobrać rzeczywisty sprzętowy adres MAC urządzenia, dzwoniąc do getWifiMacAddress(). Ta metoda jest przydatna do śledzenia flot urządzeń.

Ograniczenie dostępu do systemu plików /proc/net

Na urządzeniach z Androidem 10 lub nowszym aplikacje nie mają dostępu do usługi /proc/net, która zawiera informacje o stanie sieci urządzenia. Aplikacje, które potrzebują dostępu do tych informacji, takie jak sieci VPN, powinny używać klasy NetworkStatsManager lub ConnectivityManager.

Ograniczenie dotyczące identyfikatorów urządzeń, których nie można zresetować

Począwszy od Androida 10 aplikacje muszą mieć uprawnienia READ_PRIVILEGED_PHONE_STATE, aby mieć dostęp do niemożliwych do zresetowania identyfikatorów urządzenia. Dotyczy to zarówno IMEI, jak i numeru seryjnego.

Dotyczy to m.in. tych metod:

Jeśli aplikacja nie ma tych uprawnień, a mimo to spróbujesz poprosić o informacje o identyfikatorach, których nie można zresetować, odpowiedź platformy będzie się różnić w zależności od docelowej wersji pakietu SDK:

  • Jeśli aplikacja jest kierowana na Androida 10 lub nowszego, występuje SecurityException.
  • Jeśli Twoja aplikacja jest kierowana na Androida 9 (poziom interfejsu API 28) lub starszego, metoda zwraca dane null lub symbole zastępcze, o ile aplikacja ma uprawnienie READ_PHONE_STATE. W przeciwnym razie występuje SecurityException.

W wielu przypadkach identyfikatory urządzenia, których nie można zresetować, nie są potrzebne. Jeśli na przykład Twoja aplikacja używa do śledzenia reklam lub analizy użytkowników identyfikatorów urządzenia, których nie można zresetować, użyj identyfikatora wyświetlania reklam na urządzeniach z Androidem w takich przypadkach. Więcej informacji znajdziesz w artykule o sprawdzonych metodach stosowania unikalnych identyfikatorów.

Ograniczony dostęp do danych ze schowka

Jeśli Twoja aplikacja nie jest domyślnym edytorem metod wprowadzania lub jest obecnie aktywna, nie ma dostępu do danych schowka na Androidzie 10 i nowszych.

Ochrona numeru seryjnego urządzenia USB

Jeśli Twoja aplikacja jest kierowana na Androida 10 lub nowszego, nie może odczytać numeru seryjnego, dopóki użytkownik nie zezwoli aplikacji na dostęp do urządzenia USB lub akcesorium.

Więcej informacji o pracy z urządzeniami USB znajdziesz w przewodniku na temat konfigurowania hostów USB.

Aparat i połączenia

W tej sekcji znajdziesz zmiany dotyczące metadanych kamery i interfejsów API do obsługi połączeń.

Ograniczenie dostępu do informacji i metadanych kamery

Android 10 zmienia zakres informacji zwracanych domyślnie przez metodę getCameraCharacteristics(). W szczególności, aby mieć dostęp do metadanych związanych z konkretnym urządzeniem, które są uwzględniane w wartości zwracanej przez tę metodę, aplikacja musi mieć uprawnienie CAMERA.

Więcej informacji o tych zmianach znajdziesz w sekcji o polach aparatu, które wymagają uprawnień.

Ograniczenie dotyczące włączania i wyłączania Wi-Fi

Aplikacje na Androida 10 lub nowszego nie mogą włączać ani wyłączać Wi-Fi. Metoda WifiManager.setWifiEnabled() zawsze zwraca false.

Jeśli musisz poprosić użytkowników o włączenie lub wyłączenie Wi-Fi, użyj panelu ustawień.

Ograniczenia bezpośredniego dostępu do skonfigurowanych sieci Wi-Fi

Aby chronić prywatność użytkownika, ręczna konfiguracja listy sieci Wi-Fi jest ograniczona do aplikacji systemowych i kontrolerów zasad dotyczących urządzeń (DPC). DPC może być właścicielem urządzenia lub profilu.

Jeśli Twoja aplikacja jest kierowana na Androida 10 lub nowszego i nie jest aplikacją systemową ani DPC, te metody nie zwracają przydatnych danych:

Jeśli aplikacja musi łączyć się z sieciami Wi-Fi, użyj tych alternatywnych metod:

Niektóre interfejsy API połączeń telefonicznych oraz Bluetootha i Wi-Fi wymagają dostępu do lokalizacji FINE

Jeśli Twoja aplikacja jest kierowana na Androida 10 lub nowszego, musi mieć uprawnienie ACCESS_FINE_LOCATION, aby można było korzystać z kilku metod w interfejsach API Wi-Fi, Wi-Fi Aware lub Bluetooth. W sekcjach poniżej znajdziesz listę klas i metod, których dotyczy problem.

Telefonia

Wi-Fi

Bluetooth

Uprawnienia

W tej sekcji opisano aktualizacje modelu uprawnień Androida.

Ograniczony dostęp do zawartości ekranu

Aby chronić zawartość ekranu użytkowników, Android 10 blokuje cichy dostęp do zawartości ekranu urządzenia przez zmianę zakresu uprawnień READ_FRAME_BUFFER, CAPTURE_VIDEO_OUTPUT i CAPTURE_SECURE_VIDEO_OUTPUT. Od Androida 10 te uprawnienia są dostępne tylko do podpisów.

Aplikacje, które muszą mieć dostęp do zawartości ekranu urządzenia, powinny używać interfejsu API MediaProjection, który wyświetla prośbę o udzielenie zgody.

Sprawdzanie uprawnień starszych aplikacji dla użytkowników

Jeśli Twoja aplikacja jest kierowana na Androida 5.1 (poziom interfejsu API 22) lub starszego, użytkownicy zobaczą ekran uprawnień podczas pierwszego korzystania z aplikacji na urządzeniu z Androidem 10 lub nowszym (jak widać na rysunku 1). Umożliwia on użytkownikom cofnięcie dostępu do uprawnień, które system wcześniej przyznał Twojej aplikacji podczas instalacji.

Zrzut ekranu z oknem
Rysunek 1. Okno widoczne dla użytkowników, które umożliwia sprawdzenie starszych uprawnień.

Rozpoznawanie aktywności fizycznej

Android 10 wprowadza uprawnienia czasu działania android.permission.ACTIVITY_RECOGNITION w przypadku aplikacji, które muszą wykrywać liczbę kroków użytkownika lub klasyfikować jego aktywność fizyczną, taką jak chodzenie, jazda na rowerze czy poruszanie się samochodem. Dzięki temu użytkownicy mogą sprawdzić, jak są wykorzystywane dane z czujników urządzenia w Ustawieniach.

Niektóre biblioteki w Usługach Google Play, takie jak Activity Recognition API i Google Fit API, nie podają wyników, jeśli użytkownik nie przyzna aplikacji tych uprawnień.

Jedyne wbudowane czujniki na urządzeniu, które wymagają zadeklarowania tych uprawnień, to czujniki licznika kroków i detektorów kroków.

Jeśli Twoja aplikacja jest kierowana na Androida 9 (poziom interfejsu API 28) lub starszego, system automatycznie przyzna jej w razie potrzeby uprawnienia android.permission.ACTIVITY_RECOGNITION, o ile spełniają każdy z tych warunków:

  • Plik manifestu zawiera uprawnienie com.google.android.gms.permission.ACTIVITY_RECOGNITION.
  • Plik manifestu nie zawiera uprawnienia android.permission.ACTIVITY_RECOGNITION.

Jeśli funkcja automatycznego przyzna uprawnienia android.permission.ACTIVITY_RECOGNITION, aplikacja zachowa to uprawnienie po zaktualizowaniu aplikacji do kierowania na Androida 10. Użytkownik może jednak w każdej chwili cofnąć te uprawnienia w ustawieniach systemu.

Grupy uprawnień zostały usunięte z interfejsu

Od Androida 10 aplikacje nie mogą sprawdzać pogrupowania uprawnień w interfejsie.