web-dev-qa-db-fra.com

Notifications Firebase à la fermeture de l'application

J'ai implémenté la notification Firebase dans mon application Android. Lorsque mon application est en cours d'exécution, la notification s'affiche avec ma mise en page personnalisée, mais lorsque l'application n'est pas en cours d'exécution, la notification s'affiche avec la mise en page par défaut. Comment puis-je changer la mise en page de notification pour ma mise en page lorsque l'application n'est pas en cours d'exécution. En outre, je stocke les préférences partagées pour permettre à l'utilisateur de basculer les notifications. Mais lorsque l'application n'est pas en cours d'exécution, la notification s'affiche quand même. Comment peut atteindre cela?

@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
    if(SettingsFragment.getReceiceNotification()){ //if user wants to receive notification

    NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    RemoteViews remoteViews = new RemoteViews(getPackageName(),R.layout.Push_notification_layout);

    remoteViews.setImageViewResource(R.id.Push_notif_icon,R.mipmap.ic_bird_black);

    Intent intent = new Intent(this,MainActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    PendingIntent pendingIntent = PendingIntent.getActivity(this,0,intent,PendingIntent.FLAG_ONE_SHOT);


    NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this);
    notificationBuilder.setContent(remoteViews);
    notificationBuilder.setContentTitle("Radyo Türkkuşu");
    notificationBuilder.setContentText(remoteMessage.getNotification().getBody());

    notificationBuilder.setAutoCancel(true);
    notificationBuilder.setSmallIcon(R.mipmap.ic_launcher);
    notificationBuilder.setContentIntent(pendingIntent);
    remoteViews.setTextViewText(R.id.Push_title, "Radyo Türkkuşu");
    remoteViews.setTextViewText(R.id.Push_context, remoteMessage.getNotification().getBody());
    //notificationBuilder.setLights (ContextCompat.getColor(MainActivity.context, R.color.pushColor), 5000, 5000);
    notificationManager.notify(0,notificationBuilder.build());
    }

}
15
orkun

Votre problème est que vous l'utilisez avec le plateau de notification.

Voir ceci link

Messages avec notification et données utiles, à la fois en arrière-plan et en avant-plan. Dans ce cas, la notification est transmise à la barre des tâches système du périphérique et la charge utile de données est livrée dans les extras de l’intention de votre activité de lanceur.

Si vous utilisez {data:"something"}(data-message) avec {notification:"something"}(display-message) alors que votre application est en arrière-plan, la charge de données sera transmise aux extras de l'intention mais pas à la méthode onMessageReceived().Je suppose que vous implémentez votre code pour afficher la notification. Ainsi, lorsque votre application est au premier plan, onMessageReceived() est déclencheur et il affiche la notification souhaitée, mais s'il n'est pas onMessageReceived() no get trigger, le système Android le gérera avec votre charge de notification. Il vous suffit de supprimer {notification:"something"}(display-message/notification tray) de votre code côté serveur pour toujours vous assurer que onMessageReceived().

Pour quiconque, gardez la mention, onMessageReceived() déclenchera toujours, qu’il s’agisse de premier plan ou de fond, veuillez visiter cette link

22
teck wei

Il existe deux types de messages FCM 

  1. Message de notification
  2. Message de données

Les messages envoyés depuis la console Firebase sont Notification message. Afin d’obtenir un message dans onMessageReceived (), utilisez Message de données. Utilisez le code ci-dessous côté serveur pour envoyer un message de notification de données

{
   "to" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
   "data" : {
     "Nick" : "Mario",
     "body" : "great match!",
     "Room" : "PortugalVSDenmark"
   },
 }

Référence https://firebase.google.com/docs/cloud-messaging/concept-options#notifications_and_data_messages

10
Shshank Bhong

Votre code ne serait jamais déclenché lorsque votre application est fermée ou en cours d'exécution en arrière-plan. Voir ceci: Notification Firebase

Ce que vous devez faire, c'est vérifier le mode de démarrage de l'application, appuyez sur la notification ou sur l'icône du lanceur. Pour ce faire, certaines données doivent être ajoutées à la notification, puis récupérées lors de la première activité de démarrage de votre application. Si vous pouvez les récupérer avec succès, cela signifie que votre application est lancée en appuyant sur la notification, vous pouvez alors faire ce que vous voulez.

0
Freddie