onMessageReceived(RemoteMessage remoteMessage)方法基于以下情况调用。
{
"to": "设备令牌列表",
“通知”:{
"body": "你的通知正文",
"title": "你的通知标题"
},
“数据”:{
"body": "您的数据通知正文",
"title": "你在 Title 中的通知标题",
"key_1": "key_1 的值",
"image_url": "www.abc.com/xyz.jpeg",
"key_2": "key_2 的值"
}
}
- 前台应用:
onMessageReceived(RemoteMessage remoteMessage) 调用,在通知栏中显示 LargeIcon 和 BigPicture。我们可以从 notification 和 data 块
中读取内容
- 后台应用:
onMessageReceived(RemoteMessage remoteMessage) 未调用,系统托盘将接收消息并从 通知 块中读取正文和标题,并在通知栏中显示默认消息和标题。
在这种情况下,从 json 中删除 notofocation 块
{
"to": "设备令牌列表",
“数据”:{
"body": "您的数据通知正文",
"title": "你在 Title 中的通知标题",
"key_1": "key_1 的值",
"image_url": "www.abc.com/xyz.jpeg",
"key_2": "key_2 的值"
}
}
- 前台应用:
onMessageReceived(RemoteMessage remoteMessage) 调用,在通知栏中显示 LargeIcon 和 BigPicture。我们可以从 notification 和 data 块
中读取内容
- 后台应用:
onMessageReceived(RemoteMessage remoteMessage) 调用,系统托盘将不会收到消息,因为 notification 键不在响应中。在通知栏中显示 LargeIcon 和 BigPicture
代码
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());
}
参考链接:
https://firebase.google.com/docs/cloud-messaging/android/receive