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 będą mieli większą przejrzystość i kontrolę nad swoimi danymi oraz możliwościami, które udostępniają aplikacjom. Te funkcje mogą powodować, że określone zachowania lub dane, których używa Twoja aplikacja, będą działać inaczej niż w starszych wersjach platformy. Wpływ na Twoją aplikację powinien być minimalny, jeśli stosuje ona aktualne najlepsze praktyki dotyczące 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 lub nowszego mają ograniczony dostęp do pamięci zewnętrznej lub ograniczoną pamięć. Takie aplikacje mogą odczytywać te typy plików na zewnętrznym urządzeniu pamięci masowej bez konieczności żądania od użytkownika żadnych uprawnień dotyczących pamięci:

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 poradnikami dotyczącymi zarządzania plikami w pamięci zewnętrznej oraz dostępu do plików multimedialnych i ich modyfikacji.

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 aplikacji podczas działania 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:

  • Aktywność należąca do aplikacji jest widoczna.
  • 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 na pierwszym planie mogą kontynuować działania wywoływane 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 tej tabeli:

Tabela 1. Zmiany stanu 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 uprawnienia 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 o pobieraniu lokalizacji urządzenia, gdy aplikacja działa w tle, znajdziesz w przewodniku o 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 jej nie dotyczą.

Więcej informacji o zalecanej alternatywie dla uruchamiania działań w tle znajdziesz w przewodniku o ostrzeganiu 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

Od Androida 10 platforma nie śledzi informacji o powiązaniach 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.

losowanie 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:

  • Uzyskaj losowy adres 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 /proc/net, który zawiera informacje o stanie sieci urządzenia. Aplikacje, które potrzebują dostępu do tych informacji, takie jak 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ń, a i tak próbujesz uzyskać informacje o identyfikatorach nieda się 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ąpi błąd SecurityException.

W wielu przypadkach nie trzeba stosować nieusuwanych identyfikatorów urządzeń. Jeśli na przykład Twoja aplikacja używa identyfikatorów urządzenia, których nie można zresetować, do śledzenia reklam lub analizowania użytkowników, w przypadku tych konkretnych zastosowań 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) lub 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 Konfigurowanie hostów USB.

Kamera i łączność

Ta sekcja zawiera listę zmian dotyczących interfejsów API metadanych i połączeń aparatu.

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 tej metody.

Więcej informacji o tych zmianach znajdziesz w sekcji Pola dotyczące kamery, 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, aby użytkownicy mogli włączać i wyłączać Wi-Fi, użyj panelu ustawień.

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

Aby chronić prywatność użytkowników, ręczna konfiguracja listy sieci Wi-Fi jest ograniczona do aplikacji systemowych i sterowników zasad urządzenia (DPC). 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 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 obiektu WifiNetworkSpecifier w obiekcie standardowym NetworkRequest.
  • Aby dodać sieci Wi-Fi, które mogą być brane pod uwagę jako źródło dostępu do internetu dla użytkownika, 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 przeznaczona na Androida 10 lub nowszego, musi mieć uprawnienie ACCESS_FINE_LOCATION, aby korzystać z kilku metod interfejsów 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ą uzyskać dostęp do zawartości ekranu urządzenia, powinny używać interfejsu API MediaProjection, który wyświetla prośbę o zgodę użytkownika.

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ą cofnąć uprawnienia, które system przyznał aplikacji w momencie instalacji.

Zrzut ekranu okna
Rysunek 1. Okno dla użytkownika umożliwiające sprawdzenie starszych uprawnień

Rozpoznawanie aktywności fizycznej

Android 10 wprowadza uprawnienie android.permission.ACTIVITY_RECOGNITION 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 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ższego, 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

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