FCM-Nachrichten im Direct Boot-Modus empfangen

Wenn du FCM-Nachrichten an Apps senden möchtest, bevor das Gerät entsperrt wird, kannst du den Direktstartmodus aktivieren. Beispiel: Sie möchten, dass die Nutzer Ihrer App auch auf einem gesperrten Gerät Alarmbenachrichtigungen erhalten.

Beachten Sie beim Erstellen dieses Anwendungsfalls die allgemeinen Best Practices und Einschränkungen für den Direktstartmodus. Es ist wichtig, die Sichtbarkeit von Nachrichten zu berücksichtigen, die für den Direktstart aktiviert sind. Jeder Nutzer mit Zugriff auf das Gerät kann diese Nachrichten ohne Eingabe von Nutzeranmeldedaten sehen.

Vorbereitung

  • Das Gerät muss für den Direct Boot-Modus eingerichtet sein.
  • Auf dem Gerät muss eine aktuelle Version der Google Play-Dienste installiert sein (19.0.54 oder höher).
  • Die App muss das FCM SDK (com.google.firebase:firebase-messaging) verwenden, um FCM-Nachrichten zu empfangen.

Verarbeitung von Nachrichten im Direktstartmodus in Ihrer App aktivieren

  1. Fügen Sie in der Gradle-Datei auf App-Ebene eine Abhängigkeit von der Direct Boot-Supportbibliothek FCM hinzu:

    implementation 'com.google.firebase:firebase-messaging-directboot:20.2.0'
    
  2. Fügen Sie dem App-Manifest das Attribut android:directBootAware="true" hinzu, um den FirebaseMessagingService der App für den Direktstart zu aktivieren:

    <service
        android:name=".java.MyFirebaseMessagingService"
        android:exported="false"
        android:directBootAware="true">
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT" />
        </intent-filter>
    </service>
    

Es ist wichtig, dass dieser FirebaseMessagingService im Direct Boot-Modus ausgeführt werden kann. Anhand der folgenden Anforderungen können Sie prüfen, ob Sie die Voraussetzungen erfüllen:

  • Der Dienst sollte nicht auf den durch Anmeldedaten geschützten Speicher zugreifen, während er im Direct Boot-Modus ausgeführt wird.
  • Der Dienst sollte nicht versuchen, Komponenten wie Activities, BroadcastReceivers oder andere Services zu verwenden, die nicht als Direct Boot-fähig gekennzeichnet sind, während er im Direct Boot-Modus ausgeführt wird.
  • Alle Bibliotheken, die der Dienst verwendet, dürfen im Direct Boot-Modus weder auf durch Anmeldedaten geschützten Speicher zugreifen noch Komponenten aufrufen, die nicht Direct Boot-fähig sind. Das bedeutet, dass alle von der App verwendeten Bibliotheken, die vom Dienst aufgerufen werden, entweder Direct Boot-fähig sein müssen oder die App muss prüfen, ob sie im Direct Boot-Modus ausgeführt wird, und sie in diesem Modus nicht aufrufen. Firebase SDKs funktionieren beispielsweise mit dem Direktstart (sie können in eine App eingebunden werden, ohne dass sie im Direktstartmodus abstürzt), aber viele Firebase APIs können im Direktstartmodus nicht aufgerufen werden.
  • Wenn die App einen benutzerdefinierten Application verwendet, muss der Application auch Direct Boot-fähig sein (kein Zugriff auf den durch Anmeldedaten geschützten Speicher im Direct Boot-Modus).

Nachrichten senden, die für den Direktstart aktiviert sind

Mit der HTTP v1 API können Sie Nachrichten an Geräte im Direct Boot-Modus senden.

Die Nachrichtenanfrage muss den Schlüssel "direct_boot_ok": true in den AndroidConfig-Optionen des Anfragetexts enthalten. Beispiel:

https://fcm.googleapis.com/v1/projects/myproject-b5ae1/messages:send
Content-Type:application/json
Authorization: Bearer ya29.ElqKBGN2Ri_Uz...HnS_uNreA

{
  "message":{
    "token" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
    "data": {
      "score": "5x1",
      "time": "15:10"
    },
    "android": {
      "direct_boot_ok": true,
    },
}