Laufzeitberechtigung für Benachrichtigungen

Android 13 (API‑Level 33) und höher unterstützt eine Laufzeitberechtigung zum Senden nicht ausgenommener Benachrichtigungen (einschließlich Diensten im Vordergrund) aus einer App: POST_NOTIFICATIONS. Mit dieser Änderung können sich Nutzer auf die Benachrichtigungen konzentrieren, die für sie am wichtigsten sind.

Wir empfehlen dringend, so bald wie möglich auf Android 13 oder höher auszurichten, um von der zusätzlichen Kontrolle und Flexibilität dieser Funktion zu profitieren. Wenn Sie weiterhin auf 12L (API‑Level 32) oder niedriger ausrichten, verlieren Sie etwas Flexibilität bei der Anforderung der Berechtigung im Kontext der Funktionen 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 bei der Anforderung anderer ähnlicher 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 angezeigt:

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

App-Funktionen hängen von der Auswahl des Nutzers im Berechtigungsdialogfeld ab

In diesem Dialogfeld haben Nutzer folgende Möglichkeiten:

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

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 ist ähnlich wie beim manuellen Deaktivieren aller Benachrichtigungen für Ihre App in den Systemeinstellungen.

Nutzer wischt das Dialogfeld weg

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

Auswirkungen auf neu installierte Apps

Wenn ein Nutzer Ihre App auf einem Gerät mit Android 13 oder höher installiert, sind die Benachrichtigungen Ihrer App standardmäßig deaktiviert. Ihre App muss warten, bis Sie die neue Berechtigung angefordert haben und der Nutzer Ihrer App diese Berechtigung erteilt hat, bevor sie Benachrichtigungen senden kann.

Der Zeitpunkt, zu dem das Berechtigungsdialogfeld angezeigt wird, hängt von der Ziel-SDK-Version Ihrer App ab:

  • Wenn Ihre App auf Android 13 oder höher ausgerichtet ist, hat sie die vollständige Kontrolle darüber, wann das Berechtigungsdialogfeld angezeigt wird. Nutzen Sie 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, zeigt das System das Berechtigungsdialogfeld an, 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 ihren ersten Benachrichtigungskanal erstellt. Das geschieht in der Regel beim Starten der App. Bei Apps mit einer einzigen Aktivität, z. B. den meisten Compose-Apps, zeigt das System das Dialogfeld an, wenn MainActivity gestartet wird.

Auswirkungen auf Updates für bestehende Apps

Um Unterbrechungen im Zusammenhang mit der Berechtigung zum Senden von Benachrichtigungen zu minimieren, erteilt das System allen berechtigten Apps automatisch die Berechtigung, wenn der Nutzer sein Gerät auf Android 13 oder höher aktualisiert. Mit anderen Worten: Diese Apps können weiterhin Benachrichtigungen an Nutzer senden und Nutzer sehen keine Aufforderung zur Erteilung einer Laufzeitberechtigung.

Voraussetzungen für die automatische Erteilung der Berechtigung

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

Wenn der Nutzer Benachrichtigungen für Ihre 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 Verhaltensänderung bei der Berechtigung zum Senden von Benachrichtigungen ausgenommen sind. Wenn der Nutzer unter Android 13 (API‑Level 33) oder höher die Benachrichtigungsberechtigung ablehnt, werden ihm weiterhin Benachrichtigungen zu Diensten im Vordergrund im Task-Manager angezeigt, aber nicht auf der Benachrichtigungsleiste.

Mediensitzungen

Benachrichtigungen zu Mediensitzungen sind von dieser Verhaltensänderung ausgenommen.

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

Wenn Ihre App für die Selbstverwaltung von Telefonanrufen konfiguriert ist, benötigen Sie die POST_NOTIFICATIONS Berechtigung nicht, damit Ihre App Benachrichtigungen senden kann, die den Notification.CallStyle Benachrichtigungsstil verwenden.

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

  1. Die Berechtigung MANAGE_OWN_CALLS deklariert.
  2. Die Schnittstelle ConnectionService implementiert.
  3. Sich beim Telekommunikationsanbieter des Geräts registriert, indem sie registerPhoneAccount() aufruft.

App testen

Sie können prüfen, wie sich die Berechtigung zum Senden von Benachrichtigungen auf Ihre 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-Befehlen (ADB) können Sie die häufigsten Sequenzen von Nutzerauswahlen und Geräteupgrades simulieren, ohne Ihr Testgerät zurücksetzen zu müssen:

  • App wird neu auf einem Gerät mit Android 13 oder höher 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 Sie die neue Benachrichtigungsberechtigung in Ihrer App am effektivsten nutzen können.

Ziel-SDK-Version Ihrer App aktualisieren

Wenn Sie Ihrer App mehr Flexibilität bei der Anzeige des Berechtigungsdialogfelds geben möchten, aktualisieren Sie Ihre App so, dass sie auf Android 13 oder höher ausgerichtet ist.

Warten, bis die Berechtigung zum Senden von Benachrichtigungen angezeigt wird

Bevor Sie Nutzer bitten, Berechtigungen zu erteilen, sollten Sie ihnen die Möglichkeit geben, sich mit Ihrer App vertraut zu machen.

Neue Nutzer möchten die App vielleicht erst einmal erkunden und die Vorteile der einzelnen Benachrichtigungsanfragen selbst erleben. Sie können eine Berechtigungsaufforderung durch eine Nutzeraktion auslösen. In der folgenden Liste finden Sie einige Beispiele dafür, wann es ein guter Zeitpunkt ist, die Aufforderung zur Erteilung der Berechtigung zum Senden von Benachrichtigungen anzuzeigen:

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

Abbildung 1 zeigt einen empfohlenen Workflow für die Anforderung der Benachrichtigungsberechtigung. Sofern shouldShowRequestPermissionRationale() nicht true zurückgibt, muss Ihre App den mittleren Bildschirm nicht anzeigen, der den Titel „Benachrichtigungen erhalten!“ hat. In Compose können Sie die aktuelle Activity finden, indem Sie auf LocalContext.current zugreifen und sie in eine Activity umwandeln.

Alternativ können Sie festlegen, dass eine Anfrage angezeigt wird, nachdem Sie Nutzern die Möglichkeit gegeben haben, sich mit Ihrer App vertraut zu machen. Sie können beispielsweise warten, bis der Nutzer Ihre App zum dritten oder vierten Mal startet.

Nachdem sich der Nutzer angemeldet hat, wird er aufgefordert, Benachrichtigungen zu Reiseupdates zu aktivieren. Nachdem der Nutzer auf die Schaltfläche „Ich bin drin“ geklickt hat, fordert die App die neue Berechtigung an, wodurch das Systemdialogfeld angezeigt wird.
Abbildung 1. Ein empfohlener nutzergesteuerter Workflow für die Anforderung der Berechtigung zum Senden von Benachrichtigungen. Der mittlere Bildschirm ist nur erforderlich, wenn shouldShowRequestPermissionRationale() true zurückgibt.

Berechtigung anfordern

Wenn Sie die Berechtigung in Ihrer Compose-UI anfordern möchten, verwenden Sie die rememberLauncherForActivityResult() API mit dem ActivityResultContracts.RequestPermission() Vertrag.

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

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 Sie Benachrichtigungsberechtigungen in Ihrer App anfordern, tun Sie dies im richtigen Kontext, damit explizit klar ist, wofür die Benachrichtigungen verwendet werden und warum der Nutzer sie aktivieren sollte. In einer E‑Mail-App können Sie beispielsweise Optionen zum Senden von Benachrichtigungen für jede neue E‑Mail oder nur für E‑Mails anbieten, bei denen der Nutzer der einzige Empfänger ist.

Nutzen Sie diese Gelegenheit, um Ihre Absichten transparent zu machen. Dann ist es wahrscheinlicher, dass Nutzer Ihrer App die Benachrichtigungsberechtigung erteilen.

Prüfen, ob Ihre App Benachrichtigungen senden kann

Bevor Ihre App eine Benachrichtigung sendet, prüfen Sie, ob der Nutzer Benachrichtigungen für Ihre App aktiviert hat. Rufen Sie dazu areNotificationsEnabled() auf.

Berechtigung verantwortungsvoll verwenden

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