Sprawdzone metody dotyczące uprawnień aplikacji

Prośby o przyznanie uprawnień chronią informacje poufne dostępne z urządzenia i powinny być używane tylko wtedy, gdy dostęp do nich jest niezbędny do działania aplikacji. Ten dokument zawiera wskazówki, jak osiągnąć tę samą (lub lepszą) funkcję bez konieczności dostępu do takich informacji. Nie jest to wyczerpujące omówienie działania uprawnień w systemie operacyjnym Android.

Ogólne informacje o uprawnieniach Androida znajdziesz w artykule Omówienie uprawnień. Szczegółowe informacje o tym, jak korzystać z uprawnień w kodzie, znajdziesz w sekcji Wysyłanie prośby o uprawnienia aplikacji.

Uprawnienia w Androidzie 6.0 lub nowszym

W Androidzie 6.0 (poziom interfejsu API 23) i nowszych aplikacje mogą prosić użytkownika o przyznanie uprawnień w czasie działania, a nie przed instalacją. Dzięki temu aplikacje mogą prosić o uprawnienia, gdy rzeczywiście wymagają one usług lub danych chronionych przez te usługi. Nie zmienia to (niekoniecznie) ogólnego działania aplikacji, ale powoduje pewne zmiany związane ze sposobem przetwarzania poufnych danych użytkownika:

Rozszerzony kontekst sytuacyjny

W kontekście aplikacji użytkownicy są pytani w czasie działania o uprawnienia dostępu do funkcji objętych tymi grupami uprawnień. Użytkownicy są bardziej wyczuleni na kontekst, w którym prosi o uprawnienia. Jeśli dane, których dotyczy prośba, nie zgadzają się z przeznaczeniem aplikacji, jeszcze ważniejsze jest podanie mu szczegółowych wyjaśnień, dlaczego prosisz o dane uprawnienia. Jeśli to możliwe, wyjaśnij swoją prośbę zarówno w momencie przesyłania prośby, jak i w oknie dialogowym, gdy użytkownik odrzuci prośbę.

Aby zwiększyć prawdopodobieństwo zaakceptowania prośby o uprawnienia, wysyłaj takie prośby tylko wtedy, gdy wymagana jest konkretna funkcja. Na przykład wyświetlaj prośbę o dostęp do mikrofonu tylko wtedy, gdy użytkownik kliknie przycisk mikrofonu. Użytkownicy z większym prawdopodobieństwem przyznają oczekiwane uprawnienia.

Większa elastyczność przyznawania uprawnień

Użytkownicy mogą odmówić przyznania dostępu do poszczególnych uprawnień w momencie, gdy o nie proszą oraz w ustawieniach, ale nadal mogą być zaskoczeni, gdy funkcja przestanie działać. Warto monitorować, ilu użytkowników odmawia przyznania uprawnień (np. korzystając z Google Analytics), aby móc refaktoryzować aplikację, aby unikać tych uprawnień, lub lepiej wyjaśnić, dlaczego potrzebujesz tych uprawnień, aby aplikacja działała prawidłowo. Upewnij się też, że aplikacja obsługuje wyjątki, gdy użytkownicy odrzucają prośby o przyznanie uprawnień lub wyłączają uprawnienia w ustawieniach.

Większe obciążenie transakcyjne

Użytkownicy są proszeni o przyznanie dostępu grupom uprawnień pojedynczo, a nie jako zbiór. Dlatego tak ważne jest zminimalizowanie liczby wymaganych uprawnień. Zwiększa to obciążenie użytkowników związane z przyznawaniem uprawnień i tym samym zwiększa prawdopodobieństwo odrzucenia co najmniej 1 żądania.

Uprawnienia, które wymagają zostania domyślnym modułem obsługi

Niektóre aplikacje wymagają dostępu do poufnych informacji użytkownika związanych z rejestrami połączeń i SMS-ami. Jeśli chcesz poprosić użytkownika o uprawnienia dotyczące rejestrów połączeń i SMS-ów oraz opublikować aplikację w Sklepie Play, musisz najpierw poprosić użytkownika o ustawienie aplikacji jako domyślnego modułu obsługi głównej funkcji systemu, zanim poprosisz o te uprawnienia w czasie działania.

Więcej informacji na temat domyślnych modułów obsługi, w tym wskazówki dotyczące wyświetlania użytkownikom promptów domyślnego modułu obsługi, znajdziesz w przewodniku po uprawnieniach używanych tylko w domyślnych modułach obsługi.

Informacje o bibliotekach, z którymi pracujesz

Czasami uprawnienia są wymagane przez biblioteki, których używasz w aplikacji. Na przykład biblioteki reklam i analiz mogą wymagać dostępu do grupy uprawnień LOCATION w celu zaimplementowania wymaganej funkcji. Z punktu widzenia użytkownika prośba o uprawnienia pochodzi z aplikacji, a nie z biblioteki.

Tak jak użytkownicy wybierają aplikacje, które mają mniej uprawnień do obsługi tych samych funkcji, deweloperzy powinni przeglądać swoje biblioteki i wybierać zewnętrzne pakiety SDK, które nie wykorzystują niepotrzebnych uprawnień. Jeśli np. używasz biblioteki, która udostępnia funkcje związane z lokalizacją, upewnij się, że nie żądasz uprawnienia FINE_LOCATION, chyba że używasz kierowania na podstawie lokalizacji.

Ograniczanie dostępu do lokalizacji w tle

Gdy aplikacja działa w tle, dostęp do lokalizacji powinien być kluczowy dla jej głównej funkcji i przekazywać użytkownikom wyraźne korzyści.

Przetestuj oba modele uprawnień

Na Androidzie 6.0 (poziom interfejsu API 23) i nowszych użytkownicy przyznają i unieważniają uprawnienia aplikacji w czasie działania, a nie podczas jej instalowania. W efekcie musisz testować aplikację w większym zakresie warunków. W wersjach starszych niż 6.0 można było przyjąć, że jeśli aplikacja w ogóle jest uruchomiona, ma wszystkie uprawnienia deklarowane w jej manifeście. Teraz użytkownik może włączać i wyłączać uprawnienia dowolnej aplikacji, niezależnie od poziomu interfejsu API. Wykonaj testy, aby mieć pewność, że aplikacja działa prawidłowo w różnych scenariuszach uprawnień.

Poniższe wskazówki pomogą Ci znaleźć problemy z kodem związane z uprawnieniami na urządzeniach z interfejsem API na poziomie 23 lub wyższym:

  • Sprawdź bieżące uprawnienia aplikacji i powiązane ścieżki kodu.
  • Przetestuj przepływy użytkowników między usługami i danymi chronionymi uprawnieniami.
  • Przetestuj różne kombinacje udzielonych i unieważnionych uprawnień. Na przykład aplikacja aparatu może w swoim manifeście wymienić CAMERA, READ_CONTACTS i ACCESS_FINE_LOCATION. Przetestuj aplikację z każdym z tych uprawnień włączonych lub wyłączonych, aby mieć pewność, że dobrze sobie radzi ze wszystkimi konfiguracjami uprawnień.
  • Użyj narzędzia adb, aby zarządzać uprawnieniami z wiersza poleceń:
    • Wyświetl uprawnienia i stan według grupy:
      $ adb shell pm list permissions -d -g
    • Przyznaj lub cofnij co najmniej 1 uprawnienie:
      $ adb shell pm [grant|revoke] <permission-name> ...
  • Przeanalizuj aplikację pod kątem usług, które korzystają z uprawnień.

Dodatkowe materiały