Prośby o uprawnienia chronią poufne informacje dostępne na urządzeniu i powinny być używane tylko wtedy, gdy dostęp do informacji jest niezbędny do działania aplikacji. W tym dokumencie znajdziesz wskazówki, jak uzyskać te same (lub lepsze) funkcje bez konieczności uzyskiwania dostępu do takich informacji. Nie jest to wyczerpujące omówienie sposobu działania uprawnień w systemie operacyjnym Android.
Więcej ogólnych informacji o uprawnieniach na Androida znajdziesz w artykule Omówienie uprawnień. Szczegółowe informacje o obsługiwaniu uprawnień w kodzie znajdziesz w artykule Wysyłanie żądania uprawnień aplikacji.
Uprawnienia w Androidzie 6.0 lub nowszym
W Androidzie 6.0 (poziom interfejsu API 23) i nowszych aplikacje mogą prosić o uprawnienia w czasie działania, a nie przed instalacją. Dzięki temu aplikacje mogą prosić o uprawnienia, gdy faktycznie wymagają usług lub danych chronionych przez usługi. Chociaż nie (koniecznie) zmieni to ogólnego zachowania aplikacji, spowoduje kilka zmian dotyczących sposobu obsługi danych wrażliwych użytkownika:
Wzbogacony kontekst sytuacyjny
W kontekście aplikacji użytkownicy są w czasie działania proszeni o dostęp do funkcji objętych tymi grupami uprawnień. Użytkownicy są bardziej wyczuleni na kontekst, w którym proszą o przyznanie uprawnień. Jeśli prośba o uprawnienie jest niezgodna z przeznaczeniem aplikacji, jeszcze ważniejsze jest podanie użytkownikowi szczegółowego wyjaśnienia, dlaczego prosisz o dane uprawnienie. W miarę możliwości należy wyjaśnić użytkownikowi, dlaczego potrzebujesz tych informacji, zarówno w momencie wysłania prośby, jak i w dalszej rozmowie, jeśli użytkownik odmówi.
Aby zwiększyć prawdopodobieństwo zaakceptowania prośby o uprawnienia, pytaj tylko wtedy, gdy wymagana jest konkretna funkcja. Na przykład możesz poprosić o dostęp do mikrofonu tylko wtedy, gdy użytkownik kliknie przycisk mikrofonu. Użytkownicy chętniej udzielają uprawnień, których oczekują.
Większa elastyczność w przyznawaniu uprawnień
Użytkownicy mogą odmówić dostępu do poszczególnych uprawnień w chwili, gdy o to poprosi, oraz w ustawieniach, ale nadal mogą być zaskoczeni, jeśli w rezultacie takie funkcje przestaną działać. Warto sprawdzać, ilu użytkowników odmawia udzielenia uprawnień (np.w przypadku Google Analytics). Dzięki temu możesz zmienić aplikację, aby nie zależała od tych uprawnień, lub lepiej wyjaśnić, dlaczego są one potrzebne do jej prawidłowego działania. Musisz też zadbać o to, aby aplikacja obsługiwała wyjątki, gdy użytkownicy odmówią przyznania uprawnień lub wyłączą je w ustawieniach.
Zwiększone obciążenie transakcyjne
Użytkownicy są proszeni o przyznanie dostępu poszczególnym grupom uprawnień, a nie grupom. Dlatego bardzo ważne jest, aby zminimalizować liczbę żądanych uprawnień. Zwiększa to obciążenie użytkownika koniecznością udzielenia uprawnień, a w konsekwencji zwiększa prawdopodobieństwo odrzucenia co najmniej jednego żądania.
Uprawnienia wymagające stania się domyślnym modułem obsługi
Niektóre aplikacje potrzebują dostępu do poufnych danych użytkownika związanych z rejestrami połączeń i SMS-ami. Jeśli chcesz poprosić o uprawnienia dotyczące rejestru połączeń i SMS-ów oraz opublikować aplikację w Google Play, musisz poprosić użytkownika o ustawienie aplikacji jako domyślnego modułu obsługi głównej funkcji systemu, zanim poprosisz o uprawnienia w czasie działania.
Więcej informacji o domyślnych modułach obsługi, w tym wskazówki dotyczące wyświetlania użytkownikom prompta domyślnego modułu obsługi, znajdziesz w przewodniku dotyczącym uprawnień używanych tylko w domyślnych modułach obsługi.
Poznaj biblioteki, z którymi pracujesz
Czasami biblioteki, których używasz w aplikacji, wymagają uprawnień. Biblioteki reklam i analityki mogą na przykład wymagać dostępu do grupy uprawnień LOCATION
, aby zaimplementować wymagane funkcje. Z punktu widzenia użytkownika prośba o uprawnienia pochodzi z aplikacji, a nie z biblioteki.
Podobnie jak użytkownicy wybierają aplikacje, które wymagają mniejszej liczby uprawnień do wykonywania tych samych funkcji, deweloperzy powinni sprawdzać swoje biblioteki i wybierać pakiety SDK innych firm, które nie wykorzystują niepotrzebnych uprawnień. Jeśli na przykład używasz biblioteki, która udostępnia funkcję lokalizacji, nie proś o uprawnienia FINE_LOCATION
, chyba że używasz funkcji kierowania na podstawie lokalizacji.
Ograniczanie dostępu w tle do lokalizacji
Gdy aplikacja działa w tle, dostęp do lokalizacji powinien być niezbędny do działania jej podstawowej funkcji i przynosić użytkownikom wyraźne korzyści.
Testowanie obu modeli uprawnień
W Androidzie 6.0 (poziom interfejsu API 23) i nowszych użytkownicy przyznają i odwołują uprawnienia aplikacji w czasie jej działania, a nie podczas instalacji. W związku z tym musisz przetestować aplikację w szerszym zakresie warunków. Przed Androidem 6.0 można było założyć, że jeśli aplikacja działa, ma wszystkie uprawnienia zadeklarowane w pliku manifestu. Użytkownik może teraz włączać i wyłączać uprawnienia dowolnej aplikacji niezależnie od poziomu interfejsu API. Należy przetestować aplikację, aby mieć pewność, że działa prawidłowo w różnych scenariuszach dotyczących uprawnień.
Na urządzeniach z poziomem interfejsu API 23 lub wyższym te wskazówki pomogą Ci znaleźć problemy z kodem związane z uprawnieniami:
- Sprawdź bieżące uprawnienia aplikacji i powiązane ścieżki kodu.
- testować przepływy danych użytkownika w usługach i danych chronionych uprawnieniami.
- Testowanie z różnymi kombinacjami przyznanych lub cofniętych uprawnień. Na przykład aplikacja aparatu może mieć w swoim manifeście listę
CAMERA
,READ_CONTACTS
iACCESS_FINE_LOCATION
. Aby mieć pewność, że aplikacja prawidłowo obsługuje wszystkie konfiguracje uprawnień, przetestuj ją z włączonymi i wyłączonymi uprawnieniami. - Aby zarządzać uprawnieniami z poziomu wiersza poleceń, użyj narzędzia adb:
- Wyświetl listę uprawnień i stanów według grupy:
$ adb shell pm list permissions -d -g
- Przyznaj lub anuluj co najmniej jedno uprawnienie:
$ adb shell pm [grant|revoke] <permission-name> ...
- Wyświetl listę uprawnień i stanów według grupy:
- Sprawdź, czy w aplikacji są usługi, które korzystają z uprawnień.
Dodatkowe materiały
- Wytyczne dotyczące stylu Material Design dotyczące uprawnień Androida
- Android Marshmallow 6.0: prośba o uprawnienia: film przedstawiający model uprawnień w Androidzie w czasie wykonywania aplikacji oraz właściwy sposób proszenia użytkowników o uprawnienia.
- Wyjaśnij, dlaczego aplikacja potrzebuje uprawnień
- Sprawdzone metody dotyczące unikalnych identyfikatorów