Sprawdzone metody dotyczące uprawnień aplikacji

Prośby o przyznanie uprawnień chronią informacje poufne dostępne na urządzeniu i należy ich używać tylko wtedy, gdy dostęp do informacji jest niezbędny do działania aplikacji. Ten dokument zawiera wskazówki, dzięki którym możesz uzyskać taką samą (lub lepszą) funkcjonalność bez konieczności uzyskiwania dostępu do takich informacji. Nie jest to wyczerpująca omówienie tego, jak działają uprawnienia w systemie operacyjnym Android.

Bardziej ogólne informacje o uprawnieniach Androida znajdziesz w artykule Omówienie uprawnień. Szczegółowe informacje na temat korzystania z uprawnień w kodzie znajdziesz w sekcji Prośba o uprawnienia aplikacji.

Uprawnienia w Androidzie 6.0 i nowszych

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 faktycznie wymagają usług lub danych chronionych przez usługi. Nie zmienia to (koniecznie) ogólnego działania aplikacji, ale powoduje kilka zmian związanych ze sposobem postępowania z poufnymi danymi użytkownika:

Większy kontekst sytuacyjny

W trakcie działania aplikacji użytkownicy są proszeni o przyznanie im dostępu do funkcji objętych tymi grupami uprawnień. Użytkownicy są bardziej wyczuleni na kontekst, w którym prosisz 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. Jeśli to możliwe, wyjaśnij swoje żądanie zarówno w momencie, jak i w oknie, w którym zostało przesłane, i w oknie, gdy użytkownik je odrzuca.

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

Większa elastyczność przyznawania uprawnień

Użytkownicy mogą odmówić dostępu do poszczególnych uprawnień w momencie, gdy o to poprosi, oraz w ustawieniach, ale nadal mogą być zaskoczeni, jeśli w rezultacie takie funkcje przestaną działać. Dobrym pomysłem jest monitorowanie liczby użytkowników, którzy odmawiają przyznania uprawnień (np. korzystających z Google Analytics), aby móc albo przeprowadzić refaktoryzację aplikacji, by uniknąć korzystania z tych uprawnień, lub lepiej wyjaśnić, dlaczego te uprawnienia są potrzebne, aby aplikacja działała prawidłowo. Dopilnuj też, aby aplikacja obsługiwała wyjątki, gdy użytkownicy odrzucają prośby o przyznanie uprawnień lub wyłączają uprawnienia w ustawieniach.

Zwiększone obciążenie transakcyjne

Użytkownicy są proszeni o przyznanie dostępu poszczególnym grupom uprawnień, a nie grupom. Dlatego niezwykle ważne jest zminimalizowanie liczby uprawnień, których wymagasz. Zwiększa to obciążenie użytkownika związane z przyznawaniem uprawnień, a tym samym prawdopodobieństwo odrzucenia co najmniej 1 żądania.

Uprawnienia, które wymagają ustawienia się jako domyślny moduł 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 rejestrów połączeń i SMS-ów oraz opublikować aplikację w Sklepie Play, poproś użytkownika o ustawienie aplikacji jako domyślnego modułu obsługi podstawowej funkcji systemu, zanim poprosi o te uprawnienia w czasie działania.

Więcej informacji o domyślnych modułach obsługi, w tym wskazówki na temat 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 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. Jednak z punktu widzenia użytkownika prośba o przyznanie uprawnienia pochodzi z aplikacji, a nie z biblioteki.

Podobnie jak użytkownicy wybierają aplikacje, które do tej samej funkcji używają mniejszych uprawnień, deweloperzy powinni przejrzeć swoje biblioteki i wybrać pakiety SDK innych firm, które nie używają zbędnych uprawnień. Jeśli na przykład korzystasz z biblioteki, która udostępnia funkcję lokalizacji, nie wysyłaj prośby o uprawnienie FINE_LOCATION, chyba że korzystasz z funkcji kierowania na podstawie lokalizacji.

Ograniczanie dostępu w tle do lokalizacji

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

Testowanie obu modeli uprawnień

W Androidzie 6.0 (poziom interfejsu API 23) i nowszych uprawnienia aplikacji są przyznawane i unieważniane w czasie działania, a nie podczas instalowania aplikacji. W związku z tym musisz testować aplikację w większej liczbie warunków. Przed Androidem 6.0 można było przyjąć, że jeśli aplikacja w ogóle jest uruchomiona, ma wszystkie uprawnienia deklarowane w pliku manifestu. Teraz użytkownik może włączać i wyłączać uprawnienia dla dowolnej aplikacji niezależnie od poziomu interfejsu API. Przeprowadź test, aby sprawdzić, czy aplikacja działa poprawnie w przypadku różnych scenariuszy uprawnień.

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

  • Zidentyfikuj aktualne uprawnienia aplikacji i powiązane ścieżki kodu.
  • Testowanie przepływów użytkowników między usługami i danymi chronionymi uprawnieniami.
  • Testuj różne kombinacje uprawnień przyznanych lub unieważnionych. Na przykład aplikacja aparatu może mieć w swoim manifeście listę CAMERA, READ_CONTACTS i ACCESS_FINE_LOCATION. Aby mieć pewność, że aplikacja bez problemu radzi sobie ze wszystkimi konfiguracjami uprawnień, przetestuj ją, włączając i wyłączając wszystkie te uprawnienia.
  • Aby zarządzać uprawnieniami z poziomu wiersza poleceń, użyj narzędzia adb:
    • Wyświetl listę uprawnień i stanu według grupy:
      $ adb shell pm list permissions -d -g
    • Przyznaj lub anuluj 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