Laufzeitberechtigung für Benachrichtigungen

Android 13 (API-Level 33) und höher unterstützt eine Laufzeitberechtigung zum Senden von nicht ausgenommenen Benachrichtigungen (einschließlich Diensten im Vordergrund) von einer App: POST_NOTIFICATIONS. Diese Änderung hilft Nutzern, sich auf die Benachrichtigungen zu konzentrieren, die für sie am wichtigsten sind.

Wir empfehlen dringend, so bald wie möglich Android 13 oder höher als Zielversion festzulegen, um von der zusätzlichen Kontrolle und Flexibilität dieser Funktion zu profitieren. Wenn Sie weiterhin auf 12L (API-Level 32) oder niedriger abzielen, verlieren Sie etwas Flexibilität bei der Anforderung der Berechtigung im Kontext der Funktionalität Ihrer App.

Berechtigung deklarieren

Wenn Sie die neue Berechtigung zum Senden von Benachrichtigungen von Ihrer App anfordern möchten, aktualisieren Sie Ihre App so, dass sie auf Android 13 ausgerichtet ist, und führen Sie einen ähnlichen Prozess wie beim Anfordern anderer Laufzeitberechtigungen aus, wie in den folgenden Abschnitten beschrieben.

Die Berechtigung, die Sie in der Manifestdatei Ihrer App deklarieren müssen, wird im folgenden Code-Snippet gezeigt:

<manifest ...>
    <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
    <application ...>
        ...
    </application>
</manifest>

App-Funktionen hängen von der Nutzerauswahl im Berechtigungsdialogfeld ab

In diesem Dialogfeld stehen Nutzern die folgenden Aktionen zur Verfügung:

In den folgenden Abschnitten wird beschrieben, wie sich Ihre App verhält, je nachdem, welche Aktion der Nutzer ausführt.

Der Nutzer wählt „Zulassen“ aus.

Wenn der Nutzer die Option Zulassen auswählt, kann Ihre App Folgendes tun:

Nutzer wählt „Nicht zulassen“ aus

Wenn der Nutzer die Option Nicht zulassen auswählt, kann Ihre App keine Benachrichtigungen senden, es sei denn, sie erfüllt die Voraussetzungen für eine Ausnahme. Alle Benachrichtigungskanäle sind blockiert, mit Ausnahme einiger bestimmter Rollen. Das Verhalten ähnelt dem, was passiert, wenn der Nutzer alle Benachrichtigungen für Ihre App manuell in den Systemeinstellungen deaktiviert.

Nutzer wischt das Dialogfeld weg

Wenn der Nutzer das Dialogfeld wegwischt, also weder Zulassen noch Nicht zulassen auswählt, ändert sich der Status der Berechtigung zum Senden von Benachrichtigungen nicht.

Auswirkungen auf neu installierte Apps

Installiert ein Nutzer deine App auf einem Gerät mit Android 13 oder höher, werden die Benachrichtigungen der App standardmäßig deaktiviert. Ihre App darf erst dann Benachrichtigungen senden, wenn Sie die neue Berechtigung angefordert haben und der Nutzer sie Ihrer App gewährt hat.

Wann das Dialogfeld für Berechtigungen angezeigt wird, hängt von der Ziel-SDK-Version Ihrer App ab:

  • Wenn deine App auf Android 13 oder höher ausgerichtet ist, hast du die volle Kontrolle darüber, wann das Berechtigungsdialogfeld angezeigt wird. Nutze diese Gelegenheit, um Nutzern zu erklären, warum die App diese Berechtigung benötigt, und sie dazu zu ermutigen, sie zu erteilen.
  • Wenn Ihre App auf 12L (API-Level 32) oder niedriger ausgerichtet ist, wird das Dialogfeld für die Berechtigung angezeigt, wenn Ihre App zum ersten Mal eine Aktivität startet, nachdem Sie einen Benachrichtigungskanal erstellt haben, oder wenn Ihre App eine Aktivität startet und dann den ersten Benachrichtigungskanal erstellt. Dies geschieht normalerweise beim Start der App. In Apps mit einer einzelnen Aktivität, wie den meisten Compose-Apps, wird das Dialogfeld angezeigt, wenn die MainActivity gestartet wird.

Auswirkungen auf Updates für vorhandene Apps

Damit die Berechtigung zum Senden von Benachrichtigungen möglichst wenig stört, wird sie vom System automatisch allen berechtigten Apps gewährt, wenn der Nutzer sein Gerät auf Android 13 oder höher aktualisiert. Diese Apps können also weiterhin Benachrichtigungen an Nutzer senden und Nutzer sehen keine Aufforderung zur Laufzeitberechtigung.

Voraussetzungen für die Voraberteilung von Berechtigungen

Damit deine App für eine automatische Voraberteilung infrage kommt, muss sie einen vorhandenen Benachrichtigungskanal haben und ihre Benachrichtigungen dürfen nicht explizit vom Nutzer auf einem Gerät mit 12L oder niedriger deaktiviert worden sein.

Wenn der Nutzer Benachrichtigungen für deine App auf einem Gerät mit 12L oder niedriger deaktiviert hat, bleibt diese Ablehnung bestehen, wenn das Gerät auf Android 13 oder höher aktualisiert wird.

Ausnahmen

Dieser Abschnitt enthält die Benachrichtigungen und Apps, die von der Änderung des Verhaltens bei der Berechtigung zum Senden von Benachrichtigungen ausgenommen sind. Wenn der Nutzer unter Android 13 (API-Level 33) oder höher die Berechtigung zum Senden von Benachrichtigungen ablehnt, werden ihm weiterhin Benachrichtigungen zu Diensten im Vordergrund im Task-Manager angezeigt, aber nicht in der Benachrichtigungsleiste.

Mediensitzungen

Benachrichtigungen zu Mediensitzungen sind von dieser Verhaltensänderung ausgenommen.

Apps, die für die Selbstverwaltung von Telefonanrufen konfiguriert sind

Wenn deine App so konfiguriert ist, dass sie Telefonanrufe selbst verwaltet, benötigst du die Berechtigung POST_NOTIFICATIONS nicht, damit deine App Benachrichtigungen mit dem Benachrichtigungsstil Notification.CallStyle senden kann.

Das System geht davon aus, dass Ihre App für die selbstverwaltete Anrufverwaltung konfiguriert ist, wenn sie Folgendes tut:

  1. Deklariert die Berechtigung MANAGE_OWN_CALLS.
  2. Implementiert die ConnectionService-Schnittstelle.
  3. Registriert sich beim Telekommunikationsanbieter des Geräts durch Aufrufen von registerPhoneAccount().

App testen

Du kannst prüfen, wie sich die Berechtigung zum Senden von Benachrichtigungen auf deine App auswirkt, wenn sie zum ersten Mal auf einem Gerät mit Android 13 oder höher verwendet wird. Mit den folgenden Android Debug Bridge (ADB)-Befehlen kannst du die gängigsten Abfolgen von Nutzerauswahlen und Geräteupgrades simulieren, ohne dein Testgerät zurücksetzen zu müssen:

  • Die App wird auf einem Gerät mit Android 13 oder höher neu installiert:

    adb shell pm revoke PACKAGE_NAME android.permission.POST_NOTIFICATIONS
    adb shell pm clear-permission-flags PACKAGE_NAME \
      android.permission.POST_NOTIFICATIONS user-set
    adb shell pm clear-permission-flags PACKAGE_NAME \
      android.permission.POST_NOTIFICATIONS user-fixed
    
  • Der Nutzer lässt Benachrichtigungen aktiviert, wenn die App auf einem Gerät mit 12L oder niedriger installiert ist, und das Gerät wird dann auf Android 13 oder höher aktualisiert:

    adb shell pm grant PACKAGE_NAME android.permission.POST_NOTIFICATIONS
    adb shell pm set-permission-flags PACKAGE_NAME \
      android.permission.POST_NOTIFICATIONS user-set
    adb shell pm clear-permission-flags PACKAGE_NAME \
      android.permission.POST_NOTIFICATIONS user-fixed
    
  • Der Nutzer deaktiviert Benachrichtigungen manuell, wenn die App auf einem Gerät mit 12L oder niedriger installiert ist, und das Gerät wird dann auf Android 13 oder höher aktualisiert:

    adb shell pm revoke PACKAGE_NAME android.permission.POST_NOTIFICATIONS
    adb shell pm set-permission-flags PACKAGE_NAME \
      android.permission.POST_NOTIFICATIONS user-set
    adb shell pm clear-permission-flags PACKAGE_NAME \
      android.permission.POST_NOTIFICATIONS user-fixed
    

Best Practices

In diesem Abschnitt werden verschiedene Möglichkeiten beschrieben, wie du die neue Berechtigung zum Senden von Benachrichtigungen in deiner App am effektivsten nutzen kannst.

SDK-Zielversion Ihrer App aktualisieren

Wenn du deiner App mehr Flexibilität bei der Anzeige des Berechtigungsdialogs geben möchtest, aktualisiere sie so, dass sie auf Android 13 oder höher ausgerichtet ist.

Mit der Anzeige der Aufforderung zur Berechtigung zum Senden von Benachrichtigungen warten

Bevor du Nutzer um Berechtigungen bittest, solltest du ihnen die Möglichkeit geben, sich mit deiner App vertraut zu machen.

Neue Nutzer möchten die App vielleicht erst einmal kennenlernen und die Vorteile der einzelnen Benachrichtigungsanfragen selbst erleben. Sie können eine Berechtigungsaufforderung über eine Nutzeraktion auslösen. In der folgenden Liste finden Sie einige Beispiele dafür, wann die Aufforderung zur Berechtigung zum Senden von Benachrichtigungen angezeigt werden sollte:

  • Der Nutzer tippt auf die Benachrichtigungsglocke.
  • Der Nutzer entscheidet sich, dem Social-Media-Konto einer Person zu folgen.
  • Der Nutzer gibt eine Bestellung für die Lieferung von Essen auf.

Abbildung 1 zeigt einen empfohlenen Workflow zum Anfordern der Berechtigung zum Senden von Benachrichtigungen. Sofern shouldShowRequestPermissionRationale() nicht true zurückgibt, muss deine App den mittleren Bildschirm mit dem Titeltext „Benachrichtigungen erhalten!“ nicht anzeigen. In Compose können Sie die aktuelle Activity finden, indem Sie auf LocalContext.current zugreifen und sie in eine Activity umwandeln.

Alternativ kannst du eine Anfrage einrichten, die erst erscheint, nachdem Nutzer die Möglichkeit hatten, sich mit deiner App vertraut zu machen. Du kannst beispielsweise warten, bis der Nutzer deine App zum dritten oder vierten Mal startet.

Nach der Anmeldung wird der Nutzer gefragt, ob er Benachrichtigungen zu Fahrtaktualisierungen erhalten möchte. Nachdem der Nutzer auf den Button „Ich bin dabei“ geklickt hat, fordert die App die neue Berechtigung an, wodurch das Systemdialogfeld angezeigt wird.
Abbildung 1. Ein empfohlener, nutzergesteuerter Workflow zum Anfordern der Berechtigung zum Senden von Benachrichtigungen. Der mittlere Bildschirm ist nur erforderlich, wenn shouldShowRequestPermissionRationale() den Wert true zurückgibt.

Berechtigung anfordern

Wenn du die Berechtigung in deiner Compose-UI anfordern möchtest, verwende die rememberLauncherForActivityResult() API mit dem ActivityResultContracts.RequestPermission()-Vertrag.

Das folgende Snippet zeigt, wie die Berechtigung zum Senden von Benachrichtigungen als Reaktion auf eine Nutzerinteraktion angefordert wird:

Kotlin

val context = LocalContext.current
val permissionLauncher = rememberLauncherForActivityResult(
    ActivityResultContracts.RequestPermission()
) { isGranted ->
    if (isGranted) {
        // Permission granted, you can now send notifications.
    } else {
        // Permission denied, handle accordingly.
    }
}

// ... in your UI ...
Button(onClick = {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
        permissionLauncher.launch(Manifest.permission.POST_NOTIFICATIONS)
    }
}) {
    Text("Enable Notifications")
}

Berechtigung im Kontext anfordern

Wenn du in deiner App Berechtigungen zum Senden von Benachrichtigungen anforderst, solltest du dies im richtigen Kontext tun, damit klar ist, wofür die Benachrichtigungen verwendet werden und warum der Nutzer zustimmen sollte. Eine E‑Mail-App kann beispielsweise Optionen enthalten, mit denen Benachrichtigungen für jede neue E‑Mail oder nur für die E‑Mails gesendet werden, bei denen der Nutzer der einzige Empfänger ist.

Nutze diese Gelegenheit, um deine Absichten transparent zu machen. Dann ist es wahrscheinlicher, dass Nutzer deiner App die Berechtigung zum Senden von Benachrichtigungen erteilen.

Prüfen, ob Ihre App Benachrichtigungen senden kann

Bevor deine App eine Benachrichtigung sendet, solltest du prüfen, ob der Nutzer Benachrichtigungen für deine App aktiviert hat. Rufe dazu areNotificationsEnabled() auf.

Verantwortungsvoller Umgang mit der Berechtigung

Nachdem Sie die Genehmigung zum Senden von Benachrichtigungen erhalten haben, sollten Sie die Berechtigung verantwortungsvoll nutzen. Nutzer können die Anzahl der täglichen Benachrichtigungen sehen, die deine App sendet, und die Berechtigung jederzeit widerrufen.