3

My app is receiving the notification correctly but is failing to show a notification pop up with the received info (If the app is opened).

N.B.: In case if the app is in the background, the notifications are displayed without any issue.


My Code:

I receive the notification in this method:

@Override
public void onMessageReceived(RemoteMessage remoteMessage)
{
    Log.d(TAG, "From: " + remoteMessage.getFrom());

    if(remoteMessage!=null)
    {
        String id = null;
        String title = null;
        String body = null;
        String launchPage = null;

        if(remoteMessage.getNotification()!=null)
        {
            title = remoteMessage.getNotification().getTitle();
            body = remoteMessage.getNotification().getBody();
        }

        if(remoteMessage.getMessageId()!=null)
        {
            id = remoteMessage.getMessageId();
        }

        Log.i(TAG, "id: " + id);
        Log.i(TAG, "title: "+ title);
        Log.i(TAG, "body: " + body);

        int notif_id = 0;

        sendNotification(notif_id, title, body, launchPage);
    }
}

then it calls this one (which is supposed to show the notification as i understand):

private void sendNotification(int id, String title, String messageBody, String launchPage)

    Uri defaultSoundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);

    NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
                    .setSmallIcon(android.R.drawable.stat_sys_download)
                    .setContentTitle("OMR - "+title)
                    .setContentText(messageBody)
                    .setAutoCancel(true)
                    .setSound(defaultSoundUri)
                    .setColor(ContextCompat.getColor(this, R.color.colorPrimary))
                    .setChannelId(CHANNEL_ID);

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

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        createChannel(notificationManager, CHANNEL_ID);
    }

    Toast.makeText(this, "Received a notif...", Toast.LENGTH_SHORT).show();

    //this line is not showing a notification
    notificationManager.notify(id, notificationBuilder.build());
}

Firebase notification

{
"data": {
    "message": "data payload only used to force using OnMessageReceived() if in BACKGROUND",
    "notif_id": 1
},
"to" : "e04OAVaRw30:APA91bGyv5_tt4IWRkurjlqkqNlCxTBV8oRne18tQ5puniHPItOMgg11kdt56t5jfZnasb4Ms-tH9xUgWQhHy2eM487llRtlM9_V_PoWJI9KSr6XgCaysiDyS",
"notification": {
    "title": "Notification",
    "body": "This is Notification 2",
    "sound":"default"
}

}


Result

  • the notification is built correctly
  • sound played correctly
  • notif put in system tray
  • BUT no notification popup appears (i have to show a custom dialog for that)

My Problem lies in this specific line

notificationManager.notify(id, notificationBuilder.build());

which is failing to show the notification

Update i have read more about Android notifications in

https://developer.android.com/guide/topics/ui/notifiers/notifications

and found out that notifications only show in the notification drawer without popping up (as Heads-up notifications).

and according to this question, i can force the notifications to show as Heads-up notifications if i added a high priority to them. Unfortunately this is not working either.

SoliQuiD
  • 2,093
  • 1
  • 25
  • 29

3 Answers3

7

This image explains it all if you are using FCM.

Shivam Yadav
  • 958
  • 11
  • 23
  • thank you, ur chart is very enlightening. however, i am using both payloads in the foreground and im having my notif sent to system tray. – SoliQuiD Feb 20 '19 at 13:54
  • 2
    @SoliQuiD Yeah, but you will get the call in onMessageReceived also then it's upto you how do you handle it. – Shivam Yadav Feb 21 '19 at 07:58
0

Well, in my case some of the data I'm passing into the message body is null in the onReceived.

Fixed that and my notification popup was showing again

0

Change

val notificationManager = packageContext.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager

to

val notificationManager = NotificationManagerCompat.from(packageContext.applicationContext)

helps to me

pirogtm
  • 90
  • 7