0

Ich benutze Firebase-Benachrichtigung in meiner Android-App. generiert Benachrichtigung unter Code:Getting Multiple Notification statt einer in Android

public class FirebaseNotificationService extends FirebaseMessagingService { 

private static final String TAG = FirebaseNotificationService.class.getSimpleName(); 
private String strTitle = "My Notification"; 
private String strMessage = "No Description"; 

@Override 
public void onMessageReceived(RemoteMessage remoteMessage) { 
    if (Prefrences.getBooleanValue(getApplicationContext(), IS_LOGIN) && Prefrences.getBooleanValue(getApplicationContext(), Prefrences.IS_NOTIFICATION)) { 
     if (remoteMessage.getData().get("title") != null) { 
      strTitle = remoteMessage.getData().get("title"); 
     } 
     if (remoteMessage.getData().get("message") != null) { 
      strMessage = remoteMessage.getData().get("message"); 
     } 
     sendNotification(strTitle, strMessage); 
    } 
} 

private void sendNotification(String strTitle, String messageBody) { 
    try { 
     if (!getTopActivity().equals("com.app.activity.NotificationActivity")) { 
      Intent intent = new Intent(this, DashboardActivity.class); 
      intent.putExtra("notification", "yes"); 
      intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
      PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 /* Request code */, intent, 
        PendingIntent.FLAG_ONE_SHOT); 

      Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
      NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this) 
        .setSmallIcon(R.mipmap.app_icon) 
        .setContentTitle(strTitle) 
        .setContentText(messageBody) 
        .setAutoCancel(true) 
        .setSound(defaultSoundUri) 
        .setContentIntent(pendingIntent); 

      NotificationManager notificationManager = 
        (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 

      notificationManager.notify(++NOTIFICATION_ID /* ID of notification */, notificationBuilder.build()); 
     } else { 
      Intent intent = new Intent(); 
      intent.setAction("load_service"); 
      sendBroadcast(intent); 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

public String getTopActivity() { 
    ActivityManager am = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE); 
    List<ActivityManager.RunningTaskInfo> taskInfo = am.getRunningTasks(1); 
    return taskInfo.get(0).topActivity.getClassName(); 
} 
} 

Das Problem ist, mehrere Benachrichtigung in der Statusleiste wird anstelle von einzelnen, für die gleiche Mitteilung aus dem Backend gesendet zu erzeugen.

Ich habe NOTIFICATION_ID als eine statische ganze Zahl in meiner konstanten Datei genommen. und ich erhöhe es für unterschiedliche Benachrichtigung.

Was könnte das Problem sein?

+0

Ich nehme an, wenn die gleiche Benachrichtigung in mehreren Zeit erhalten dann nur eine zeigen. aber verschiedene Arten von Benachrichtigungen erhalten dann mehrere anzeigen. ist richtig? – Raja

Antwort

1

Erhöhen Sie die Benachrichtigungs-ID nicht, wenn Sie die gleiche Benachrichtigung erhalten. Sie müssen ein Flag setzen, um zu prüfen, ob die empfangene Benachrichtigung dieselbe oder eine andere Benachrichtigung ist. Wenn Sie eine Benachrichtigung von FCM senden, senden Sie einige zusätzliche Payload, die ein Schlüssel/Wert-Paar hat, das die Benachrichtigungs-ID trägt. Legen Sie diese Benachrichtigungs-ID fest, anstatt sie von Ihrem Code zu erhöhen. Hoffe es hilft