Poproś o uprawnienia specjalne

Specjalne uprawnienie chroni dostęp do zasobów systemowych, które są szczególnie poufne lub niezwiązane bezpośrednio z prywatnością użytkownika. Te uprawnienia są inny niż czas instalacji uprawnienia i środowisko wykonawcze uprawnienia.

Rys. 1. Ekran Aplikacje ze specjalnym dostępem w systemie ustawieniach.

Oto kilka przykładów uprawnień specjalnych:

  • Planuję alarmy precyzyjne.
  • wyświetlanie i rysowanie nad innymi aplikacjami;
  • Dostęp do wszystkich danych pamięci masowej.

Aplikacje, które zadeklarują uprawnienia specjalne, są widoczne w sekcji Aplikacje ze specjalnym dostępem w ustawieniach systemu (ilustracja 1). Aby przyznać aplikacji specjalne uprawnienia, musi przejść do tej strony: Ustawienia > Aplikacje > Aplikacje ze specjalnym dostępem.

Workflow

Aby poprosić o specjalne uprawnienia:

  1. W pliku manifestu aplikacji zadeklaruj specjalny tag uprawnienia, których może potrzebować aplikacja użytkownika.
  2. Zaprojektuj aplikację tak, aby UX kojarzył się z konkretnymi działaniami w niej. z określonymi uprawnieniami specjalnymi. Poinformuj użytkowników, jakie działania mogą aplikacji i wymagających od nich zgody na dostęp do prywatnych danych użytkownika.
  3. Poczekaj na wywołanie przez użytkownika działanie w aplikacji, które wymaga dostępu do określonego użytkownika prywatnego. i skalowalnych danych. Aplikacja może wtedy poprosić o specjalne uprawnienie: niezbędne do uzyskania dostępu do tych danych.
  4. Sprawdź, czy użytkownik przyznał już specjalne uprawnienie wymaga aplikacji. Aby to zrobić, skorzystaj z niestandardowego sprawdzania uprawnień . Gdy przyznasz te uprawnienia, aplikacja będzie miała dostęp do prywatnego użytkownika i skalowalnych danych. Jeśli nie, przejdź do następnego. Uwaga: musisz sprawdzić, czy musisz przyznać te uprawnienia za każdym razem, gdy wykonujesz operację, która wymaga uprawnienia.
  5. Przedstaw użytkownikowi uzasadnienie w elemencie interfejsu, wyjaśnia, do jakich danych próbuje uzyskać dostęp aplikacja i jakie są jej zalety. mogą go udostępnić użytkownikowi, przyznając mu specjalne uprawnienia. Ponadto bo aplikacja wysyła użytkowników do ustawień systemowych w celu przyznania tych uprawnień, dołącz krótkie instrukcje wyjaśniające, w jaki sposób użytkownicy mogą przyznać to uprawnienie tam. Interfejs z uzasadnieniem powinien dawać użytkownikowi wyraźną opcję zrezygnować z udzielania tego uprawnienia. Gdy użytkownik zaakceptuje przejdź do następnego kroku.
  6. Poproś o specjalne uprawnienia, których aplikacja wymaga dostępu. prywatnych danych użytkownika. Prawdopodobnie wiąże się to z intencjami w odniesieniu do odpowiednich w ustawieniach systemu, gdzie użytkownik może przyznać to uprawnienie. Nie podoba mi się uprawnienia środowiska wykonawczego, brak wyskakującego okienka z prośbą o przyznanie uprawnień.
  7. Sprawdź odpowiedź użytkownika – czy przyznał on, czy odmówił uprawnienia – w metodzie onResume().
  8. Jeśli użytkownik przyznał Twojej aplikacji odpowiednie uprawnienia, możesz korzystać z prywatnego danych użytkownika. Jeśli użytkownik odmówił przyznania uprawnień, korzystanie z aplikacji, udostępnia użytkownikowi funkcje bez informacji, które chronione tymi uprawnieniami.
.
Rys. 2: Przebieg procedury deklarowania i przesyłania żądań specjalnych uprawnień w Androidzie.

Prośba o specjalne uprawnienia

W przeciwieństwie do uprawnień środowiska wykonawczego plik użytkownik musi przyznać specjalne uprawnienia ze strony Aplikacje ze specjalnym dostępem w ustawieniach systemu. Aplikacje mogą kierować do niej użytkowników za pomocą intencji, która ją wstrzymuje i uruchamia stronę ustawień z przyznanym uprawnieniem specjalnym. Gdy użytkownik wróci do aplikacji, aplikacja może sprawdzić, czy uprawnienia zostały przyznane. przyznane w funkcji onResume().

Poniższy przykładowy kod pokazuje, jak wysłać żądanie SCHEDULE_EXACT_ALARMS specjalne uprawnienia użytkowników:

val alarmManager = getSystemService<AlarmManager>()!!
when {
   // if permission is granted, proceed with scheduling exact alarms…
   alarmManager.canScheduleExactAlarms() -> {
       alarmManager.setExact(...)
   }
   else -> {
       // ask users to grant the permission in the corresponding settings page
       startActivity(Intent(ACTION_REQUEST_SCHEDULE_EXACT_ALARM))
   }
}

Przykładowy kod do sprawdzania uprawnień i obsługi decyzji użytkownika w onResume():

override fun onResume() {
   // ...

   if (alarmManager.canScheduleExactAlarms()) {
       // proceed with the action (setting exact alarms)
       alarmManager.setExact(...)
   }
   else {
       // permission not yet approved. Display user notice and gracefully degrade
       your app experience.
       alarmManager.setWindow(...)
   }
}

Sprawdzone metody i wskazówki

W sekcjach poniżej znajdziesz sprawdzone metody i kwestie, które warto wziąć pod uwagę, prosząc o specjalne uprawnienia.

Każde uprawnienie ma własną metodę sprawdzania

Uprawnienia specjalne działają inaczej niż środowisko wykonawcze . Zamiast tego: zapoznaj się z dokumentacją API uprawnień i użyj niestandardowego sprawdzania dostępu dla poszczególnych uprawnień specjalnych. Przykłady: AlarmManager#canScheduleExactAlarms() dla wartości SCHEDULE_EXACT_ALARMS uprawnienia i Environment#isExternalStorageManager() dla wartości MANAGE_EXTERNAL_STORAGE uprawnienia.

Prośba w kontekście

Aplikacje powinny prosić o specjalne uprawnienia, podobnie jak w przypadku czasu działania. w kontekście, gdy użytkownik zażąda określonego działania, które wymaga uprawnienia. Na przykład poczekaj z prośbą o uprawnienie SCHEDULE_EXACT_ALARMS dopóki użytkownik nie zaplanuje wysłania e-maila w określonym czasie.

Wyjaśnij żądanie

Podaj uzasadnienie, zanim przejdziesz do ustawień systemu. Ponieważ użytkownicy opuszczają tymczasowo, aby przyznać specjalne uprawnienia, wyświetlić interfejs w aplikacji, zanim uruchomić intencję na stronie Special App Access (specjalny dostęp do aplikacji) w ustawieniach systemowych. Ten interfejs powinna jasno wyjaśniać, dlaczego aplikacja potrzebuje tych uprawnień i jak użytkownik powinien na stronie ustawień.