Getting Multiple Notification instead of one in An

2019-08-20 08:06发布

问题:

I am using Firebase notification in my android app. Generating notification using below code :

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();
}
}

The issue is multiple notification on status bar is generating instead of single, for the Same notification sent from the backend.

i have taken NOTIFICATION_ID as a static integer in my constant file. and i am incrementing it for differnt notification.

What might be the issue ?

回答1:

do not increase notification id when u receive same notification. you need to set some flag to check if the notification received is the same or different notification. when you send notification from FCM send some extra payload which has key-value pair which bears the notification id. set that notification ID instead of increasing from your code. Hope it helps