Ricevi messaggi FCM in modalità di avvio diretto

Se vuoi inviare messaggi FCM alle app prima che il dispositivo venga sbloccato, puoi attivare la modalità di avvio diretto. Ad esempio, se vuoi che gli utenti della tua app ricevano notifiche di sveglia anche su un dispositivo bloccato.

Quando crei questo caso d'uso, osserva le best practice e le limitazioni generali per la modalità di avvio diretto. È importante considerare la visibilità dei messaggi abilitati per l'avvio diretto. Qualsiasi utente con accesso al dispositivo può visualizzare questi messaggi senza inserire le credenziali utente.

Prerequisiti

  • Il dispositivo deve essere configurato per la modalità di avvio diretto.
  • Sul dispositivo deve essere installata una versione recente di Google Play Services (19.0.54 o successive).
  • L'app deve utilizzare l'SDK FCM (com.google.firebase:firebase-messaging) per ricevere i messaggi FCM.

Attiva la gestione dei messaggi in modalità di avvio diretto nella tua app

  1. Nel file Gradle a livello di app, aggiungi una dipendenza dalla libreria di supporto per l'avvio diretto FCM:

    implementation 'com.google.firebase:firebase-messaging-directboot:20.2.0'
    
  2. Rendi l'elemento FirebaseMessagingService dell'app compatibile con l'avvio diretto aggiungendo l'attributo android:directBootAware="true" nel manifest dell'app:

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

È importante assicurarsi che questa FirebaseMessagingService possa essere eseguita in modalità di avvio diretto. Puoi verificarlo utilizzando i seguenti requisiti:

  • Il servizio non deve accedere allo spazio di archiviazione protetto da credenziali mentre è in esecuzione in modalità Avvio diretto.
  • Il servizio non deve tentare di utilizzare componenti come Activities, BroadcastReceivers o altri Services non contrassegnati come compatibili con l'avvio diretto mentre è in esecuzione in modalità di avvio diretto.
  • Inoltre, le librerie utilizzate dal servizio non devono accedere allo spazio di archiviazione protetto da credenziali né chiamare componenti non compatibili con l'avvio diretto durante l'esecuzione in modalità di avvio diretto. Ciò significa che tutte le librerie utilizzate dall'app che vengono chiamate dal servizio dovranno essere compatibili con l'avvio diretto oppure l'app dovrà verificare se è in esecuzione in modalità di avvio diretto e non chiamarle in questa modalità. Ad esempio, gli SDK Firebase funzionano con l'avvio diretto (possono essere inclusi in un'app senza causarne l'arresto anomalo in modalità di avvio diretto), ma molte API Firebase non supportano la chiamata in modalità di avvio diretto.
  • Se l'app utilizza un Application personalizzato, anche il Application deve essere compatibile con l'avvio diretto (nessun accesso allo spazio di archiviazione protetto da credenziali in modalità di avvio diretto).

Invia messaggi con avvio diretto abilitato

Puoi inviare messaggi ai dispositivi in modalità di avvio diretto utilizzando l'API HTTP v1.

La richiesta di messaggio deve includere la chiave "direct_boot_ok": true nelle opzioni AndroidConfig del corpo della richiesta. Ad esempio:

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