0

Voici mon code, Lorsque mon application s'exécute en premier plan, elle ouvre une activité ciblée mais lorsque l'application est fermée ou en arrière-plan, elle n'ouvre pas d'activité ciblée, aidez-moi s'il vous plaît pour résoudre ce problèmeCliquer sur la notification FCM ouvre activité actuellement fermée non ciblée activité

Je veux que en cliquant sur la notification va ouvrir l'activité ciblée même l'application est en cours d'exécution/fermée.

public void onMessageReceived(RemoteMessage remoteMessage) { 

    session = new Session(this); 
    // if (session.getBscloggedin() || session.getAdploggedin()) { 
     // Log.d(TAG, "FROM:" + remoteMessage.getFrom()); 

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

     //Check if the message contains notification 

     if (remoteMessage.getNotification() != null) { 
      Log.d(TAG, "Mesage body:" + remoteMessage.getNotification().getBody()); 
      sendNotification(remoteMessage.getNotification().getBody()); 
     } 
    } 


/** 
* Dispay the notification 
* @param body 
*/ 


private void sendNotification(String body) { 

    //for CS101 announcement notification 
    if (body.contains("CS101")) { 
     Intent intent = new Intent(this, CS101noti.class); 
     intent.putExtra("body", body); 
     intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | 
       Intent.FLAG_ACTIVITY_SINGLE_TOP); 

     PendingIntent pendingIntent = PendingIntent.getActivity(this, 0/*Request code*/, intent, 0); 
     //Set sound of notifica tion 
     Uri notificationSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 

     NotificationCompat.Builder notifiBuilder = new NotificationCompat.Builder(this) 
       .setSmallIcon(R.mipmap.ic_launcher) 
       .setContentTitle("mine") 
       .setContentText(body) 
       .setAutoCancel(true) 
       .setSound(notificationSound) 
       .setContentIntent(pendingIntent); 

     NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 
     notificationManager.notify(0 /*ID of notification*/, notifiBuilder.build()); 
    } 
+0

https://stackoverflow.com/questions/13716723/open-application-after-clicking-on-notification vérifier ce lien –

Répondre

0

onMessageReceived rappel n'est pas appelé lorsque vous recevez messages de notification en arrière-plan. Si vous recevez ce type de message en arrière-plan, vous ne pouvez le gérer que dans une activité de lancement. La solution consisterait soit à modifier le moteur afin qu'il n'envoie que des messages de données et à les gérer en interne, soit à écrire du code de routage dans votre activité de lancement.

0

utilisation "click_action" attribut de votre base à partir de laquelle vous envoyez les notifications push. dans cette valeur d'attribut, vous devez passer le chemin complet de la classe d'activité, ce qui devrait être ouverte lorsque vous cliquez sur ce notification.for plus référence se handling firebase push

0
Intent intent = new Intent(this, CS101noti.class); 
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
.... 
0

Le code de requête doit être unique.

En général, les gens partagent avec nous un exemple comme donner le code de demande 0 (zéro). Je suis celui de copier/coller développeur parfois. Mais récemment, j'ai fait face à une erreur en utilisant cette ligne.

PendingIntent.getActivity(myContext, 0, myIntent, 0); 

Chaque fois que l'application reçoit une notification, l'activité d'intention reçoit des données anciennes en raison de requestCode. Voici la documentation sur cette méthode. Renvoie un PendingIntent existant ou nouveau correspondant aux paramètres donnés. Par conséquent, le deuxième paramètre (requestCode) doit être unique à l'intention. Si vous utilisez le même code de requête pour chaque notification, l'activité recevra les anciennes données. Donc, votre requestCode devrait être unique.

Il existe également une autre solution.Utilisez PendingIntent.FLAG_UPDATE_CURRENT comme indicateur. Le doc dit cela;

Si le PendingIntent décrit existe déjà, mais garder remplacer ses données supplémentaires avec ce qui est dans cette nouvelle intention.

+0

Pouvez-vous expliquer ce second paramètre (requestCode) doit être unique à l'intention? –

+0

Le code de demande doit être unique dans votre intention. Sinon, il créera l'intention avec le même code de requête ce qui signifie ouvrir la même activité – mertsimsek

+0

J'ai essayé mais cela n'a pas fonctionné PendingIntent pendingIntent = PendingIntent.getActivity (this, 0, intention, PendingIntent.FLAG_UPDATE_CURRENT) –