I have a strange issue. I have two way to send notifications in my Android app; one from the Android service and the other through FCM.
The scenarios are as follows:
- Regardless of whether the app is running or not, the icon of the notification sent from the Android service appears correctly.
- When the app is running, the notification icon appears still appears correctly if I send the notification via FCM.
- But if the app isn't running and I send the notification via FCM, a white square is displayed instead of the notification icon.
My code in FCMService:
Uri defaultSoundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.notification_icon)
.setContentTitle("Android App")
.setContentText(messageBody)
.setAutoCancel(true)
.setSound(defaultSoundUri)
.setContentIntent(pendingIntent);
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(0, notificationBuilder.build());
Most likely your problem is the difference between
notification-messages
anddata-messages
.Please read: https://firebase.google.com/docs/cloud-messaging/concept-options#notifications_and_data_messages
Currently the FCM Web Console only sends notification-messages
So all the messages sent via Web Console (or via API with a
notification
payload) will be have in this way:onMessageReceived()
.
If the behavior that you want is that
onMessageReceived()
is always called:then you need to use a
data-only (no notification) message
This is a FMC bug detailed in github fcm page.
https://github.com/firebase/quickstart-android/issues/4