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. Das ist beispielsweise sinnvoll, wenn Nutzer Ihrer App auch auf einem gesperrten Gerät Alarmbenachrichtigungen erhalten sollen.

Beachten Sie bei der Entwicklung dieses Anwendungsfalls die allgemeinen Best Practices und Einschränkungen für den Modus „Direktstart“. Wichtig ist, dass Sie die Sichtbarkeit von Nachrichten berücksichtigen, die für den Modus „Direktstart“ 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 Modus „Direktstart“ 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 Modus „Direktstart“ in Ihrer App aktivieren

  1. Fügen Sie in der Gradle-Datei auf App-Ebene eine Abhängigkeit von der FCM direct boot-Bibliothek hinzu:

    implementation 'com.google.firebase:firebase-messaging-directboot:20.2.0'
    
  2. Machen Sie den FirebaseMessagingService der App für den Modus „Direktstart“ geeignet, indem Sie im App-Manifest das android:directBootAware="true" Attribut 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 dieser FirebaseMessagingService im Modus „Direktstart“ ausgeführt werden kann. Das können Sie anhand der folgenden Anforderungen überprüfen:

  • Der Dienst darf im Modus „Direktstart“ nicht auf speichergeschützte Anmeldedaten zugreifen.
  • Der Dienst darf im Modus „Direktstart“ keine Komponenten wie Activities, BroadcastReceivers oder andere Services verwenden, die nicht als für den Modus „Direktstart“ geeignet gekennzeichnet sind.
  • Alle Bibliotheken, die der Dienst verwendet, dürfen im Modus „Direktstart“ auch nicht auf speichergeschützte Anmeldedaten zugreifen oder Komponenten aufrufen, die nicht für den Modus „Direktstart“ geeignet sind. Das bedeutet, dass alle Bibliotheken, die von der App verwendet und vom Dienst aufgerufen werden, entweder für den Modus „Direktstart“ geeignet sein müssen oder die App muss prüfen, ob sie im Modus „Direktstart“ ausgeführt wird, und sie in diesem Modus nicht aufrufen. Firebase SDKs funktionieren beispielsweise mit dem Modus „Direktstart“ (sie können in eine App eingebunden werden, ohne dass diese im Modus „Direktstart“ abstürzt), aber viele Firebase APIs können nicht im Modus „Direktstart“ aufgerufen werden.
  • Wenn die App eine benutzerdefinierte Application verwendet, muss auch die Application für den Modus „Direktstart“ geeignet sein (kein Zugriff auf speichergeschützte Anmeldedaten im Modus „Direktstart“).

Nachrichten senden, die für den Modus „Direktstart“ aktiviert sind

Sie können Nachrichten an Geräte im Modus „Direktstart“ über die HTTP v1 API 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,
    },
}