Recevoir des messages FCM en mode démarrage direct

Si vous souhaitez envoyer des messages FCM aux applications avant le déverrouillage de l'appareil, vous pouvez activer le mode de démarrage direct. Par exemple, si vous souhaitez que les utilisateurs de votre application reçoivent des notifications d'alarme même sur un appareil verrouillé.

Lorsque vous développez ce cas d'utilisation, respectez les bonnes pratiques et restrictions générales pour le mode Direct Boot. Il est important de tenir compte de la visibilité des messages pour le démarrage direct. Tout utilisateur ayant accès à l'appareil peut consulter ces messages sans saisir d'identifiants.

Prérequis

  • L'appareil doit être configuré pour le mode Démarrage direct.
  • Une version récente des services Google Play (19.0.54 ou ultérieure) doit être installée sur l'appareil.
  • L'application doit utiliser le SDK FCM (com.google.firebase:firebase-messaging) pour recevoir les messages FCM.

Activer la gestion des messages en mode démarrage direct dans votre application

  1. Dans le fichier Gradle au niveau de l'application, ajoutez une dépendance à la bibliothèque de compatibilité FCM pour le démarrage direct :

    implementation 'com.google.firebase:firebase-messaging-directboot:20.2.0'
    
  2. Rendez l'application compatible avec le démarrage direct en ajoutant l'attribut android:directBootAware="true" dans le fichier manifeste de l'application :FirebaseMessagingService

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

Il est important de s'assurer que ce FirebaseMessagingService peut s'exécuter en mode démarrage direct. Vous pouvez vérifier en utilisant les exigences suivantes :

  • Le service ne doit pas accéder au stockage protégé par identifiants lorsqu'il s'exécute en mode Démarrage direct.
  • Le service ne doit pas tenter d'utiliser des composants, tels que Activities, BroadcastReceivers ou d'autres Services qui ne sont pas marqués comme compatibles avec le démarrage direct lorsqu'il s'exécute en mode Démarrage direct.
  • Toutes les bibliothèques utilisées par le service ne doivent pas non plus accéder au stockage protégé par identifiants ni appeler de composants non DirectBootAware lorsqu'elles s'exécutent en mode Démarrage direct. Cela signifie que toutes les bibliothèques utilisées par l'application et appelées depuis le service devront être compatibles avec le démarrage direct, ou que l'application devra vérifier si elle s'exécute en mode Démarrage direct et ne pas les appeler dans ce mode. Par exemple, les SDK Firebase fonctionnent avec le démarrage direct (ils peuvent être inclus dans une application sans la planter en mode démarrage direct), mais de nombreuses API Firebase ne sont pas compatibles avec l'appel en mode démarrage direct.
  • Si l'application utilise un Application personnalisé, le Application devra également être compatible avec le démarrage direct (pas d'accès au stockage protégé par identifiants en mode Démarrage direct).

Envoyer des messages compatibles avec le démarrage direct

Vous pouvez envoyer des messages aux appareils en mode démarrage direct à l'aide de l'API HTTP v1.

La demande de message doit inclure la clé "direct_boot_ok": true dans les options AndroidConfig du corps de la requête. Exemple :

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