Zmiany w ochronie prywatności w Androidzie 10

Android 10 (poziom interfejsu API 29) wprowadza wiele zmian w działaniu i funkcjach, aby lepiej chronić prywatność użytkowników. Te zmiany zwiększają przejrzystość i kontrolę, jaką użytkownicy mają nad swoimi danymi oraz możliwości, jakie zapewniają aplikacjom. Funkcje te mogą oznaczać, że pewne zachowania lub dane, od których zależy od aplikacji, mogą działać inaczej niż w starszych wersjach platformy. Ich wpływ na aplikację powinien być minimalny, jeśli działa zgodnie z aktualnymi sprawdzonymi metodami postępowania z danymi użytkownika.

Ta strona zawiera podsumowanie każdej zmiany.

Najważniejsze zmiany

W tej sekcji znajdziesz 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ą zakres dostępu do pamięci zewnętrznej, czyli zakresu miejsca na dane. Takie aplikacje mogą odczytywać te typy plików na zewnętrznym urządzeniu pamięci masowej bez konieczności uzyskiwania od użytkownika jakichkolwiek uprawnień:

Więcej informacji o pamięci masowej o zakresie ograniczonym oraz o udostępnianiu i modyfikowaniu plików zapisanych na takich urządzeniach oraz uzyskiwania do nich dostępu i modyfikowaniu znajdziesz w przewodnikach dotyczących zarządzania plikami w pamięci zewnętrznej oraz uzyskiwania dostępu do plików multimedialnych i ich modyfikowania.

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

Aby zapewnić użytkownikom dodatkową kontrolę nad dostępem aplikacji do informacji o lokalizacji, w Androidzie 10 wprowadzamy 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 w tle. Aplikacja jest uznawana za uzyskującą dostęp do lokalizacji w tle, chyba że jest spełniony jeden z tych warunków:

  • Widoczna jest aktywność należąca do aplikacji.
  • Aplikacja uruchamia usługę na pierwszym planie, która zadeklarowała typ tej usługi o wartości location.

    Aby zadeklarować typ usługi na pierwszym planie dla usługi w aplikacji, ustaw parametr targetSdkVersion lub compileSdkVersion aplikacji na 29 albo wyższy. 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 geofencje oraz jest kierowana na Androida 10 (poziom interfejsu API 29) lub nowszym, musisz zadeklarować uprawnienie ACCESS_BACKGROUND_LOCATION.

Dostęp przyznawany automatycznie podczas 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 zachowanie:

  • Jeśli Twoja aplikacja deklaruje element <uses-permission> dla ACCESS_FINE_LOCATION lub ACCESS_COARSE_LOCATION, podczas instalacji system automatycznie doda element <uses-permission> dlaACCESS_BACKGROUND_LOCATION.
  • Jeśli aplikacja prosi o pole ACCESS_FINE_LOCATION lub ACCESS_COARSE_LOCATION, system automatycznie dodaje do tego żądania parametr ACCESS_BACKGROUND_LOCATION.

Dostęp po zaktualizowaniu 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 zmieni Androida z 9 na Androida 10, system automatycznie zaktualizuje zestaw uprawnień opartych na lokalizacji przyznanych aplikacji. Zestaw uprawnień, które aplikacja otrzyma po uaktualnieniu, zależy od docelowej wersji pakietu SDK i zdefiniowanych uprawnień, jak widać w tej tabeli:

Tabela 1. Zmiany stanu dostępu do lokalizacji po uaktualnieniu urządzeń do Androida 10

Wersja platformy docelowej Przyznano przybliżone lub szczegółowe
pozwolenie?
Uprawnienia w tle
zdefiniowane w pliku manifestu?
Zaktualizowano domyślny stan uprawnień
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 Automatycznie dodawane przez system w momencie uaktualnienia 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 po tym, jak 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 ramach usługi na pierwszym planie, aplikacja powinna sprawdzić, czy użytkownik nadal zezwala jej na otrzymywanie takich informacji o lokalizacji.

Dostęp podczas aktualizowania docelowego poziomu interfejsu API na urządzeniach z Androidem 10 został anulowany

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

Więcej informacji na temat pobierania lokalizacji urządzenia, gdy aplikacja działa w tle, znajdziesz w przewodniku po okresowych aktualizacjach lokalizacji.

Ograniczenia dotyczące rozpoczynania działań w tle

Od Androida 10 system nakłada ograniczenia na rozpoczynanie działań w tle. Takie zmiany pomagają zminimalizować przerwy w działaniu usługi i zapewniają mu większą kontrolę nad tym, co wyświetla się na jego ekranie. O ile aplikacja uruchamia działania w wyniku bezpośredniej interakcji użytkownika, te ograniczenia najprawdopodobniej nie będą miały na nią wpływu.

Aby dowiedzieć się więcej o zalecanej alternatywie dla rozpoczynania działań w tle, zapoznaj się z przewodnikiem dotyczącym ostrzegania użytkowników o zdarzeniach pilnych w aplikacji.

Identyfikatory i dane

W tej sekcji znajdziesz zmiany związane z pracą z identyfikatorami urządzeń i danymi.

Usunięcie koligacji kontaktów

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

Przewodnik dotyczący ContactsProvider zawiera informacje o konkretnych polach i metodach, które są nieaktualne na wszystkich urządzeniach z Androidem 10.

randomizacja adresów MAC

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

Jeśli aplikacja obsługuje przypadek użycia w firmie, platforma udostępnia interfejsy API do obsługi różnych operacji związanych z adresami MAC:

  • Uzyskiwanie losowego adresu MAC: aplikacje właściciela urządzenia i aplikacje właściciela profilu mogą pobrać losowy adres MAC przypisany 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, wywołując 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 funkcji /proc/net, która zawiera informacje o stanie sieci urządzenia. Aplikacje, które potrzebują dostępu do tych informacji (np. 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ć uprawnienie READ_PRIVILEGED_PHONE_STATE, aby uzyskać dostęp do identyfikatorów urządzenia, których nie można zresetować, takich jak IMEI i numer seryjny.

Metody, których to dotyczy:

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

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

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

Ograniczony dostęp do danych ze schowka

Na Androidzie 10 i nowszym aplikacja nie ma dostępu do danych ze schowka, chyba że jest ustawiona jako domyślny edytor metody wprowadzania (IME) lub jest aktualnie zaznaczona.

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 konfigurowania hostów USB.

Kamera i łączność

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

Ograniczenie dostępu do szczegółów i metadanych kamery

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

Więcej informacji o tych zmianach znajdziesz w sekcji poświęconej polom aparatu, które wymagają uprawnień.

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

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

Jeśli chcesz poprosić użytkowników o włączenie i 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 może być właściciel 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 dla połączeń telefonicznych, 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 móc 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 urządzenia, Android 10 uniemożliwia dyskretny 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 w ramach dostępu do podpisu.

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ń dla użytkowników w starszych aplikacjach

Jeśli Twoja aplikacja jest kierowana na Androida 5.1 (poziom interfejsu API 22) lub starszego, przy pierwszym użyciu aplikacji na urządzeniu z Androidem 10 lub nowszym użytkownik zobaczy ekran uprawnień, jak widać na rys. 1. Na tym ekranie użytkownicy mogą anulować dostęp do uprawnień, które system przyznał aplikacji podczas instalacji.

Zrzut ekranu okna dialogowego
Rysunek 1. Okno widoczne dla użytkownika, 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ę pojazdem. Dzięki temu użytkownicy będą wiedzieć, jak dane z czujnika urządzenia są używane w Ustawieniach.

Niektóre biblioteki w Usługach Google Play, takie jak Activity Recognition API czy Google Fit API, nie wyświetlają wyników, jeśli użytkownik nie przyznał aplikacji tego uprawnienia.

Jedyne wbudowane czujniki urządzenia, które wymagają zadeklarowania tego uprawnienia, to licznik kroków i czujniki kroków.

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

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

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

Grupy uprawnień zostały usunięte z interfejsu użytkownika

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