Méthode onMessageReceived (RemoteMessage remoteMessage) appelée en fonction des cas suivants.
- Réponse FCM avec notification et bloc de données :
{
"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"
}
}
- Application au premier plan:
onMessageReceived (RemoteMessage remoteMessage) appelé, affiche LargeIcon et BigPicture dans la barre de notification. Nous pouvons lire le contenu de la notification et du bloc de données
- Application en arrière-plan:
onMessageReceived (RemoteMessage remoteMessage) non appelé, la barre d'état système recevra le message et lira le corps et le titre du bloc de notification et affichera le message et le titre par défaut dans la barre de notification.
- Réponse FCM Avec uniquement un bloc de données :
Dans ce cas, supprimer les blocs de notification de 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"
}
}
Solution pour appeler onMessageReceived ()
- Application au premier plan:
onMessageReceived (RemoteMessage remoteMessage) appelé, affiche LargeIcon et BigPicture dans la barre de notification. Nous pouvons lire le contenu de la notification et du bloc de données
- Application en arrière-plan:
onMessageReceived (RemoteMessage remoteMessage) appelé, la barre d'état système ne recevra pas le message car la clé de notification ne figure pas dans la réponse. Affiche LargeIcon et BigPicture dans la barre de notification
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());
}
Lien de référence:
https://firebase.google.com/docs/cloud-messaging/android/receive