FCM-Nachrichten im Direct Boot-Modus empfangen

Wenn Sie FCM-Nachrichten an Apps senden möchten, bevor das Gerät entsperrt wird, können Sie den Modus „Direktstart“ aktivieren. Beispiel: Sie möchten, dass Nutzer Ihrer App auch auf einem gesperrten Gerät Weckbenachrichtigungen erhalten.

Beachten Sie beim Erstellen dieses Anwendungsfalls die allgemeinen Best Practices und Einschränkungen für den Direktboot-Modus. Es ist wichtig, die Sichtbarkeit von Nachrichten zu berücksichtigen, die für den direkten Start aktiviert sind. Jeder Nutzer mit Zugriff auf das Gerät kann diese Nachrichten ansehen, ohne Anmeldedaten eingeben zu müssen.

Vorbereitung

  • Das Gerät muss für den Direktboot-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.

Nachrichtenverarbeitung im Direct Boot-Modus in Ihrer App aktivieren

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

    implementation 'com.google.firebase:firebase-messaging-directboot:20.2.0'
    
  2. Machen Sie die App FirebaseMessagingService-kompatibel, indem Sie das Attribut android:directBootAware="true" im App-Manifest hinzufügen:

    <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 FirebaseMessagingService im Direktbootmodus ausgeführt werden kann. Anhand der folgenden Anforderungen können Sie prüfen, ob Sie die Voraussetzungen erfüllen:

  • Der Dienst sollte nicht auf durch Anmeldedaten geschützten Speicher zugreifen, wenn er im Direktbootmodus ausgeführt wird.
  • Der Dienst darf nicht versuchen, Komponenten wie Activities, BroadcastReceivers oder andere Services zu verwenden, die nicht als Direct Boot-kompatibel gekennzeichnet sind, wenn er im Direct Boot-Modus ausgeführt wird.
  • Alle Bibliotheken, die der Dienst verwendet, dürfen während der Ausführung 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 Bibliotheken, die von der App verwendet und vom Dienst aufgerufen werden, entweder Direct Boot-kompatibel sein müssen oder die App prüfen muss, ob sie im Direct Boot-Modus ausgeführt wird, und sie in diesem Modus nicht aufrufen darf. Firebase SDKs funktionieren beispielsweise mit Direct Boot (sie können in eine App eingebunden werden, ohne dass diese im Direct Boot-Modus abstürzt), aber viele Firebase-APIs unterstützen keine Aufrufe im Direct Boot-Modus.
  • Wenn die App ein benutzerdefiniertes Application verwendet, muss dieses auch Direct Boot-fähig sein (kein Zugriff auf anmeldedatengeschützten Speicher im Direct Boot-Modus).Application

Nachrichten für Direct Boot senden

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,
    },
}