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.
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:
- W pliku manifestu aplikacji zadeklaruj specjalny tag uprawnienia, których może potrzebować aplikacja użytkownika.
- 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.
- 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.
- 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.
- 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.
- 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ń.
- Sprawdź odpowiedź użytkownika – czy przyznał on, czy odmówił
uprawnienia – w metodzie
onResume()
. - 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.
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ń.