Zminimalizuj liczbę próśb o przyznanie uprawnień

W ramach poprawy jakości aplikacji i ochrony prywatności użytkowników zalecamy ograniczenie wykorzystania uprawnień w aplikacjach. Pomaga to użytkownikom odkrywać i używać aplikacji wysokiej jakości, które zapewniają bezpieczne środowisko.

Prośby o uprawnienia od użytkowników przerywają ich działanie, a użytkownicy mogą odrzucić Twoją prośbę. Dodatkowo za każdym razem, gdy zadeklarujesz nowe uprawnienie, musisz sprawdzić, w jaki sposób Twoja aplikacja prosi o dane użytkownika i je udostępnia. Niektóre szczególnie wrażliwe uprawnienia i interfejsy API wymagają wyjaśnienia w aplikacji, w jaki sposób uzyskiwany jest dostęp do danych oraz jak są one zbierane, wykorzystywane i udostępniane.

Istnieje wiele alternatywnych sposobów na ograniczenie wykorzystania uprawnień:

  • Zadeklaruj uprawnienia, które zapewniają informacje o przybliżonej lokalizacji, a nie o dokładnej, jeśli Twoja aplikacja potrzebuje tylko przybliżonej lokalizacji.
  • wywoływać interfejsy API, które umożliwiają aplikacji wykonywanie żądanych funkcji bez deklarowania uprawnień;
  • wywoływać określone intencje lub moduły obsługi zdarzeń w celu wykonywania funkcji zamiast deklarowania uprawnień;
  • System udostępnia wbudowane kontrakty dla różnych operacji na plikach, a także obsługuje kontrakty niestandardowe.

Jeśli musisz zadeklarować uprawnienie, zawsze respektuj decyzję użytkownika i zapewnij możliwość łagodnego ograniczenia funkcjonalności aplikacji.

Na tej stronie opisujemy kilka przypadków użycia, w których Twoja aplikacja może działać bez deklarowania potrzeby uzyskania jakichkolwiek uprawnień.

Pokaż miejsca w pobliżu

Aplikacja może potrzebować przybliżonej lokalizacji użytkownika. Jest to przydatne do wyświetlania informacji zależnych od lokalizacji, takich jak pobliskie restauracje.

W niektórych przypadkach wystarczy przybliżone oszacowanie lokalizacji urządzenia. W takich sytuacjach wykonaj jedną z tych czynności, w zależności od tego, jak często aplikacja potrzebuje informacji o lokalizacji:

  • Jeśli Twoja aplikacja często potrzebuje dostępu do lokalizacji, zadeklaruj uprawnienie ACCESS_COARSE_LOCATION. To uprawnienie umożliwia uzyskanie przybliżonej lokalizacji urządzenia na podstawie usług lokalizacyjnych, zgodnie z opisem w dokumentacji dotyczącej dokładności przybliżonej lokalizacji.
  • Jeśli Twoja aplikacja potrzebuje lokalizacji rzadziej lub tylko raz, poproś użytkownika o wpisanie adresu lub kodu pocztowego.

Inne przypadki użycia wymagają dokładniejszego oszacowania lokalizacji urządzenia. To jedyne sytuacje, w których można zadeklarować uprawnienie ACCESS_FINE_LOCATION.

Tworzenie plików i uzyskiwanie do nich dostępu

Android umożliwia tworzenie plików i uzyskiwanie do nich dostępu bez konieczności deklarowania uprawnień związanych z pamięcią lub czujnikami.

Otwieranie plików multimedialnych

Aplikacja może umożliwiać użytkownikom wybieranie zdjęć i filmów, np. jako załączników do wiadomości lub zdjęć profilowych.

Aby obsługiwać tę funkcję, użyj selektora zdjęć. Selektor zdjęć nie wymaga żadnych uprawnień w czasie działania. Gdy użytkownik wchodzi w interakcję z selektorem zdjęć, aby wybrać zdjęcia lub filmy do udostępnienia w aplikacji, system przyznaje tymczasowy dostęp do odczytu identyfikatora URI powiązanego z wybranymi plikami multimedialnymi.

Jeśli Twoja aplikacja musi mieć dostęp do plików multimedialnych bez używania selektora zdjęć, nie musisz deklarować żadnych uprawnień do przechowywania danych:

Otwieranie dokumentów

Aplikacja może wyświetlać dokumenty utworzone przez użytkownika w niej lub w innej aplikacji. Typowym przykładem jest plik tekstowy.

W takiej sytuacji zadeklaruj READ_EXTERNAL_STORAGE tylko w celu zapewnienia zgodności ze starszymi urządzeniami. Ustaw wartość android:maxSdkVersion na 28.

W zależności od tego, w której aplikacji utworzono dokument, wykonaj jedną z tych czynności:

Zrób zdjęcie

Użytkownicy mogą robić zdjęcia w Twojej aplikacji za pomocą wstępnie zainstalowanej aplikacji systemowej aparatu.

W takiej sytuacji nie deklaruj uprawnienia CAMERA. Zamiast tego wywołaj działanie intencji ACTION_IMAGE_CAPTURE.

Nagraj film

Użytkownicy mogą nagrywać filmy w Twojej aplikacji za pomocą wstępnie zainstalowanej aplikacji systemowej Aparat.

W takiej sytuacji nie deklaruj uprawnienia CAMERA. Zamiast tego wywołaj działanie intencji ACTION_VIDEO_CAPTURE.

Identyfikowanie urządzenia, na którym działa instancja aplikacji

Konkretna instancja aplikacji może potrzebować informacji o urządzeniu, na którym jest uruchomiona. Jest to przydatne w przypadku aplikacji, które mają ustawienia lub wiadomości specyficzne dla danego urządzenia, np. różne playlisty na urządzenia telewizyjne i urządzenia do noszenia.

W takiej sytuacji nie uzyskuj dostępu do numeru IMEI urządzenia bezpośrednio. W Androidzie 10 i nowszych nie jest to możliwe. Zamiast tego wykonaj jedną z tych czynności:

  • Pobierz unikalny identyfikator urządzenia dla instancji aplikacji za pomocą biblioteki Instance ID.
  • Utwórz własny identyfikator ograniczony do pamięci aplikacji. używać podstawowych funkcji systemowych, takich jak randomUUID();

Parowanie z urządzeniem przez Bluetooth

Aplikacja może oferować lepsze wrażenia, przesyłając dane do innego urządzenia przez Bluetooth.

Aby obsługiwać tę funkcję, nie deklaruj uprawnień ACCESS_FINE_LOCATION, ACCESS_COARSE_LOCATIION ani BLUETOOTH_ADMIN. Zamiast tego użyj parowania urządzenia towarzyszącego.

Automatyczne wpisywanie numeru karty płatniczej

Usługi Google Play oferują bibliotekę, która umożliwia automatyczne wpisywanie numeru karty płatniczej. Zamiast deklarować uprawnienie CAMERA możesz użyć biblioteki rozpoznawania kart debetowych i kredytowych.

Zarządzanie połączeniami telefonicznymi i SMS-ami

Usługi Androida i Google Play udostępniają biblioteki, które umożliwiają zarządzanie połączeniami telefonicznymi i SMS-ami bez konieczności deklarowania uprawnień związanych z połączeniami telefonicznymi lub SMS-ami.

Automatyczne wpisywanie jednorazowego kodu dostępu

Aby usprawnić proces uwierzytelniania dwuskładnikowego, aplikacja może automatycznie wpisywać jednorazowe hasło wysyłane na urządzenie użytkownika w celu potwierdzenia jego tożsamości.

Aby obsługiwać tę funkcję na urządzeniach z Usługami Google Play, nie deklaruj uprawnienia READ_SMS. Zamiast tego użyj interfejsu SMS Retriever API.

Na innych urządzeniach, jeśli Twoja aplikacja jest przeznaczona na Androida 8.0 (poziom interfejsu API 26) lub nowszego, wygeneruj token specyficzny dla aplikacji za pomocą funkcji createAppSpecificSmsToken(). Przekaż ten token do innej aplikacji lub usługi, która może wysłać SMS-a weryfikacyjnego.

Automatyczne wpisywanie numeru telefonu użytkownika

Aby zapewnić bardziej efektywną sprzedaż lub pomoc, aplikacja może umożliwiać użytkownikowi automatyczne wpisywanie numeru telefonu urządzenia.

Aby obsługiwać tę funkcję na urządzeniach z Usługami Google Play, nie deklaruj uprawnienia READ_PHONE_STATE. Zamiast tego użyj biblioteki Phone Number Hint.

Filtrowanie połączeń telefonicznych

Aby zminimalizować niepotrzebne przerwy w pracy użytkownika, aplikacja może filtrować połączenia telefoniczne pod kątem spamu.

Aby obsługiwać tę funkcję, nie deklaruj uprawnienia READ_PHONE_STATE. Zamiast tego używaj interfejsu API CallScreeningService.

Wykonywanie połączeń telefonicznych

Aplikacja może umożliwiać nawiązywanie połączeń telefonicznych przez kliknięcie informacji o kontakcie.

Aby obsługiwać tę funkcję, użyj działania intencji ACTION_DIAL zamiast działania ACTION_CALL. ACTION_CALL wymaga uprawnienia CALL_PHONE, które jest przyznawane w momencie instalacji. Uniemożliwia to instalowanie aplikacji na urządzeniach, które nie mogą wykonywać połączeń, np. na niektórych tabletach.

Wstrzymywanie multimediów, gdy aplikacja jest przerywana

Jeśli użytkownik odbierze połączenie telefoniczne lub włączy alarm, aplikacja powinna wstrzymać odtwarzanie multimediów do momentu, gdy odzyska fokus audio.

Aby obsługiwać tę funkcję, nie deklaruj uprawnienia READ_PHONE_STATE. Zamiast tego zaimplementuj procedurę obsługi zdarzeń onAudioFocusChange(), która jest uruchamiana automatycznie, gdy system zmienia fokus dźwięku. Dowiedz się więcej o implementacji fokusu audio.

Skanowanie kodów kreskowych

Android obsługuje interfejs Google Code Scanner API, który jest częścią Usług Google Play i umożliwia dekodowanie kodów kreskowych bez deklarowania uprawnień do aparatu. Ten interfejs API pomaga chronić prywatność użytkowników i zmniejsza prawdopodobieństwo, że będziesz musiał utworzyć niestandardowy interfejs do skanowania kodów kreskowych.

Interfejs API skanuje kod kreskowy i zwraca do aplikacji tylko wyniki skanowania. Obrazy są przetwarzane na urządzeniu, a Google nie przechowuje żadnych danych ani wyników skanowania.

Jeśli Twoja aplikacja musi obsługiwać złożone przypadki użycia lub formaty kodów kreskowych albo wymaga niestandardowego interfejsu, użyj interfejsu API do skanowania kodów kreskowych ML Kit.

Resetowanie nieużywanych uprawnień

Android udostępnia kilka sposobów na zresetowanie nieużywanych uprawnień środowiska wykonawczego do ich domyślnego stanu odmowy.

Przeczytaj wskazówki dotyczące projektowania.

Wysyłanie prośby o uprawnienia w czasie działania

Gdy stwierdzisz, że Twoja aplikacja musi deklarować uprawnienia w czasie działania i o nie prosić, wykonaj odpowiednie czynności.

Przeczytaj wskazówki dotyczące projektowania.

Wyjaśnij, dlaczego Twoja aplikacja potrzebuje uprawnień

Użycie requestPermissions() powoduje wyświetlenie okna z informacją o tym, jakich uprawnień chce używać Twoja aplikacja, ale nie wyjaśnia, dlaczego. Może to być dla użytkownika niezrozumiałe.

Więcej informacji i zaleceń dotyczących tego, jak i kiedy wyświetlać to okno, znajdziesz w tym przewodniku.

Obsługa odmów przyznania uprawnień

Aplikacja powinna pomagać użytkownikom zrozumieć konsekwencje odmowy przyznania uprawnień przed podjęciem decyzji i po jej podjęciu.

Przeczytaj wskazówki dotyczące projektowania.