Comment réduire plusieurs notifications en une seule à l’aide de Firebase?

J’ai une fonction dans Firebase Cloud Functions qui est utilisée pour envoyer des notifications à des utilisateurs spécifiques dans mon application et a pour notificationContent le code suivant:

 const notificationContent = { notification: { title: "My Notification Title", body: "My Notification Body", icon: "default", sound : "default" } }; 

J’ai essayé d’utiliser collapse_key: "unique_key" mais cela n’a aucun effet. Je lis le a un effet que lorsque l’appareil est hors ligne. J’ai également utilisé une tag: "unique" mais chaque fois qu’une nouvelle notification arrive, elle remplacera la plus ancienne.

Y at-il un moyen de réaliser cela avec Firebase? Si je reçois plus d’une notification, être regroupé dans une seule?

entrez la description de l'image ici

Merci d’avance!

Si vous souhaitez utiliser davantage de fonctionnalités de notification personnalisables et avancées. Vous ne devez envoyer à la FCM que des data utiles et créer une notification côté client Android.
N’oubliez pas que si vous envoyez FCM avec notification charge de notification ou une charge de notification + data , la notification sera créée par le système principal Android et la méthode onReceive BroadcastReceiver ne sera pas appelée si votre application est en arrière-plan.
Si vous envoyez FCM avec data charge de data , il appellera tout le temps onReceive , ce qui vous permettra de générer manuellement des notifications personnalisées côté client Android. (La plupart des applications utilisent cette dernière méthode.)

J’espère que ce lien serait utile.

La solution la plus simple et la plus flexible consiste à étendre FirebaseMessagingService et à gérer la notification vous-même. Mais d’abord, au lieu d’utiliser la notification sur votre notificationContent dans votre fonction cloud, vous devez la modifier en data pour pouvoir envoyer un message de données au lieu d’un message de notification. La différence est que le message de notification aura une clé de réduction implicite (le nom du package de l’application), alors que le message de données n’en aura pas. Mais le message de données doit être traité sur le client, sinon il ne sera pas affiché.

Voici un exemple de ce dont vous aurez besoin pour votre FirebaseMessagingService :

 public class MyFCMService extends FirebaseMessagingService { @Override public void onMessageReceived(RemoteMessage remoteMessage) { if (remoteMessage.getNotification() != null) { //this notification was sent from the Firebase console, because in our cloud function, we are using the DATA tag, not the notification tag //so here we have to handle the notification that was sent from the console ... } else if (remoteMessage.getData().get(KEY) != null) { //this data message was sent from our cloud function //KEY is one of the keys that you are using on the cloud function //in your example, you are using the keys: title, body, icon, sound //display the notification to the user ... notificationManager.notify(TAG, ID, notificationBuilder.build()); //you have to use the same TAG and the same ID on each notification if you want your 2nd notification to simply update the text of the first one, instead of showing as a new notification } } } 

PS Lorsque vous envoyez une notification à partir de votre fonction cloud (si vous utilisez la balise de data , il s’agit en fait d’un message de données et non d’un message de notification), cette méthode est appelée, que l’application soit en arrière-plan ou au premier plan. CEPENDANT , lorsque vous envoyez une notification à partir de la console Firebase, cette méthode sera appelée UNIQUEMENT si l’application est au premier plan. Si l’application est en arrière-plan, le SDK Firebase gérera la notification et la montrera à l’utilisateur. Dans certains cas, il est judicieux d’afficher une notification uniquement lorsque l’utilisateur n’exécute pas l’application, par exemple si vous souhaitez publier certaines nouvelles fonctionnalités de l’application. Dans ce cas, vous pouvez utiliser une balise unique sur la console de notification (par exemple, “display_in_foreground”) et vérifier cette balise sur le client. Si vous avez défini ce paramètre sur true, vous pouvez afficher la notification même aux utilisateurs qui exécutent actuellement l’application, ou s’il est faux, vous pouvez choisir de ne pas afficher la notification. Cette vérification n’aura lieu que si l’application est au premier plan. Si c’est en arrière-plan, cela ne sera pas appelé du tout et le SDK se chargera d’afficher la notification.