当应用程序在后台时,颤振通知是空白的
Posted
技术标签:
【中文标题】当应用程序在后台时,颤振通知是空白的【英文标题】:Flutter notification is blank when app is in background 【发布时间】:2019-09-01 06:08:20 【问题描述】:当应用程序处于后台时,不会调用 onResume,但我在托盘中收到某种默认通知,带有空白图标且没有图像。
当我单击此通知时,会调用 onResume 并打开应用程序,但未导航到正确的路线。
当 Flutter 应用程序处于前台时,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
【问题讨论】:
你确定你正确解析了message
的结构吗? (如果您从推送通知中阅读了标题/正文)? Flutter Firebase 消息传递中存在一个“错误”,导致 onResume
和 onMessage
具有不同的参数结构。
顺便说一句。您确实知道,如果您只想显示标题/消息和图像,您可以直接使用来自服务器端的 firebase 消息来执行此操作,因此您不必自己在客户端上进行工作。如果这对你来说是可能的,我会强烈建议你走这条路。在颤动中处理后台任务是一个 PITA(并且不受支持),local_notifications 与 firebase 消息传递插件结合也是有问题的..
谢谢@herbert。你为我指明了正确的方向。已排序。
【参考方案1】:
对于所有可能像我一样在这个问题上浪费时间的人。 我发送的通知有一个父“通知”对象,而它本应是“数据”对象。
从这里的答案:https://***.com/a/52116944/1295611
正如@boformer 所指出的,这仅适用于“通知”消息。如果您发送“数据”消息,则不会创建通知,并且消息仅通过 onMessage 传递。插件自述文件和 firebase 文档中的更多详细信息。
这就是为什么 onMessage 使用我的代码创建通知但 onResume 使用默认通知的行为符合预期。
【讨论】:
以上是关于当应用程序在后台时,颤振通知是空白的的主要内容,如果未能解决你的问题,请参考以下文章
当应用程序被杀死时,无法在推送通知单击时导航到特定屏幕(Flutter android)