Vous avez deux options pour attribuer une priorité de distribution aux messages en aval sur Android : priorité normale et priorité élevée. La distribution des messages de priorité normale et élevée fonctionne comme suit :
Priorité normale. Il s'agit de la priorité par défaut pour les messages de données et de notification. Les messages de priorité normale sont distribués immédiatement lorsque l'appareil n'est pas en veille. Lorsque l'appareil est en mode Sommeil, la distribution peut être retardée pour économiser la batterie jusqu'à ce que l'appareil quitte le mode Sommeil. Pour les messages moins urgents, tels que les notifications de nouveaux e-mails, la synchronisation de l'interface utilisateur ou la synchronisation des données de l'application en arrière-plan, choisissez la priorité de diffusion normale.
Priorité élevée : FCM tente de transmettre immédiatement les messages de priorité élevée, ce qui permet à FCM de réactiver un appareil en veille si nécessaire et d'exécuter un traitement limité (y compris un accès réseau très limité). Les messages de priorité élevée doivent généralement entraîner une interaction de l'utilisateur avec votre application ou ses notifications.
Choisir entre les messages à priorité élevée et les messages à priorité normale
Les messages de priorité normale conviennent aux mises à jour générales, mais choisissez la priorité élevée lorsque vous devez assurer une distribution immédiate pour des questions ou des actions urgentes. Étant donné que le délai de livraison des messages de priorité normale peut être affecté par le mode Sommeil, définir la plupart de vos notifications visibles par l'utilisateur sur une priorité élevée garantit qu'elles seront diffusées rapidement. Par exemple, les notifications telles que les messages de chat, les problèmes liés à un compte ou les informations sur la livraison de repas doivent être définies sur une priorité élevée.
Traitement des messages à priorité élevée et normale
Pour les messages à priorité élevée et normale reçus sur un appareil Android, quelques secondes sont accordées pour traiter la charge utile du message dans le gestionnaire onMessageReceived, avec un peu plus de temps alloué aux messages à priorité élevée qu'aux messages à priorité normale. Ce délai ne doit être que suffisamment long pour afficher immédiatement une notification. Si vous devez effectuer des tâches supplémentaires, telles que le chargement d'une image à partir de l'espace de stockage de l'appareil ou l'appel de vos serveurs pour collecter du contenu supplémentaire, vous devrez suivre des étapes supplémentaires.
La méthode onMessageReceived est appelée sur un thread de travail distinct. Il est recommandé de traiter la charge utile du message et d'afficher immédiatement une notification dans la méthode onMessageReceived. Vous ne devez pas effectuer d'appels réseau asynchrones supplémentaires ni traiter la charge utile sur un thread distinct dans la méthode onMessageReceived, car cela peut entraîner la sortie de votre application d'un cycle de vie de processus valide avant que la charge utile ne soit entièrement traitée. Dans ce cas, vous constaterez peut-être que certains messages FCM envoyés entraînent des notifications retardées ou manquantes.
Si vous avez besoin de plus de temps pour traiter votre message, par exemple pour récupérer un imageUrl contenu dans la charge utile de votre message, vous devrez utiliser une construction telle que WorkManager ou un service de premier plan pour prolonger le cycle de vie de l'application. Suivez les instructions ci-dessous lorsque vous remplacez la méthode onMessageReceived pour vérifier que vos notifications sont entièrement traitées.
- Pour les notifications à priorité élevée : lancez un job accéléré à l'aide de l'outil
WorkManagerd'Android pour vérifier que votre notification à priorité élevée bénéficie d'un temps de traitement prioritaire afin de s'assurer que l'affichage de votre notification s'exécute jusqu'au bout. La bonne nouvelle, c'est que si vous craignez d'épuiser les quotas de tâches accélérées en raison du traitement FCM à priorité élevée, vous n'avez pas à vous inquiéter. Une brève exception est accordée pour les tâches accélérées planifiées immédiatement après l'envoi d'unonMessageReceivedFCM de priorité élevée. - Pour les notifications de priorité normale : démarrez un
WorkRequeststandard à l'aide de l'WorkManagerAndroid. Cela permet de s'assurer que le travail supplémentaire requis pour traiter votre notification est finalement traité, sans utiliser le traitement prioritaire et sans causer de problèmes d'utilisation inutile de la batterie.
Définir la priorité des messages
Vous pouvez envoyer des notifications à vos utilisateurs à l'aide de Admin SDK, de l'API REST FCM et de la console Firebase. Pour modifier votre paramètre de priorité à partir de l'API REST Admin SDK et FCM, vous devez mettre à jour la charge utile JSON du message. Vous pouvez utiliser l'exemple de code suivant pour voir comment définir la priorité sur "élevée". Pour les notifications envoyées depuis la console, la définition de champs de notification spécifiques à Android n'est pas possible.
{
"message": {
"notification": {
"body": "Purchase exceeding $500 detected",
"title": "Credit card purchase"
},
"data": {
"purchaser": "Your child",
"items": "Gravity Defier Sneakers"
},
"android": {
"priority": "high"
},
"apns": {
"headers": {
"apns-priority": "5"
}
}
}
}
Tester vos notifications à priorité élevée en mode Sommeil
Pour vous assurer que vos notifications à priorité élevée sont reçues et traitées correctement lorsqu'un utilisateur les reçoit, suivez ces instructions pour tester vos notifications :
- Configurez votre appareil en mode Sommeil en suivant les instructions de la section Tester votre application avec le mode Sommeil.
- Accédez à votre jeton d'enregistrement FCM depuis votre application sur l'appareil de test. Pour savoir comment accéder au jeton, consultez Envoyer un message de test à une application en arrière-plan.
- Une fois que vous disposez du jeton FCM, envoyez votre notification à priorité élevée à l'appareil de test à l'aide de votre code d'envoi de notification FCM ou d'une commande cURL dont les paramètres de configuration correspondent à votre notification à priorité élevée.
Dépriorisation des FCM de priorité élevée sur Android
Les messages à priorité élevée sur Android sont destinés aux contenus urgents et visibles par l'utilisateur, et doivent générer des notifications visibles par l'utilisateur. Si FCM détecte un schéma dans lequel les messages n'entraînent pas de notifications visibles par l'utilisateur, vos messages peuvent être rétrogradés en priorité normale ou délégués pour être traités par les services Google Play.
FCM utilise sept jours de comportement des messages pour déterminer s'il faut déprioriser ou relayer les messages. Il prend cette décision indépendamment pour chaque instance de votre application. Si, en réponse à des messages à priorité élevée, des notifications sont affichées de manière visible pour l'utilisateur, vos futurs messages à priorité élevée ne seront pas affectés.
Délégation de notifications avec les services Google Play
Les messages de notification à priorité élevée qui répondent à certains critères sont transmis par proxy par les services Google Play au lieu d'être dépriorisés. Cela signifie que les notifications sont affichées par les services Google Play au nom de l'application, sans qu'il soit nécessaire de la démarrer. Cela permet d'offrir une meilleure expérience utilisateur globale sur les appareils Android.
Notez que les messages de notification par proxy modifient la façon dont les analyses liées aux messages reçus sont signalées :
- Pour que les données analytiques des notifications transmises par proxy soient enregistrées, votre application doit utiliser la version 24.0.0 ou ultérieure du SDK FCM.
- Vous constaterez peut-être des retards ou des baisses du nombre de messages reçus par rapport au nombre de messages reçus avant l'introduction des notifications par proxy. En effet, les données analytiques des notifications transmises par proxy ne sont enregistrées qu'une fois que votre application démarre, et peuvent ne pas être enregistrées du tout si la notification n'entraîne pas l'ouverture de l'application.
Le proxy des messages de notification de cette manière est le comportement par défaut des applications utilisant Android Q ou version ultérieure et les services Google Play version 19054000 ou ultérieure. Les messages envoyés via l'API HTTP v1 sont transmis par proxy, mais pas ceux envoyés via la console Firebase ou les anciennes API. Notez que cette fonctionnalité est actuellement en version bêta et qu'elle est susceptible d'être modifiée.
Bien que nous vous recommandions vivement de laisser la délégation activée pour ses avantages sur la batterie et la mémoire de l'appareil, vous pouvez désactiver ce comportement de l'une des manières suivantes :
- Au niveau de l'application : dans le fichier manifeste de votre application, ajoutez la directive
<meta-data android:name= "delivery_metrics_exported_to_big_query_enabled" android:value="false"/>. - Par instance d'application : pour l'instance d'application, définissez
fun setNotificationDelegationEnabled(disable: Boolean): Task<Void!>dans le flux d'interface utilisateur de votre application, en fonction du cas d'utilisation spécifique. - Pour chaque message : définissez la clé
proxysurDENYdans l'objetAndroidNotificationde la requête d'envoi.
Mesurer la dépriorisation des messages sur Android
Messages individuels Lors de la distribution, vous pouvez déterminer si un message individuel a été dépriorisé ou non en comparant sa priorité de distribution, à partir de getPriority(), avec sa priorité d'origine, à partir de getOriginalPriority().
Tous les messages L'API FCM Aggregate Delivery Data peut indiquer le pourcentage de tous vos messages vers Android qui sont dépriorisés. Certains messages peuvent être omis des rapports de données globales, mais dans l'ensemble, ils devraient donner une vue d'ensemble des taux de dépriorisation des messages. Pour en savoir plus et obtenir un exemple de code permettant d'interroger l'API, consultez notre article sur les données de diffusion agrégées. Vous pouvez également explorer l'API à l'aide d'API Explorer.
Notifications via un proxy Les notifications transmises par proxy ne seront pas comptabilisées dans les métriques de distribution FCM ou GA actuelles. Vous constaterez peut-être une baisse de 15% maximum des métriques de distribution des notifications. Pour générer des rapports sur les messages transmis par proxy, utilisez l'API FCM Aggregate Delivery Data.
ProxyNotificationInsightPercentsindique le pourcentage de notifications transmises par proxy, ainsi que des détails sur les messages qui ne peuvent pas être transmis par proxy.
Résoudre les problèmes de retard de notification
Assurez-vous que les notifications sont activées pour votre instance d'application. Si l'utilisateur a désactivé l'autorisation de notification pour votre application, aucune de vos notifications ne sera publiée. Par conséquent, vos messages seront dépriorisés. Vous devez vérifier que les notifications sont activées avant d'envoyer des messages à priorité élevée à une instance d'application.
Évitez d'effectuer des appels réseau supplémentaires lors du traitement de votre notification. Étant donné qu'une petite partie de la population mobile Android utilise des réseaux à latence élevée, évitez d'ouvrir une connexion à vos serveurs avant d'afficher une notification. Le rappel du serveur avant la fin du temps de traitement autorisé peut être risqué pour les utilisateurs de réseaux à latence élevée.
Incluez plutôt le contenu de la notification dans le message FCM et affichez-le immédiatement. Si vous devez synchroniser du contenu supplémentaire dans l'application sur Android, vous pouvez planifier une tâche avec WorkManager pour gérer cela en arrière-plan.