Définir et gérer la priorité des messages Android

Vous avez deux options pour attribuer une priorité de distribution aux messages en aval sur Android : normale et élevée. Voici comment fonctionne la distribution des messages à priorité normale et élevée :

  • Priorité normale : il s'agit de la priorité par défaut pour les messages de données et de notification. Les messages à 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 qu'il quitte ce mode. 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 d'application en arrière-plan, choisissez la priorité de distribution normale.

  • Priorité élevéeFCM tente de distribuer immédiatement les messages à 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 à 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 normale

Bien que les messages à priorité normale conviennent aux mises à jour générales, choisissez la priorité élevée lorsque vous devez assurer une distribution immédiate pour les questions ou actions urgentes. Étant donné que le délai de distribution des messages à priorité normale peut être affecté par le mode Sommeil, définissez la plupart de vos notifications visibles par l'utilisateur sur priorité élevée pour vous assurer qu'elles sont distribuées rapidement. Par exemple, les notifications telles que les messages de chat, les problèmes liés à un compte ou les mises à jour de livraison de nourriture doivent être définies sur 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, plusieurs secondes sont nécessaires pour traiter la charge utile du message dans le gestionnaire onMessageReceived. Un peu plus de temps est alloué aux messages à priorité élevée qu'à ceux à priorité normale. Ce délai ne devrait être suffisant que pour afficher immédiatement une notification. Si vous devez effectuer des tâches supplémentaires, telles que le chargement d'une image à partir du 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 nœud de calcul distinct. Nous vous recommandons 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. Cela peut entraîner l'exécution de votre application en dehors 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 une imageUrl contenue 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. Vous devez suivre les instructions ci-dessous lorsque vous remplacez la méthode onMessageReceived pour vérifier que vos notifications sont entièrement traitées.

Définir la priorité des messages

Vous pouvez envoyer des notifications à vos utilisateurs à l'aide de Admin SDK, de l' FCM API REST et de la console Firebase. Pour modifier votre paramètre de priorité à partir de l' Admin SDK et de l'API REST 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 prise en charge.

 {
  "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'elles sont reçues par un utilisateur, suivez ces instructions pour les tester :

  1. Définissez votre appareil sur le mode Sommeil en suivant les instructions de la section Tester votre application avec le mode Sommeil.
  2. Accédez à votre FCM jeton d'enregistrement depuis votre application sur l'appareil de test. Pour en savoir plus sur l'accès au jeton, consultez Envoyer un message de test à une application en arrière-plan.
  3. 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 de FCM à priorité élevée sur Android

Les messages à priorité élevée sur Android sont destinés au contenu visible par l'utilisateur et sensible au temps, et doivent générer des notifications destinées à l'utilisateur. Si FCM détecte un schéma dans lequel les messages n'entraînent pas de notifications destinées à l'utilisateur, leur priorité peut être abaissée à normale ou ils peuvent être délégués pour être gérés par les services Google Play.

FCM utilise sept jours de comportement des messages pour déterminer s'il doit déprioriser ou proxyfier les messages. Il effectue cette détermination indépendamment pour chaque instance de votre application. Si, en réponse à des messages à priorité élevée, des notifications s'affichent 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 proxyfiés 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. Cette opération est effectuée pour offrir une meilleure expérience utilisateur globale sur les appareils Android.

Notez que les messages de notification proxyfiés introduisent des modifications dans la façon dont les analyses liées aux messages reçus sont signalées :

  • Pour que les analyses des notifications proxyfiées soient signalées, votre application doit utiliser le SDK FCM version 24.0.0 ou ultérieure.
  • Vous remarquerez peut-être des retards ou des baisses du nombre de messages reçus par rapport au nombre avant l'introduction des notifications proxyfiées. En effet, les analyses des notifications proxyfiées ne sont signalées qu'une fois votre application démarrée, et peuvent ne pas être signalées du tout si la notification n'entraîne pas l'ouverture de l'application.

La proxyfication des messages de notification de cette manière est le comportement par défaut pour les applications utilisant Android Q+ et les services Google Play version 19054000 ou ultérieure. Les messages envoyés via l'API HTTP v1 sont proxyfiés, mais les messages envoyés via la console Firebase ou les API héritées ne seront pas proxyfiés. Notez que cette fonctionnalité est actuellement en version bêta et peut être modifiée.

Bien que nous vous recommandions vivement de laisser la délégation activée pour ses avantages en termes de batterie et de 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"/>.
  • Au niveau de l'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.
  • Par message : définissez la clé proxy sur DENY dans l'objet AndroidNotification pour 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é distribuée, à 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 envoyés à Android qui sont dépriorisés. Certains messages peuvent être omis des rapports de données agrégées, mais dans l'ensemble, ils devraient donner une vue globale des taux de dépriorisation des messages. Pour en savoir plus et obtenir un exemple de code pour interroger l'API, consultez notre article sur les données de distribution agrégées. Vous pouvez également l'explorer à partir de l' explorateur d'API.

  • Notifications proxyfiées : les notifications proxyfiées ne seront pas comptabilisées dans les métriques de distribution FCM ou GA actuelles. Vous constaterez peut-être une baisse allant jusqu'à 15 % des métriques de distribution des notifications. Pour générer des rapports sur les messages proxyfiés, utilisez l' FCMAPI Aggregate Delivery Data. ProxyNotificationInsightPercents indique le pourcentage de notifications proxyfiées et les détails des messages qui ne peuvent pas être proxyfiés.

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 au serveur avant la fin du délai de traitement autorisé peut être risqué pour les utilisateurs sur les 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 la gérer en arrière-plan.