Die Methode onMessageReceived (RemoteMessage remoteMessage) wird basierend auf den folgenden Fällen aufgerufen.
- FCM Reaktion mit Benachrichtigung und Datenblock:
{
"to": "device token list",
"notification": {
"body": "Body of Your Notification",
"title": "Title of Your Notification"
},
"data": {
"body": "Body of Your Notification in Data",
"title": "Title of Your Notification in Title",
"key_1": "Value for key_1",
"image_url": "www.abc.com/xyz.jpeg",
"key_2": "Value for key_2"
}
}
- App im Vordergrund:
onMessageReceived (RemoteMessage remoteMessage) wird aufgerufen und zeigt LargeIcon und BigPicture in der Benachrichtigungsleiste an. Wir können den Inhalt von beiden lesen Benachrichtigung und Datenblock
- App im Hintergrund:
onMessageReceived (RemoteMessage remoteMessage) wird nicht aufgerufen. Die Taskleiste empfängt die Nachricht und liest Text und Titel aus dem Benachrichtigungsblock und zeigt die Standardnachricht und den Standardtitel in der Benachrichtigungsleiste an.
- FCM Antwort Mit nur Datenblock:
In diesem Fall entfernen Sie Benachrichtigungsblöcke aus json
{
"to": "device token list",
"data": {
"body": "Body of Your Notification in Data",
"title": "Title of Your Notification in Title",
"key_1": "Value for key_1",
"image_url": "www.abc.com/xyz.jpeg",
"key_2": "Value for key_2"
}
}
Lösung zum Aufrufen von onMessageReceived ()
- App im Vordergrund:
onMessageReceived (RemoteMessage remoteMessage) wird aufgerufen und zeigt LargeIcon und BigPicture in der Benachrichtigungsleiste an. Wir können den Inhalt von beiden lesen Benachrichtigung und Datenblock
- App im Hintergrund:
Wenn onMessageReceived (RemoteMessage remoteMessage) aufgerufen wird, empfängt die Taskleiste die Nachricht aufgrund von nicht Benachrichtigungsschlüssel nicht in der Antwort enthalten ist. Zeigt LargeIcon und BigPicture in der Benachrichtigungsleiste an
Code
private void sendNotification(Bitmap bitmap, String title, String
message, PendingIntent resultPendingIntent) {
NotificationCompat.BigPictureStyle style = new NotificationCompat.BigPictureStyle();
style.bigPicture(bitmap);
Uri defaultSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
NotificationManager notificationManager = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE);
String NOTIFICATION_CHANNEL_ID = mContext.getString(R.string.default_notification_channel_id);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
NotificationChannel notificationChannel = new NotificationChannel(NOTIFICATION_CHANNEL_ID, "channel_name", NotificationManager.IMPORTANCE_HIGH);
notificationManager.createNotificationChannel(notificationChannel);
}
Bitmap iconLarge = BitmapFactory.decodeResource(mContext.getResources(),
R.drawable.mdmlogo);
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(mContext, NOTIFICATION_CHANNEL_ID)
.setSmallIcon(R.drawable.mdmlogo)
.setContentTitle(title)
.setAutoCancel(true)
.setSound(defaultSound)
.setContentText(message)
.setContentIntent(resultPendingIntent)
.setStyle(style)
.setLargeIcon(iconLarge)
.setWhen(System.currentTimeMillis())
.setPriority(Notification.PRIORITY_MAX)
.setChannelId(NOTIFICATION_CHANNEL_ID);
notificationManager.notify(1, notificationBuilder.build());
}
Referenzlink:
https://firebase.google.com/docs/cloud-messaging/android/receive