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.