Eine spezielle Berechtigung schützt den Zugriff auf Systemressourcen, die besonders sensibel sind oder nicht direkt mit dem Datenschutz für Nutzer in Verbindung stehen. Diese Berechtigungen unterscheiden sich von Berechtigungen zur Installationszeit und Laufzeitberechtigungen.
Beispiele für spezielle Berechtigungen:
- Exakte Wecker stellen
- Anzeigen und Überblenden anderer Apps
- Zugriff auf alle Speicherdaten
Apps, die eine spezielle Berechtigung angeben, werden in den Systemeinstellungen auf der Seite Spezieller App-Zugriff angezeigt (Abbildung 1). Wenn ein Nutzer der App eine spezielle Berechtigung gewähren möchte, muss er diese Seite aufrufen: Einstellungen > Apps > Spezieller App-Zugriff.
Workflow
So beantragen Sie eine spezielle Berechtigung:
- Deklarieren Sie in der Manifestdatei Ihrer App die besonderen Berechtigungen, die Ihre App möglicherweise anfordern muss.
- Gestalten Sie die UX Ihrer App so, dass bestimmte Aktionen in Ihrer App mit bestimmten speziellen Berechtigungen verknüpft sind. Teile den Nutzern mit, bei welchen Aktionen sie möglicherweise der App die Berechtigung erteilen müssen, auf private Nutzerdaten zuzugreifen.
- Warten Sie, bis der Nutzer die Aufgabe oder Aktion in Ihrer Anwendung aufruft, die Zugriff auf bestimmte private Nutzerdaten benötigt. Ihre App kann dann die spezielle Berechtigung anfordern, die für den Zugriff auf diese Daten erforderlich ist.
- Prüfe, ob der Nutzer die spezielle Berechtigung, die deine App erfordert, bereits erteilt hat. Verwenden Sie dazu die benutzerdefinierte Prüffunktion für jede Berechtigung. Wenn die Berechtigung gewährt wird, kann Ihre App auf die privaten Nutzerdaten zugreifen. Sollte dies nicht der Fall sein, fahren Sie mit dem nächsten Schritt fort. Hinweis: Sie müssen jedes Mal prüfen, ob Sie die Berechtigung haben, wenn Sie einen Vorgang ausführen, für den diese Berechtigung erforderlich ist.
- Erläutern Sie dem Nutzer in einem UI-Element, auf welche Daten Ihre App zugreifen möchte und welche Vorteile die App für den Nutzer bietet, wenn er die spezielle Berechtigung gewährt. Da Ihre App Nutzer zur Erteilung der Berechtigung an die Systemeinstellungen weiterleitet, sollten Sie außerdem eine kurze Anleitung dazu hinzufügen, wie Nutzer die Berechtigung dort erteilen können. Die Begründungs-UI sollte dem Nutzer eine klare Option bieten, die Erteilung der Berechtigung zu widerrufen. Nachdem der Nutzer die Begründung akzeptiert hat, fahren Sie mit dem nächsten Schritt fort.
- Anfordern der Sonderberechtigung, die Ihre App für den Zugriff auf die privaten Nutzerdaten benötigt. Dazu gehört wahrscheinlich eine Intent-Anfrage an die entsprechende Seite in den Systemeinstellungen, auf der der Nutzer die Berechtigung gewähren kann. Im Gegensatz zu Laufzeitberechtigungen gibt es kein Pop-up-Berechtigungsdialogfeld.
- Prüfen Sie in der
onResume()
-Methode, ob der Nutzer die spezielle Berechtigung gewährt oder abgelehnt hat. - Wenn der Nutzer Ihrer App die Berechtigung erteilt hat, können Sie auf die privaten Nutzerdaten zugreifen. Wenn der Nutzer die Berechtigung stattdessen abgelehnt hat, reduzieren Sie die Funktionalität Ihrer App, sodass der Nutzer Funktionen ohne die durch diese Berechtigung geschützten Daten nutzen kann.
Besondere Berechtigungen anfordern
Im Gegensatz zu Laufzeitberechtigungen müssen Nutzer spezielle Berechtigungen auf der Seite Spezieller App-Zugriff in den Systemeinstellungen gewähren. Apps können Nutzer über einen Intent dorthin weiterleiten. Dadurch wird die App pausiert und die entsprechende Seite mit den Einstellungen für eine bestimmte Berechtigung geöffnet.
Wenn der Nutzer zur App zurückkehrt, kann die App prüfen, ob die Berechtigung in der onResume()
-Funktion gewährt wurde.
Im folgenden Codebeispiel wird gezeigt, wie Sie die spezielle Berechtigung SCHEDULE_EXACT_ALARMS
von Nutzern anfordern:
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))
}
}
Beispielcode zum Prüfen der Berechtigung und zum Umgang mit Nutzerentscheidungen in 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(...)
}
}
Best Practices und Tipps
In den folgenden Abschnitten finden Sie Best Practices und Hinweise zum Anfordern besonderer Berechtigungen.
Für jede Berechtigung gibt es eine eigene Prüfmethode.
Spezielle Berechtigungen funktionieren anders als Laufzeitberechtigungen. Lesen Sie stattdessen die Referenzseite zur Berechtigungs-API und verwenden Sie die Funktionen zur benutzerdefinierten Zugriffsprüfung für jede spezielle Berechtigung. Beispiele sind AlarmManager#canScheduleExactAlarms()
für die Berechtigung SCHEDULE_EXACT_ALARMS
und Environment#isExternalStorageManager()
für die Berechtigung MANAGE_EXTERNAL_STORAGE
.
Kontextbezogene Übersetzung anfordern
Ähnlich wie bei Laufzeitberechtigungen sollten Apps spezielle Berechtigungen kontextbezogen anfordern, wenn der Nutzer eine bestimmte Aktion anfordert, für die die Berechtigung erforderlich ist. Warten Sie beispielsweise, bis der Nutzer eine E-Mail für eine bestimmte Uhrzeit geplant hat, bevor Sie die Berechtigung SCHEDULE_EXACT_ALARMS
anfordern.
Erkläre die Anfrage
Geben Sie einen Grund an, bevor Sie zur Systemeinstellung weiterleiten. Da Nutzer die App vorübergehend verlassen, um spezielle Berechtigungen zu erteilen, sollten Sie eine In-App-UI anzeigen, bevor Sie den Intent in den Systemeinstellungen auf der Seite Special App Access (Spezieller App-Zugriff) aufrufen. Auf dieser Benutzeroberfläche sollte klar erklärt werden, warum die App die Berechtigung benötigt und wie der Nutzer sie auf der Seite „Einstellungen“ gewähren kann.