Когда приложение находится в фоновом режиме, onResume не вызывается, но я получаю какое-то уведомление по умолчанию в трее с пустым значком и без изображения.
Когда я нажимаю на это уведомление, вызывается onResume, и приложение открывается, но не переходит на правильный маршрут.
Firebase сообщение работает, как и ожидалось, когда приложение флаттера находится на переднем плане. - вызывается onMessage, а уведомление имеет значок и изображение в трее.
Мне интересно, если настройки для уведомлений/сообщений находятся в неправильном месте.
class NotificationIcon extends StatefulWidget {
@override
NotificationIconState createState() => NotificationIconState();
}
class NotificationIconState extends State<NotificationIcon> {
FirebaseMessaging firebaseMessaging = new FirebaseMessaging();
void fcmSubscribe() {
...
}
void fcmUnSubscribe() {
...
}
Future showBigPictureNotification(Map<String, dynamic> message) async {
...
var bigPictureStyleInformation = new BigPictureStyleInformation(
bigPicturePath, BitmapSource.FilePath,
contentTitle: title, summaryText: messageText);
var androidPlatformChannelSpecifics = new AndroidNotificationDetails(
'', topic, messageText,
style: AndroidNotificationStyle.BigPicture,
styleInformation: bigPictureStyleInformation);
var platformChannelSpecifics =
new NotificationDetails(androidPlatformChannelSpecifics, null);
await flutterLocalNotificationsPlugin.show(
0, title, messageText, platformChannelSpecifics);
}
@override
void initState() {
super.initState();
firebaseMessaging.configure(
onMessage: (Map<String, dynamic> message) async {
print("onMessage: $message");
currentMessage = message;
await showBigPictureNotification(currentMessage);
},
onLaunch: (Map<String, dynamic> message) async {
print("onLaunch: $message");
currentMessage = message;
await showBigPictureNotification(currentMessage);
},
onResume: (Map<String, dynamic> message) async {
print("onResume: $message");
currentMessage = message;
await showBigPictureNotification(currentMessage);
},
);
onSelectNotification(String payload) async {
await navigatorKey.currentState.push(new MaterialPageRoute(...));
}
firebaseMessaging.requestNotificationPermissions();
flutterLocalNotificationsPlugin = new FlutterLocalNotificationsPlugin();
var initializationSettingsAndroid =
new AndroidInitializationSettings('ic_stat_fiber_new');
var initializationSettings =
new InitializationSettings(initializationSettingsAndroid, null);
flutterLocalNotificationsPlugin.initialize(initializationSettings,
onSelectNotification: onSelectNotification);
}
@override
Widget build(BuildContext context) {
< widget >
}
}
flutter doctor -v
[√] Flutter (Channel stable, v1.2.1, on Microsoft Windows [Version 10.0.16299.1004], locale en-IE)
• Flutter version 1.2.1 at flutter
• Framework revision 8661d8aecd (8 weeks ago), 2019-02-14 19:19:53 -0800
• Engine revision 3757390fa4
• Dart version 2.1.2 (build 2.1.2-dev.0.0 0a7dcf17eb)
[√] Android toolchain - develop for Android devices (Android SDK version 28.0.3)
• Android SDK at AppData\Local\Android\sdk
• Android NDK location not configured (optional; useful for native profiling support)
• Platform android-28, build-tools 28.0.3
• Java binary at: C:\Program Files\Android\Android Studio\jre\bin\java
• Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1136-b06)
• All Android licenses accepted.
[√] Android Studio (version 3.2)
• Android Studio at C:\Program Files\Android\Android Studio
• Flutter plugin version 31.1.1
• Dart plugin version 181.5656
• Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1136-b06)
[√] VS Code (version 1.32.3)
• VS Code at \AppData\Local\Programs\Microsoft VS Code
• Flutter extension version 2.24.0
[√] Connected device (1 available)
• Android SDK built for x86 • emulator-5554 • android-x86 • Android 9 (API 28) (emulator)
• No issues found!
dependencies:
flutter:
sdk: flutter
http:
url_launcher: 4.2.0+3
flutter_image: ^1.0.0
path_provider: 0.4.1
flutter_downloader: 1.1.3
fluttertoast: ^2.2.11
pin_code_view: 0.1.0
image_picker: 0.4.12+1
firebase_core: 0.2.5+1
firebase_storage: 1.1.0+1
uuid: ^1.0.0
cupertino_icons: ^0.1.0
permission_handler: 1.0.1
transparent_image: 0.1.0
shared_preferences: 0.4.3
flutter_launcher_icons: ^0.7.0
firebase_messaging: 2.1.0
flutter_local_notifications: 0.4.5
На старых версиях некоторые зависимости из-за проблемы AndroidX.
Рабочее уведомление, когда приложение на переднем плане working_notificaiton
Не работает Уведомление, когда приложение на переднем плане not_working_notification
Для всех тех, кто, возможно, потерял дни, как я к этому вопросу. Уведомление, которое я отправлял, имело родительский объект "уведомление", когда оно должно было быть объектом "данные".
Из этого ответа здесь: qaru.site/questions/16343132/...
Как указывает @boformer, это относится только к сообщениям "Уведомление". Если вы отправляете сообщения "Данные", уведомления не создаются, и сообщения доставляются только через onMessage. Более подробная информация в плагине readme и документах Firebase.
Вот почему onMessage вел себя, как и ожидалось, используя мой код для создания уведомления, но onResume использовал уведомление по умолчанию.