Spezielle Berechtigungen anfordern

Eine spezielle Berechtigung schützt den Zugriff auf Systemressourcen, die besonders vertraulich sind oder nicht direkt mit dem Datenschutz für Nutzer zusammenhängen. Diese Berechtigungen unterscheiden sich von Berechtigungen zur Installationszeit und Laufzeitberechtigungen.

Abbildung 1: Der Bildschirm Spezieller App-Zugriff in den Systemeinstellungen.

Beispiele für spezielle Berechtigungen:

  • Die Planung exakter Alarme.
  • Anzeigen und Überblenden anderer Apps
  • Zugriff auf alle Speicherdaten

Apps, die eine spezielle Berechtigung deklarieren, 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 die folgende Seite aufrufen: Einstellungen > Apps > Spezieller App-Zugriff.

Workflow

So fordern Sie eine spezielle Berechtigung an:

  1. Deklarieren Sie in der Manifestdatei Ihrer Anwendung die speziellen Berechtigungen, die Ihre Anwendung möglicherweise anfordern muss.
  2. Gestalten Sie Ihre App so, dass bestimmten Aktionen in Ihrer App spezielle Berechtigungen zugewiesen sind. Teilen Sie Nutzern mit, für welche Aktionen sie Ihrer App möglicherweise die Berechtigung erteilen müssen, auf private Nutzerdaten zuzugreifen.
  3. Warten Sie, bis der Nutzer die Aufgabe oder Aktion in Ihrer App aufruft, die Zugriff auf bestimmte private Nutzerdaten benötigt. Dann 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 bereits gewährt hat, die für Ihre App erforderlich ist. Verwenden Sie dazu die benutzerdefinierte Prüffunktion jeder Berechtigung. Wenn die Berechtigung erteilt 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. Zeige dem Nutzer eine Begründung in einem UI-Element, aus der klar hervorgeht, auf welche Daten deine App zugreifen möchte und welche Vorteile die App dem Nutzer mit der speziellen Berechtigung bieten kann. Da Ihre App Nutzer zu den Systemeinstellungen weiterleitet, um die Berechtigung zu gewähren, sollten Sie darüber hinaus kurze Anweisungen hinzufügen, in denen beschrieben wird, wie Nutzer die Berechtigung dort erteilen können. Die Benutzeroberfläche für die Begründung sollte eine klare Option für den Nutzer enthalten, um die Erteilung der Berechtigung abzulehnen. Nachdem der Nutzer die Begründung bestätigt hat, fahre mit dem nächsten Schritt fort.
  6. Fordern Sie die spezielle Berechtigung an, die Ihre 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, in dem der Nutzer die Berechtigung erteilen kann. Im Gegensatz zu Laufzeitberechtigungen gibt es kein Pop-up-Berechtigungsdialogfeld.
  7. Prüfen Sie in der Methode onResume() die Antwort des Nutzers, ob er die Sonderberechtigung gewährt oder abgelehnt hat.
  8. Wenn der Nutzer die Berechtigung für Ihre App erteilt hat, können Sie auf die privaten Nutzerdaten zugreifen. Wenn der Nutzer stattdessen die Berechtigung verweigert hat, sorgen Sie dafür, dass Ihre App nicht richtig funktioniert, sodass sie Funktionen für den Nutzer ohne die Informationen bietet, die durch diese Berechtigung geschützt sind.
Abbildung 2: Workflow zum Deklarieren und Anfordern spezieller Berechtigungen unter Android

Spezielle Berechtigungen anfordern

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

Der folgende Beispielcode zeigt, wie die Sonderberechtigung 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. Weitere Informationen finden Sie auf der Referenzseite der Entitlements API. Dort können Sie für jede Sonderberechtigung die Funktionen zur benutzerdefinierten Zugriffsprüfung verwenden. 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 bei Laufzeitberechtigungen sollten Apps spezielle Berechtigungen im Kontext anfordern, wenn der Nutzer eine bestimmte Aktion anfordert, für die die Berechtigung erforderlich ist. Sie können beispielsweise mit der Berechtigung SCHEDULE_EXACT_ALARMS warten, bis der Nutzer das Senden einer E-Mail zu einem bestimmten Zeitpunkt geplant hat.

Die Anfrage erklären

Geben Sie eine Begründung an, 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 lassen, bevor Sie den Intent in den Systemeinstellungen auf der Seite Spezieller App-Zugriff öffnen. Auf dieser Benutzeroberfläche sollte deutlich erklärt werden, warum die App die Berechtigung benötigt und wie der Nutzer sie auf der Seite „Einstellungen“ gewähren sollte.