Définir la durée de vie d'un message

FCM distribue généralement les messages immédiatement après leur envoi. Toutefois, cela n'est pas toujours possible. Par exemple, l'appareil peut être indisponible ou FCM peut intentionnellement retarder les messages pour empêcher une application de consommer des ressources excessives et d'affecter négativement l'autonomie de la batterie.

Dans ce cas, FCM stocke le message et le distribue dès que possible. Bien que cela soit acceptable dans la plupart des cas, certaines applications nécessitent l'envoi de notifications sans délai. Par exemple, une notification pour un appel entrant ou une invitation à un événement.

Sur Android et le Web, vous pouvez spécifier la durée de vie maximale d'un message. La valeur doit être une durée comprise entre 0 et 2 419 200 secondes (28 jours). Elle correspond à la période maximale pendant laquelle FCM stocke le message et tente de le distribuer. Par défaut, les requêtes qui ne contiennent pas ce champ durent au maximum quatre semaines.

Sur iOS, vous pouvez définir l'en-tête apns-expiration dans l'objet ApnsConfig. Pour en savoir plus, consultez la documentation d'Apple sur l'envoi de requêtes de notification à APNs.

Voici quelques utilisations possibles de cette fonctionnalité :

  • Appels entrants pour un chat vidéo
  • Événements avec invitation expirée
  • Événements d'agenda

Un autre avantage de la spécification de la durée de vie d'un message est que FCM n'applique pas la limitation des messages réductibles aux messages dont la valeur de durée de vie est de 0 seconde. N'oubliez pas qu'une valeur ttl de 0 signifie que les messages qui ne peuvent pas être distribués immédiatement sont ignorés. Toutefois, comme ces messages ne sont jamais stockés, cela offre la meilleure latence pour l'envoi de messages de notification.

Voici un exemple de requête incluant la durée de vie :

{
  "message":{
    "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
    "data":{
      "Nick" : "Mario",
      "body" : "great match!",
      "Room" : "PortugalVSDenmark"
    },
    "apns":{
      "headers":{
        "apns-expiration":"1604750400"
      }
    },
    "android":{
      "ttl":"4500s"
    },
    "webpush":{
      "headers":{
        "TTL":"4500"
      }
    }
  }
}

Durée de vie d'un message

Lorsqu'un serveur d'application publie un message sur FCM et reçoit un ID de message en retour, cela ne signifie pas que le message a déjà été distribué à l'appareil. Cela signifie plutôt qu'il a été accepté pour la distribution. La distribution du message dépend de nombreux facteurs.

Si l'appareil est connecté, mais en mode Veille, un message de faible priorité est stocké par FCM jusqu'à ce qu'il quitte ce mode. Si le collapse_key est défini et qu'un message existant avec la même clé de réduction et le même jeton d'enregistrement est en attente de distribution, l'ancien message est ignoré et le nouveau le remplace. Toutefois, si la clé de réduction n'est pas définie, les messages nouveau et ancien sont stockés pour une distribution ultérieure.

Si l'appareil n'est pas connecté à FCM, le message est stocké jusqu'à ce qu'une connexion soit établie. Lorsqu'une connexion est établie, FCM distribue tous les messages en attente à l'appareil. Si l'appareil ne se reconnecte jamais, le message finit par expirer et est supprimé du FCM stockage. Le délai d'expiration par défaut est de quatre semaines, sauf si l'indicateur ttl est défini. Si l' application a été désinstallée lorsque FCM tente de distribuer un message à l' appareil, FCM ignore immédiatement ce message et invalide le jeton d'enregistrement. Les tentatives ultérieures d'envoi d'un message à cet appareil génèrent une erreur NotRegistered.

Pour les appareils Android, si l'appareil ne s'est pas connecté à FCM depuis plus d'un mois, FCM accepte toujours le message, mais l'ignore immédiatement. Si l'appareil se connecte dans les quatre semaines suivant le dernier message de données que vous lui avez envoyé à celui-ci, votre application cliente reçoit le onDeletedMessages() rappel.

Pour mieux comprendre la distribution des messages sur les plates-formes Android ou Apple, vous pouvez utiliser le FCM tableau de bord de création de rapports, qui enregistre le nombre de messages envoyés et ouverts sur les appareils Apple et Android, ainsi que les données sur les impressions pour les applications Android.