Zmiany w ochronie prywatności w Androidzie 10

Android 10 (poziom interfejsu API 29) wprowadza kilka funkcji i zmian zachowania, aby lepiej chronić prywatność użytkowników. Dzięki tym zmianom użytkownicy zyskają większą przejrzystość i kontrolę nad swoimi danymi oraz możliwościami, które przyznają 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. Wpływ na Twoją aplikację powinien być minimalny, jeśli przestrzega ona aktualnych zaleceń dotyczących postępowania z danymi użytkownika.

Na tej stronie znajdziesz podsumowanie każdej zmiany.

Najważniejsze zmiany

Ta sekcja zawiera najważniejsze zmiany w Androidzie 10 dotyczące 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ą 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 do przechowywania danych bez konieczności żądania od użytkownika żadnych uprawnień dotyczących przechowywania:

Aby dowiedzieć się więcej o ograniczonym dostępie do pamięci oraz o tym, jak udostępniać pliki zapisane na urządzeniach zewnętrznych i do nich zaglądać oraz je modyfikować, zapoznaj się z poniższymi przewodnikami: Zarządzanie plikami w pamięci zewnętrznejDostęp do plików multimedialnych i ich modyfikowanie.

Dostęp do lokalizacji urządzenia w tle wymaga zgody

Aby umożliwić użytkownikom dodatkową kontrolę nad dostępem aplikacji do informacji o lokalizacji, w Androidzie 10 wprowadzono uprawnienie ACCESS_BACKGROUND_LOCATION.

W przeciwieństwie do uprawnień ACCESS_FINE_LOCATIONACCESS_COARSE_LOCATION uprawnienia ACCESS_BACKGROUND_LOCATION mają wpływ tylko na dostęp do lokalizacji, gdy aplikacja działa w tle. Aplikacja jest uważana 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 ma zadeklarowany typ usługi na pierwszym planie location.

    Aby zadeklarować typ usługi na pierwszym planie w aplikacji, ustaw wartość atrybutu targetSdkVersion lub compileSdkVersion na 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 geoogrodzenia oraz jest kierowana na Androida 10 (API na poziomie 29) lub nowszego, musisz zadeklarować uprawnienie ACCESS_BACKGROUND_LOCATION.

Dostęp przyznany 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 działa w ten sposób:

  • Jeśli Twoja aplikacja deklaruje element <uses-permission>ACCESS_FINE_LOCATION lub ACCESS_COARSE_LOCATION, system automatycznie dodaje element <uses-permission> do ACCESS_BACKGROUND_LOCATION podczas instalacji.
  • Jeśli Twoja aplikacja wysyła żądanie ACCESS_FINE_LOCATION lub ACCESS_COARSE_LOCATION, system automatycznie dodaje do żądania ACCESS_BACKGROUND_LOCATION.

Dostęp po uaktualnieniu urządzenia do Androida 10

Jeśli użytkownik przyzna aplikacji dostęp do lokalizacji urządzenia (ACCESS_COARSE_LOCATION lub ACCESS_FINE_LOCATION), a następnie zaktualizuje urządzenie z Androida 9 na Androida 10, system automatycznie zaktualizuje zestaw uprawnień przyznanych aplikacji na podstawie lokalizacji. Zestawy uprawnień, które aplikacja otrzyma po aktualizacji, zależą od docelowej wersji pakietu SDK i zdefiniowanych uprawnień, jak pokazano w tabeli poniżej:

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

Wersja platformy docelowej Coarse or fine
permission granted?
Czy w pliku manifestu zdefiniowano uprawnienie do działania w tle
?
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

Użytkownik może zmienić ten poziom dostępu nawet po automatycznej aktualizacji przez system dostępu aplikacji do lokalizacji urządzenia. Użytkownik może na przykład ograniczyć dostęp aplikacji do pierwszego planu lub cofnąć go całkowicie. Zanim aplikacja spróbuje uzyskać dostęp do lokalizacji urządzenia, zwłaszcza w ramach usługi na pierwszym planie, powinna sprawdzić, czy użytkownik nadal zezwala aplikacji na otrzymywanie tych informacji o lokalizacji.

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

Rozważmy sytuację, w której 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

Począwszy od Androida 10 system nakłada ograniczenia dotyczące uruchamiania działań w tle. Ta zmiana zachowania pomaga zminimalizować przerwy w pracy użytkownika i daje mu większą kontrolę nad tym, co wyświetla się na ekranie. Jeśli aplikacja uruchamia działania bezpośrednio w wyniku interakcji z użytkownikiem, te ograniczenia prawdopodobnie na nią nie będą miały wpływu.

Więcej informacji o zalecanej alternatywie dla uruchamiania działań w tle znajdziesz w przewodniku, w którym wyjaśniamy, jak informować użytkowników o wydarzeniach związanych z czasem w aplikacji.

Identyfikatory i dane

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

Usuwanie podobieństwa kontaktów

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

Przewodnik ContactsProvider zawiera powiadomienie o szczegółowych polach i metodach, które są przestarzałe na wszystkich urządzeniach od Androida 10.

randomizacja 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 użytkowanie na poziomie przedsiębiorstwa, platforma udostępnia interfejsy API do wykonywania kilku 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 konkretnej sieci, wywołując funkcję getRandomizedMacAddress().
  • Uzyskiwanie rzeczywistego fabrycznego adresu MAC: aplikacje właściciela urządzenia mogą pobrać rzeczywisty adres MAC sprzętu urządzenia, wywołując funkcję 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.

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

Od Androida 10 aplikacje muszą mieć uprawnienia READ_PRIVILEGED_PHONE_STATE, aby uzyskać dostęp do niezerujących się identyfikatorów urządzenia, w tym numeru IMEI i numeru seryjnego.

Dotyczy to tych metod:

Jeśli Twoja aplikacja nie ma uprawnień i próbuje uzyskać informacje o identyfikatorach, których nie można zresetować, odpowiedź platformy będzie się różnić w zależności od wersji docelowego pakietu SDK:

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

W wielu przypadkach nie trzeba stosować nieusuwanych identyfikatorów urządzeń. Jeśli na przykład Twoja aplikacja używa identyfikatorów urządzeń, których nie można zresetować, do śledzenia reklam lub analizowania użytkowników, w tych konkretnych przypadkach użyj identyfikatora wyświetlania reklam na Androida. Więcej informacji znajdziesz w artykule Sprawdzone metody dotyczące unikalnych identyfikatorów.

Ograniczony dostęp do danych ze schowka

Jeśli Twoja aplikacja nie jest domyślnym edytorem metody wprowadzania (IME) ani aplikacją, która jest obecnie aktywna, nie może uzyskać dostępu do danych z bufora wymiany na Androidzie 10 lub nowszym.

Ochrona numeru seryjnego urządzenia USB

Jeśli Twoja aplikacja jest przeznaczona na Androida 10 lub nowszego, nie może odczytać numeru seryjnego, dopóki użytkownik nie przyzna jej uprawnień dostępu 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ść

Ta sekcja zawiera listę zmian dotyczących interfejsów API metadanych aparatu i interfejsów API łączności.

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

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, które mogą być związane z danym urządzeniem i znajdują się w wartości zwracanej przez tę metodę.

Więcej informacji o tych zmianach znajdziesz w sekcji poświęconej polom aparatu, które wymagają 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 poprosić użytkowników o włączenie i wyłączenie Wi-Fi, użyj panelu ustawień.

Ograniczenia dostępu bezpośredniego 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ń. Użytkownik 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, a nie jest aplikacją systemową ani DPC, poniższe metody nie zwracają przydatnych danych:

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

  • Aby uruchomić błyskawiczne połączenie lokalne z siecią Wi-Fi, użyj parametru WifiNetworkSpecifier w standardowym obiekcie NetworkRequest.
  • Aby dodać sieci Wi-Fi, które mogą być używane do zapewnienia użytkownikowi dostępu do internetu, użyj obiektów WifiNetworkSuggestion. Sieci, które pojawiają się w oknie wyboru sieci do automatycznego łączenia, możesz dodawać i usuwać, wywołując odpowiednio metody addNetworkSuggestions()removeNetworkSuggestions(). Te metody nie wymagają uprawnień do lokalizacji.

Niektóre interfejsy API telefonów, Bluetooth 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, 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.

Połączenia telefoniczne

Wi-Fi

Bluetooth

Uprawnienia

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

Ograniczony dostęp do zawartości ekranu

Aby chronić zawartość ekranu użytkowników, Android 10 uniemożliwia niejawny dostęp do zawartości ekranu urządzenia przez zmianę zakresu uprawnień READ_FRAME_BUFFER, CAPTURE_VIDEO_OUTPUTCAPTURE_SECURE_VIDEO_OUTPUT. Od Androida 10 te uprawnienia są dostępne tylko w ramach dostępu na podstawie 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ń w aplikacji w interakcji z użytkownikiem w przypadku starszych aplikacji

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

Zrzut ekranu okna
Rysunek 1. Okno dla użytkownika umożliwiające 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. Ma to na celu umożliwienie użytkownikom sprawdzenia, jak dane z czujników urządzenia są używane w Ustawieniach.

Niektóre biblioteki w usługach Google Play, takie jak interfejs Activity Recognition APIinterfejs Google Fit API, nie dostarczają wyników, chyba że użytkownik przyznał Twojej aplikacji odpowiednie uprawnienia.

Jedynymi wbudowanymi czujnikami na urządzeniu, które wymagają zadeklarowania tego uprawnienia, są czujniki licznika krokówdetektora kroków.

Jeśli Twoja aplikacja jest kierowana na Androida 9 (poziom API 28) lub niższą wersję, system automatycznie przyznaje jej uprawnienia android.permission.ACTIVITY_RECOGNITION, 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-auto przyznaje uprawnienie android.permission.ACTIVITY_RECOGNITION, aplikacja zachowa to uprawnienie po zaktualizowaniu jej do wersji 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ć, jak uprawnienia są grupowane w interfejsie.