web-dev-qa-db-fra.com

Comment gérer les notifications firebase sur le fond et au premier plan?

Je veux gérer le message de notification firebase sur le fond et au premier plan. Je vais envoyer un message qui consistera en un lien youtube du développeur et lorsque l'utilisateur clique sur la barre de notification, il doit indiquer à l'utilisateur d'ouvrir ce lien Est-ce que quelqu'un sait comment c'est fait?

 public void onMessageReceived(RemoteMessage remoteMessage) {
    // [START_EXCLUDE]
    // There are two types of messages data messages and notification messages. Data messages are handled
    // here in onMessageReceived whether the app is in the foreground or background. Data messages are the type
    // traditionally used with GCM. Notification messages are only received here in onMessageReceived when the app
    // is in the foreground. When the app is in the background an automatically generated notification is displayed.
    // When the user taps on the notification they are returned to the app. Messages containing both notification
    // and data payloads are treated as notification messages. The Firebase console always sends notification

    // [END_EXCLUDE]

    // TODO(developer): Handle FCM messages here.
    // Not getting messages here? See why this may be:
    Log.d(TAG, "From: " + remoteMessage.getFrom());

    // Check if message contains a data payload.
    if (remoteMessage.getData().size() > 0) {
        Log.d(TAG, "Message data payload: " + remoteMessage.getData());
    }

    // Check if message contains a notification payload.
    if (remoteMessage.getNotification() != null) {
        Log.d(TAG, "Message Notification Body: " + remoteMessage.getNotification().getBody());
    }

    // Also if you intend on generating your own notifications as a result of a received FCM
    // message, here is where that should be initiated. See sendNotification method below.
}

que faire ensuite pour atteindre mon objectif? Merci d'avance:)

6
vishal gupta

Vous devriez envoyer des données utiles dans votre message FCM. La charge de données est reçue avec la méthode de message, que votre application soit au premier plan ou à l'arrière-plan. Gérer l'action là-bas. Comme afficher les notifications en lisant toujours la charge de données, ou si vous souhaitez afficher une boîte de dialogue d'alerte lorsque votre application est ouverte ou au premier plan.

voici un exemple de charge utile:

{
  "to": "registration_id_or_topic",
  "data": {
        "message": "This is a Firebase Cloud Messaging Topic Message!",
        "youtubeURL": "https://youtu.be/A1SDBIViRtE"
   }
}

Puis dans votre onMessageReceived:

public void onMessageReceived(RemoteMessage remoteMessage) {
   if (remoteMessage.getData().size() > 0) {
        Log.d(TAG, "Message data payload: " + remoteMessage.getData());
        Map<String, String> receivedMap = remoteMessage.getData();
        String youtubeURL = receivedMap.get("youtubeURL");
        showNotificationWithURLAction(youtubeURL);
   }
   .....
}

vous pouvez facilement implémenter la méthode showNotificationWithURLAction (...) en le recherchant sur Google. Un échantillon est ici

4
drulabs

Ceci est une copie possible de cette question . N'envoyez pas de "notification" dans le corps de votre message Push.

Donc, fondamentalement, j'ai changé le corps de la demande de notification Push de:

{
   "data": {
       "type" : "mytype"
    },
    "notification": {
        "title": "My Title",
        "body": "My Notification Message"
    },
    "to": "/topics/all"
}

À:

{
   "data": {
       "type" : "mytype",
       "title": "My Title",
       "body": "My Notification Message"
    },
    "to": "/topics/all"
}

Maintenant, mon application appelle onMessageReceived () à chaque fois, même en arrière-plan, et je viens de changer les méthodes pour utiliser le titre et le message de notification obtenus dans les données Push.

3
Alvin Rusli

Si vous souhaitez rediriger l'utilisateur vers le contenu de votre application plutôt que d'utiliser deepLink, voici comment ouvrir le lien lorsque vous cliquez sur la notification:

Intent notificationIntent = new Intent(Intent.ACTION_VIEW);
        notificationIntent.setData(Uri.parse(remoteMessage.getData().getString("url")); 
        PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0);
         // Resources r = getResources();
          Notification notification = new NotificationCompat.Builder(context)
                  .setTicker("yortext")
                  .setSmallIcon(Android.R.drawable.ic_menu_report_image)
                  .setContentTitle("title")
                  .setContentText("content")
                  .setContentIntent(pendingIntent)
                  .build();

          NotificationManager notificationManager =  (NotificationManager) context.getSystemService(Service.NOTIFICATION_SERVICE);
          notificationManager.notify(0, notification);

Pour envoyer des données utiles, allez dans la console firebase, créez un nouveau message. Vous y trouverez des options avancées vous permettant de placer vos données dans des paires clé/valeur. Mettez Url comme sur la photo ci-dessous.

 Adding payload to Firebase message

0
Drake29a

Le système Android traitera toujours les messages contenus dans le champ de notification dans la charge utile. Si vous souhaitez que votre application gère la notification, vous devez insérer votre lien YouTube dans ce champ de données dans votre contenu.

{ "data" : 
    { "link" : "www.youtube.com"}
}

Cette notification est reçue sur l'application en tant que RemoteMessage. Utilisez remoteMessage.getData () pour obtenir votre lien youtube. 

Voir https://firebase.google.com/docs/cloud-messaging/concept-options#messages-with-both-notification-and-data-payloads

0
Lindani Masinga