Zmiany w ochronie prywatności w Androidzie 10

Android 10 (API na poziomie 29) wprowadza szereg funkcji i zmian w sposobie działania, które mają lepiej chronić prywatność użytkowników. Zmiany te zwiększają przejrzystość i kontrolę, jaką użytkownicy mają nad swoimi danymi, oraz możliwości, jakie dają aplikacjom. Te funkcje mogą oznaczać, że określone zachowania lub dane, na których polega Twoja aplikacja, mogą działać inaczej niż w starszych wersjach platformy. Jeśli Twoja aplikacja jest zgodna z aktualnymi sprawdzonymi metodami dotyczącymi obsługi danych użytkowników, wpływ tych zmian 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 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 miejsca na dane do pamięci zewnętrznej, czyli ograniczony dostęp do miejsca na dane. Takie aplikacje mogą wyświetlać te typy plików na urządzeniu pamięci zewnętrznej bez konieczności proszenia o uprawnienia użytkownika związane z pamięcią:

  • Pliki w katalogu specyficznym dla aplikacji, do których dostęp uzyskuje się za pomocą funkcji getExternalFilesDir().
  • Zdjęcia, filmy i klipy audio utworzone przez aplikację z biblioteki multimediów.

Więcej informacji o ograniczonym dostępie do pamięci oraz o tym, jak udostępniać, uzyskiwać dostęp do plików zapisanych na zewnętrznych urządzeniach pamięci i je modyfikować, 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, Android 10 wprowadza uprawnienie ACCESS_BACKGROUND_LOCATION.

W przeciwieństwie do ACCESS_FINE_LOCATION i ACCESS_COARSE_LOCATION uprawnień, 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:

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

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 stosuje te zasady:

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 uaktualni urządzenie z Androida 9 do Androida 10, system automatycznie zaktualizuje zestaw uprawnień opartych na lokalizacji przyznanych Twojej aplikacji. Zestaw uprawnień, które otrzyma Twoja aplikacja po uaktualnieniu, zależy od docelowej wersji pakietu SDK i zdefiniowanych uprawnień, jak pokazano w tabeli poniżej:

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

Docelowa wersja platformy Przyznano uprawnienia do dokładnej lub przybliżonej lokalizacji
?
Uprawnienia do działania w tle
zdefiniowane w pliku manifestu?
Zaktualizowany domyślny stan uprawnień
Android 10 Tak Tak Dostęp na pierwszym planie i dostęp 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 dodane przez system podczas uaktualniania urządzenia Dostęp na pierwszym planie i dostęp 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 Twojej aplikacji do lokalizacji urządzenia. Użytkownik może na przykład ograniczyć dostęp Twojej aplikacji tylko do pierwszego planu lub całkowicie go cofnąć. Zanim spróbujesz uzyskać dostęp do lokalizacji urządzenia, zwłaszcza w usłudze na pierwszym planie, Twoja aplikacja powinna sprawdzić, czy użytkownik nadal zezwala na otrzymywanie tych informacji o lokalizacji.

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

Załóżmy, że Twoja 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 tym, jak pobierać lokalizację urządzenia, gdy aplikacja działa w tle, znajdziesz w przewodniku dotyczącym otrzymywania okresowych aktualizacji lokalizacji.

Ograniczenia dotyczące uruchamiania aktywności w tle

Od Androida 10 system nakłada ograniczenia na uruchamianie aktywności w tle. Ta zmiana w sposobie działania pomaga zminimalizować przerwy dla użytkownika i zapewnia mu większą kontrolę nad tym, co jest wyświetlane na ekranie. Jeśli Twoja aplikacja uruchamia aktywności bezpośrednio w wyniku interakcji z użytkownikiem, najprawdopodobniej nie będzie ona objęta tymi ograniczeniami.

Więcej informacji o zalecanej alternatywie dla uruchamiania aktywności w tle znajdziesz w przewodniku dotyczącym informowania użytkowników o zdarzeniach wymagających szybkiego działania w aplikacji.

Identyfikatory i dane

Ta sekcja zawiera zmiany dotyczące pracy z identyfikatorami i danymi urządzeń.

Usunięcie powiązania z kontaktami

Od Androida 10 platforma nie śledzi informacji o powiązaniu z kontaktami. W rezultacie, jeśli Twoja aplikacja wyszukuje kontakty użytkownika, wyniki nie są 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.

Randomizacja adresu MAC

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

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

  • Uzyskiwanie randomizowanego adresu MAC: aplikacje właściciela urządzenia i właściciela profilu mogą pobrać randomizowany adres MAC przypisany do konkretnej sieci, wywołując funkcję getRandomizedMacAddress().
  • Uzyskiwanie rzeczywistego adresu MAC z ustawień fabrycznych: 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 mogą uzyskiwać dostępu do /proc/net, który 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ć

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

Dotyczy to tych metod:

Jeśli Twoja aplikacja nie ma uprawnień i mimo to próbujesz uzyskać informacje o identyfikatorach, których nie można zresetować, odpowiedź platformy zależy od docelowej wersji pakietu SDK:

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

W wielu przypadkach użycia nie są potrzebne identyfikatory urządzeń, których nie można zresetować. Jeśli na przykład Twoja aplikacja używa identyfikatorów urządzeń, których nie można zresetować, do śledzenia reklam lub analizy użytkowników, użyj w tych konkretnych przypadkach użycia identyfikatora reklamowego Androida ID. Więcej informacji znajdziesz w artykule Sprawdzone metody stosowania unikalnych identyfikatorów.

Ograniczony dostęp do danych ze schowka

Jeśli Twoja aplikacja nie jest domyślnym edytorem metod wprowadzania (IME) ani aplikacją, która jest obecnie aktywna, nie może ona uzyskiwać dostępu do danych ze schowka na Androidzie 10 lub nowszym.

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 przyzna jej uprawnień dostępu do urządzenia lub akcesorium USB.

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

Aparat i łączność

Ta sekcja zawiera zmiany dotyczące metadanych aparatu i interfejsów API łączności.

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

Android 10 zmienia zakres informacji, które domyślnie zwraca getCameraCharacteristics() metoda. Aby uzyskać dostęp do metadanych, które mogą być specyficzne dla urządzenia i są zawarte w wartości zwracanej przez tę metodę, Twoja aplikacja musi mieć uprawnienie CAMERA.

Więcej informacji o tych zmianach znajdziesz w sekcji dotyczącej pól 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ć 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 dotyczące 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). Dany 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 WifiNetworkSpecifier w standardowym NetworkRequest obiekcie.
  • Aby dodać sieci Wi-Fi, które mają być brane pod uwagę przy zapewnianiu użytkownikowi dostępu do internetu, użyj WifiNetworkSuggestion obiektów. Możesz dodawać i usuwać sieci, które pojawiają się w oknie wyboru sieci do automatycznego łączenia, wywołując odpowiednio metody addNetworkSuggestions() i removeNetworkSuggestions(), . Te metody nie wymagają żadnych uprawnień do lokalizacji.

Niektóre interfejsy API połączeń telefonicznych, Bluetootha i Wi-Fi wymagają uprawnień do dokładnej lokalizacji

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 kolejnych sekcjach znajdziesz listę klas i metod, których to dotyczy.

Połączenia telefoniczne

Wi-Fi

Bluetooth

Uprawnienia

Ta sekcja zawiera informacje o aktualizacjach modelu uprawnień Androida.

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_OUTPUT i CAPTURE_SECURE_VIDEO_OUTPUT. Od Androida 10 te uprawnienia są dostępne tylko dla aplikacji z podpisem.

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

Sprawdzanie uprawnień w starszych aplikacjach

Jeśli Twoja aplikacja jest kierowana na Androida 5.1 (poziom API 22) lub starszego, użytkownicy zobaczą ekran uprawnień, gdy po raz pierwszy użyją Twojej aplikacji na urządzeniu z Androidem 10 lub nowszym, jak pokazano na ilustracji 1. Ten ekran umożliwia użytkownikom cofnięcie dostępu do uprawnień, które system wcześniej przyznał Twojej aplikacji podczas instalacji.

Zrzut ekranu okna
Ilustracja 1. Okno dialogowe wyświetlane użytkownikowi, które umożliwia sprawdzenie starszych uprawnień

Rozpoznawanie aktywności fizycznej

Android 10 wprowadza uprawnienie czasu działania android.permission.ACTIVITY_RECOGNITION 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 sposób wykorzystywania danych z czujników urządzenia w Ustawieniach.

Niektóre biblioteki w ramach Usług Google Play, np. interfejs Activity Recognition API i Google Fit API, nie udostępniają 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ą czujniki licznika kroków i detektora 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, jeśli spełnia ona wszystkie te warunki:

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

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

Grupy uprawnień usunięte z interfejsu

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