phương thức onMessageReceured (RemoteMessage remoteMessage) được gọi dựa trên các trường hợp sau.
- Phản hồi FCM Với khối thông báo và dữ liệu :
{
"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"
}
}
- Ứng dụng trong Tiền cảnh:
onMessageReceured (RemoteMessage remoteMessage) được gọi, hiển thị LargeIcon và BigPicture trong thanh thông báo. Chúng tôi có thể đọc nội dung từ cả khối thông báo và dữ liệu
- Ứng dụng trong nền:
onMessageReceured (RemoteMessage remoteMessage) không được gọi, khay hệ thống sẽ nhận thông báo và đọc nội dung và tiêu đề từ khối thông báo và hiển thị thông báo và tiêu đề mặc định trong thanh thông báo.
- Phản hồi FCM Chỉ với khối dữ liệu :
Trong trường hợp này, xóa các khối thông báo khỏi 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"
}
}
Giải pháp cho việc gọi onMessageReceured ()
- Ứng dụng trong Tiền cảnh:
onMessageReceured (RemoteMessage remoteMessage) được gọi, hiển thị LargeIcon và BigPicture trong thanh thông báo. Chúng tôi có thể đọc nội dung từ cả khối thông báo và dữ liệu
- Ứng dụng trong nền:
onMessageReceured (RemoteMessage remoteMessage) được gọi, khay hệ thống sẽ không nhận được thông báo vì khóa thông báo không có trong phản hồi. Hiển thị LargeIcon và BigPicture trên thanh thông báo
Mã
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());
}
Liên kết tham khảo:
https://firebase.google.com/docs/cloud-messaging/android/receive