Spezielle Berechtigungen anfordern

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.

Abbildung 1: Bildschirm Spezieller App-Zugriff in den Systemeinstellungen

Beispiele für spezielle Berechtigungen:

  • Die Planung exakter Alarme.
  • Anzeigen und Überblenden anderer Apps
  • Auf alle Speicherdaten zugreifen.

Apps, für die eine spezielle Berechtigung deklariert wird, werden in den Systemeinstellungen auf der Seite Spezieller App-Zugriff angezeigt (Abbildung 1). Um der App eine spezielle Berechtigung zu gewähren, müssen Nutzer diese Seite aufrufen: Einstellungen > Apps > Spezieller App-Zugriff.

Workflow

So fordern Sie eine spezielle Berechtigung an:

  1. Deklariere in der Manifestdatei deiner App die speziellen Berechtigungen, die sie gegebenenfalls anfordern muss.
  2. 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.
  3. Warten Sie, bis der Nutzer die Aufgabe oder Aktion in Ihrer Anwendung aufruft, die Zugriff auf bestimmte private Nutzerdaten benötigt. Zu diesem Zeitpunkt kann Ihre App die spezielle Berechtigung anfordern, die für den Zugriff auf diese Daten erforderlich ist.
  4. Prüfen Sie, ob der Nutzer die spezielle Berechtigung, die Ihre App benötigt, bereits erteilt hat. Nutzen Sie dazu die benutzerdefinierte Prüffunktion jeder Berechtigung. Wenn diese Erlaubnis gewährt wird, kann Ihre Anwendung 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.
  5. Präsentiere dem Nutzer in einem UI-Element eine Begründung, aus der klar hervorgeht, auf welche Daten deine App zugreift und welche Vorteile die App dem Nutzer mit einer speziellen Berechtigung bieten kann. Da Ihre App Nutzer zum Erteilen der Berechtigung zu den Systemeinstellungen weiterleitet, sollten Sie außerdem eine kurze Anleitung hinzufügen, in der erklärt wird, wie Nutzer dort die Berechtigung 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 bestätigt hat, fahre mit dem nächsten Schritt fort.
  6. Fordere die spezielle Berechtigung an, die deine App für den Zugriff auf die privaten Nutzerdaten benötigt. Dazu gehört wahrscheinlich ein Intent für die entsprechende Seite in den Systemeinstellungen, auf der der Nutzer die Berechtigung erteilen kann. Im Gegensatz zu Laufzeitberechtigungen gibt es kein Pop-up-Berechtigungsdialogfeld.
  7. Prüfen Sie die Antwort des Nutzers in der Methode onResume() – unabhängig davon, ob er die spezielle Berechtigung gewährt oder abgelehnt hat.
  8. Wenn der Nutzer Ihrer App die Berechtigung erteilt hat, können Sie auf die privaten Nutzerdaten zugreifen. Wenn der Nutzer stattdessen die Berechtigung verweigert hat, verringere die Nutzung der App ordnungsgemäß, sodass der Nutzer ohne die Informationen, die durch diese Berechtigung geschützt werden, Funktionen zur Verfügung stellt.
Abbildung 2: Workflow für die Erklärung und Anforderung spezieller Berechtigungen auf Android-Geräten

Besondere Berechtigungen anfordern

Im Gegensatz zu Laufzeitberechtigungen muss der Nutzer in den Systemeinstellungen auf der Seite Spezieller App-Zugriff spezielle Berechtigungen erteilen. Apps können Nutzer mithilfe eines Intents dorthin weiterleiten. Dieser pausiert die App und startet die entsprechende Einstellungsseite für eine bestimmte Berechtigung. Nachdem der Nutzer zur App zurückgekehrt ist, kann sie prüfen, ob die Berechtigung in der Funktion onResume() gewährt wurde.

Der folgende Beispielcode zeigt, wie die spezielle Berechtigung SCHEDULE_EXACT_ALARMS von Nutzern angefordert wird:

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 Verarbeiten von 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 einige Best Practices und Überlegungen zum Anfordern spezieller Berechtigungen.

Jede Berechtigung hat ihre eigene Prüfmethode

Spezielle Berechtigungen funktionieren anders als Laufzeitberechtigungen. Sehen Sie sich stattdessen die Referenzseite für die permissions API an und verwenden Sie für jede spezielle Berechtigung die Funktionen der benutzerdefinierten Zugriffsprüfung. Beispiele hierfür sind AlarmManager#canScheduleExactAlarms() für die Berechtigung SCHEDULE_EXACT_ALARMS und Environment#isExternalStorageManager() für die Berechtigung MANAGE_EXTERNAL_STORAGE.

Anfrage im Kontext

Ähnlich wie Laufzeitberechtigungen sollten Anwendungen spezielle Berechtigungen im Kontext anfordern, wenn der Nutzer eine bestimmte Aktion anfordert, für die die Berechtigung erforderlich ist. Beispielsweise sollten Sie die Berechtigung SCHEDULE_EXACT_ALARMS erst anfordern, wenn der Nutzer den Versand einer E-Mail zu einer bestimmten Zeit plant.

Erkläre die Anfrage

Begründen Sie, bevor Sie zu den Systemeinstellungen 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. In dieser UI sollte klar erläutert werden, warum die App die Berechtigung benötigt und wie der Nutzer sie auf der Seite „Einstellungen“ erteilen sollte.