Wenn Sie FCM-Nachrichten an Apps senden möchten, bevor das Gerät entsperrt wird, können Sie den Direct Boot-Modus aktivieren. Beispiel: Sie möchten, dass Nutzer Ihrer App auch auf einem gesperrten Gerät Benachrichtigungen für Alarme erhalten.
Beachten Sie bei der Entwicklung 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 Nutzeranmeldedaten 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
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'
Machen Sie die App
FirebaseMessagingService
-kompatibel, indem Sie das Attributandroid: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 diese 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 credential-geschützten Speicher zugreifen, wenn er im Direct-Boot-Modus ausgeführt wird.
- Der Dienst darf nicht versuchen, Komponenten wie
Activities
,BroadcastReceivers
oder andereServices
zu verwenden, die nicht als Direct Boot-kompatibel gekennzeichnet sind, wenn er im Direct Boot-Modus ausgeführt wird. - Bibliotheken, die vom Dienst verwendet werden, dürfen im Direct Boot-Modus nicht auf durch Anmeldedaten geschützten Speicher zugreifen und keine Komponenten aufrufen, die nicht Direct Boot-kompatibel sind. Das bedeutet, dass alle Bibliotheken, die von der App verwendet und vom Dienst aufgerufen werden, entweder Direct Boot-fähig 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-kompatibel 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,
},
}