Я начну с общего вопроса:
Какой именно параметр конфигурации/ s необходимы для того, чтобы сообщения FCM отображали баннер, когда приложение Android либо находится в фоновом режиме, либо закрывается?
В своем исследовании я пришел к выводу, что ответ либо лежит в:
- A) определении JSON сообщения FCM (см. ниже),
- B) коде Flutter
(т.е. FCM.instance.makeAndroidShowBannerInBackground(true) или - C) пользовательская собственная конфигурация Android, например создание пользовательских каналов сообщений
.
Код: Выделить всё
const multicastMessage = {
tokens: tokens, // Array of tokens
notification: {
title: `Alert from ${userName}`,
body: notificationBody,
},
android: {
priority: "high", // High priority for Android notifications
ttl: 60, // TTL of 60 seconds (~1 minute)
notification: {
sound: "custom_notification_sound_alert",
},
},
apns: {
headers: {
"apns-priority": "10", // High priority for APNs
// Expires in 60 seconds
"apns-expiration": `${Math.floor(Date.now() / 1000) + 60}`,
},
payload: {
aps: {
"alert": {
title: `Alert from ${userName}`,
body: notificationBody,
},
"sound": "CustomNotificationSoundAlert.wav",
},
},
},
};
Что я пробовал:
Общий поиск в Google выдает эту проблему с GitHub... но это так. старый, я не уверен, что он все еще применим.
Документация Firebase FCM... хотя существует много связанных тем, документы, похоже, не подтверждают это прямо/точно (Android показывает баннер или нет, когда он находится в фоновом режиме/убит и почему) как потенциальная проблема. Хотя я прочитал много этого, я не прочитал все документы, отчасти потому, что я не уверен, в каком разделе будет лежать ответ - Android, Flutter, "Сервер"... а FCM сложен, и понятия уже достаточно легко смешиваются в моей голове.
Я не хочу верить, что ответ кроется в (C) — пользовательской конфигурации кода Android (например, определении пользовательские каналы сообщений), потому что я думал, что FCM должен быть оболочкой... но эта часть исходного кода Firebase Android SDK/FCM (Java) действительно выглядит так:
Код: Выделить всё
notificationManager.createNotificationChannel(
new NotificationChannel(
// channel id
FCM_FALLBACK_NOTIFICATION_CHANNEL,
// user visible name of the channel
defaultChannelName,
// shows everywhere, makes noise, but does not visually intrude.
NotificationManager.IMPORTANCE_DEFAULT));
Но если это правда, что есть только один канал «по умолчанию», у которого недостаточно высокий приоритет для показа баннера, и мне нужно создать пользовательский канал в собственном коде Android... тогда почему вообще в JSON есть ключ приоритета Android? И почему не может быть дополнительного канала «по умолчанию» (с высоким приоритетом), созданного SDK, который соответствует приоритету, установленному в JSON? :S
Может быть, это просто какая-то глупость, например, высокий уровень в «приоритете: «высокий»» должен быть ЗАГЛАВНЫМ?
Подробнее здесь: https://stackoverflow.com/questions/790 ... on-android