Zmiany w ochronie prywatności w Androidzie 10

Android 10 (poziom interfejsu API 29) wprowadza szereg funkcji i zmian w działaniu, które lepiej chronią prywatność użytkowników. Zmiany te zwiększają przejrzystość i kontrolę, jaką użytkownicy mają nad swoimi danymi i możliwościami, które udostępniają aplikacjom. Może to oznaczać, że określone zachowania lub dane, na których opiera się Twoja aplikacja, mogą działać inaczej niż w starszych wersjach platformy. Jeśli Twoja aplikacja jest zgodna z obecnymi najlepszymi praktykami dotyczącymi obsługi danych użytkownika, wpływ tych zmian na nią powinien być minimalny.

Na tej stronie znajdziesz podsumowanie każdej zmiany.

Najważniejsze zmiany

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

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

Domyślnie aplikacje kierowane na Androida 10 i nowsze wersje mają ograniczony dostęp do pamięci zewnętrznej, czyli pamięć o ograniczonym zakresie. Takie aplikacje mogą wyświetlać na zewnętrznym urządzeniu do przechowywania danych te typy plików bez konieczności proszenia użytkownika o uprawnienia związane z pamięcią:

Więcej informacji o pamięci o ograniczonym zakresie, a także o udostępnianiu, uzyskiwaniu dostępu i modyfikowaniu plików zapisanych na zewnętrznych urządzeniach pamięci masowej 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 większą kontrolę nad dostępem aplikacji do informacji o lokalizacji, w Androidzie 10 wprowadziliśmy uprawnienie ACCESS_BACKGROUND_LOCATION.

W przeciwieństwie do uprawnień ACCESS_FINE_LOCATIONACCESS_COARSE_LOCATION uprawnienie ACCESS_BACKGROUND_LOCATION wpływa tylko na dostęp aplikacji do lokalizacji, gdy działa ona w tle. Aplikacja jest uznawana za uzyskującą dostęp do lokalizacji w tle, chyba że spełniony jest jeden z tych warunków:

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

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

Jeśli Twoja aplikacja tworzy i monitoruje geofence i jest kierowana na Androida 10 (API na poziomie 29) lub nowszego, musisz zadeklarować uprawnienie ACCESS_BACKGROUND_LOCATION.

Dostęp przyznawany 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 (API na poziomie 28) lub starszego, platforma zachowuje się w ten sposób:

  • Jeśli aplikacja deklaruje element <uses-permission> dla ACCESS_FINE_LOCATION lub ACCESS_COARSE_LOCATION, system automatycznie dodaje element <uses-permission> dla ACCESS_BACKGROUND_LOCATION podczas instalacji.
  • Jeśli Twoja aplikacja wysyła żądanie ACCESS_FINE_LOCATION lub ACCESS_COARSE_LOCATION, system automatycznie dodaje do niego 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 zaktualizuje urządzenie z Androida 9 do Androida 10, system automatycznie zaktualizuje zestaw uprawnień związanych z lokalizacją przyznanych Twojej aplikacji. Zestaw uprawnień, które Twoja aplikacja otrzyma po aktualizacji, zależy od docelowej wersji pakietu SDK i zdefiniowanych uprawnień, jak pokazano w tej tabeli:

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

Wersja platformy docelowej Przyznano uprawnienia do lokalizacji przybliżonej lub dokładnej?
Zezwolenie na działanie w tle
zdefiniowane w pliku manifestu?
Zaktualizowany 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 podczas 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 po tym, jak system automatycznie zaktualizuje dostęp aplikacji do lokalizacji urządzenia. Użytkownik może na przykład ograniczyć dostęp aplikacji do lokalizacji tylko na pierwszym planie lub całkowicie go cofnąć. Zanim spróbujesz uzyskać dostęp do lokalizacji urządzenia, zwłaszcza w ramach usługi działającej na pierwszym planie, aplikacja powinna sprawdzić, czy użytkownik nadal zezwala jej na otrzymywanie tych informacji.

Odebranie dostępu podczas aktualizowania docelowego poziomu interfejsu API na urządzeniach z Androidem 10

Rozważmy przypadek, w którym 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 o tym, jak pobierać lokalizację urządzenia, gdy aplikacja działa w tle, znajdziesz w przewodniku na temat otrzymywania okresowych aktualizacji lokalizacji.

Ograniczenia dotyczące rozpoczynania działań w tle

Począwszy od Androida 10, system ogranicza rozpoczynanie działań w tle. Ta zmiana w działaniu pomaga zminimalizować przerwy w pracy użytkownika i zapewnia mu większą kontrolę nad tym, co jest wyświetlane na ekranie. Jeśli aplikacja rozpoczyna działania bezpośrednio w wyniku interakcji użytkownika, najprawdopodobniej nie podlegają one tym ograniczeniom.

Więcej informacji o zalecanej alternatywie dla rozpoczynania aktywności w tle znajdziesz w przewodniku na temat powiadamiania użytkowników o wydarzeniach wymagających natychmiastowej reakcji w aplikacji.

Identyfikatory i dane

W tej sekcji znajdziesz zmiany dotyczące pracy z identyfikatorami urządzeń i danymi.

Usuwanie powiązań z kontaktami

Od Androida 10 platforma nie śledzi informacji o powiązaniach kontaktów. W rezultacie, jeśli aplikacja przeprowadzi wyszukiwanie w kontaktach użytkownika, wyniki nie będą uporządkowane według częstotliwości interakcji.

Przewodnik dotyczący ContactsProvider zawiera informację o konkretnych polach i metodach, które są przestarzałe na wszystkich urządzeniach z Androidem 10 lub nowszym.

Randomizacja adresu MAC

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

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

  • Pobieranie randomizowanego adresu MAC: aplikacje właściciela urządzenia i aplikacje właściciela profilu mogą pobierać randomizowany adres MAC przypisany do konkretnej sieci, wywołując metodę getRandomizedMacAddress().
  • Pobieranie rzeczywistego, fabrycznego adresu MAC: aplikacje właściciela urządzenia mogą pobrać rzeczywisty adres MAC sprzętu urządzenia, wywołując metodę getWifiMacAddress(). Ta metoda przydaje się 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 /proc/net, co obejmuje 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ć

Od Androida 10 aplikacje muszą mieć uprawnieniaREAD_PRIVILEGED_PHONE_STATE, aby uzyskać dostęp do identyfikatorów urządzenia, których nie można zresetować, w tym do numeru IMEI i numeru seryjnego.

Zmiany dotyczą tych metod:

Jeśli Twoja aplikacja nie ma tego uprawnienia, a mimo to spróbujesz poprosić o informacje o identyfikatorach, których nie można zresetować, reakcja platformy będzie zależeć od docelowej wersji pakietu SDK:

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

W wielu przypadkach nie są potrzebne identyfikatory urządzeń, których nie można zresetować. Jeśli na przykład Twoja aplikacja używa identyfikatorów urządzenia, których nie można zresetować, do śledzenia reklam lub analizowania informacji o użytkownikach, w tych konkretnych przypadkach używaj identyfikatora wyświetlania reklam na Androidzie. Więcej informacji znajdziesz w sprawdzonych metodach dotyczących unikalnych identyfikatorów.

Ograniczony dostęp do danych ze schowka

O ile Twoja aplikacja nie jest domyślnym edytorem metody wprowadzania ani aplikacją, która jest obecnie aktywna, nie może ona uzyskiwać dostępu do danych ze schowka na urządzeniach z Androidem 10 lub nowszym.

Ochrona numeru seryjnego urządzenia USB

Jeśli Twoja aplikacja jest kierowana na Androida 10 lub nowszego, nie może odczytywać numeru seryjnego, dopóki użytkownik nie przyzna jej uprawnień dostępu do urządzenia USB lub akcesorium.

Więcej informacji o korzystaniu z urządzeń USB znajdziesz w przewodniku na temat konfigurowania hostów USB.

Kamera i łączność

W tej sekcji znajdziesz zmiany dotyczące interfejsów API metadanych aparatu i łączności.

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

W Androidzie 10 zmieniliśmy zakres informacji, które domyślnie zwraca metoda getCameraCharacteristics(). W szczególności aplikacja musi mieć uprawnienie CAMERA, aby uzyskać dostęp do metadanych, które mogą być specyficzne dla urządzenia i są uwzględnione w wartości zwracanej przez tę metodę.

Więcej informacji o tych zmianach znajdziesz w sekcji Pola aparatu wymagające uprawnień.

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

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

Jeśli chcesz wyświetlać użytkownikom prośby 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żytkowników, 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 właścicielem 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 Twoja aplikacja musi łączyć się z sieciami Wi-Fi, użyj tych alternatywnych metod:

  • Aby wywołać natychmiastowe połączenie lokalne z siecią Wi-Fi, użyj elementu WifiNetworkSpecifier w standardowym obiekcie NetworkRequest.
  • Aby dodać sieci Wi-Fi, które mają być brane pod uwagę przy zapewnianiu użytkownikowi dostępu do internetu, użyj obiektów WifiNetworkSuggestion. Sieci wyświetlane w oknie wyboru sieci do automatycznego łączenia możesz dodawać i usuwać, wywołując odpowiednio funkcje addNetworkSuggestions()removeNetworkSuggestions(). Te metody nie wymagają żadnych uprawnień do lokalizacji.

Niektóre interfejsy API telefonii, Bluetootha i Wi-Fi wymagają uprawnienia do dokładnej lokalizacji

Jeśli Twoja aplikacja jest kierowana na Androida 10 lub nowszego, musi mieć uprawnienie ACCESS_FINE_LOCATION do korzystania 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.

Połączenia telefoniczne

Wi-Fi

Bluetooth

Uprawnienia

W tej sekcji opisujemy zmiany w modelu uprawnień na Androidzie.

Ograniczony dostęp do zawartości ekranu

Aby chronić zawartość ekranu użytkowników, Android 10 uniemożliwia cichy dostęp do zawartości ekranu urządzenia, zmieniając zakres uprawnień READ_FRAME_BUFFER, CAPTURE_VIDEO_OUTPUTCAPTURE_SECURE_VIDEO_OUTPUT. Od Androida 10 te uprawnienia mają poziom dostępu signature-access.

Aplikacje, które potrzebują dostępu do zawartości ekranu urządzenia, powinny używać interfejsu MediaProjection, który wyświetla prośbę o zgodę użytkownika.

Sprawdzanie uprawnień aplikacji starszego typu przez użytkowników

Jeśli Twoja aplikacja jest przeznaczona na Androida 5.1 (poziom interfejsu API 22) lub starszego, użytkownicy zobaczą ekran uprawnień, gdy po raz pierwszy użyją aplikacji na urządzeniu z Androidem 10 lub nowszym (jak pokazano na ilustracji 1). Na tym ekranie użytkownicy mogą cofnąć dostęp do uprawnień, które system wcześniej przyznał aplikacji podczas instalacji.

Zrzut ekranu okna
Rysunek 1. Okno dialogowe dla użytkownika, które umożliwia sprawdzenie starszych uprawnień

Rozpoznawanie aktywności fizycznej

Android 10 wprowadza android.permission.ACTIVITY_RECOGNITION uprawnienia w czasie działania dla aplikacji, które muszą wykrywać liczbę kroków użytkownika lub klasyfikować jego aktywność fizyczną, np. chodzenie, jazdę na rowerze lub poruszanie się pojazdem. Ma to na celu zapewnienie użytkownikom wglądu w to, jak dane z czujników urządzenia są wykorzystywane w Ustawieniach.

Niektóre biblioteki w usługach Google Play, takie jak interfejs Activity Recognition APIinterfejs Google Fit API, nie zwracają wyników, dopóki użytkownik nie przyzna Twojej aplikacji tego uprawnienia.

Jedynymi wbudowanymi czujnikami na urządzeniu, które wymagają zadeklarowania tego uprawnienia, są licznik krokówdetektor kroków.

Jeśli Twoja aplikacja jest kierowana na Androida 9 (API na poziomie 28) lub starszego, system automatycznie przyznaje jej uprawnienie android.permission.ACTIVITY_RECOGNITION, w razie potrzeby, jeśli spełnia ona wszystkie te warunki:

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

Jeśli system automatycznie przyzna android.permission.ACTIVITY_RECOGNITIONuprawnienie, aplikacja zachowa je po zaktualizowaniu jej do wersji docelowej Androida 10. Użytkownik może jednak w każdej chwili cofnąć to uprawnienie w ustawieniach systemu.

Usunięcie grup uprawnień z interfejsu

Od Androida 10 aplikacje nie mogą sprawdzać, jak uprawnienia są pogrupowane w interfejsie.