Flutter 颤振本地通知中的颤振选择通知方法不';行不通

Flutter 颤振本地通知中的颤振选择通知方法不';行不通,flutter,firebase-cloud-messaging,Flutter,Firebase Cloud Messaging,我试图在我的应用程序中处理FCM消息,但它位于后台。我正在为此使用数据消息,在global myBackgroundMessageHandler函数中处理它,并使用Flatter_local_notifications插件创建本地通知,如果应用程序进程被终止,我将接收并向用户显示推送通知事件。但当用户通过此推送通知打开应用程序时,我无法捕获事件。这是我的fcm初始化: void initFirebasePushNotifications(){ _firebaseMessaging.

我试图在我的应用程序中处理FCM消息,但它位于后台。我正在为此使用数据消息,在global myBackgroundMessageHandler函数中处理它,并使用Flatter_local_notifications插件创建本地通知,如果应用程序进程被终止,我将接收并向用户显示推送通知事件。但当用户通过此推送通知打开应用程序时,我无法捕获事件。这是我的fcm初始化:

   void initFirebasePushNotifications(){
    _firebaseMessaging.configure(
      onMessage: (Map<String, dynamic> message) async {
        print("onMessage: $message");
        Fluttertoast.showToast(msg: "onMessage $message");
//        _showItemDialog(message);
      },
      onBackgroundMessage: myBackgroundMessageHandler,
      onLaunch: (Map<String, dynamic> message) async {
        print("onLaunch: $message");
        Fluttertoast.showToast(msg: "onLaunch $message");
//        _navigateToItemDetail(message);
      },
      onResume: (Map<String, dynamic> message) async {
        print("onResume: $message");
        Fluttertoast.showToast(msg: "onResume $message");
//        _navigateToItemDetail(message);
      },
    );
    _firebaseMessaging.requestNotificationPermissions(
        const IosNotificationSettings(
            sound: true, badge: true, alert: true, provisional: true));
    _firebaseMessaging.onIosSettingsRegistered
        .listen((IosNotificationSettings settings) {
      print("Settings registered: $settings");
    });
    _firebaseMessaging.getToken().then((String token) {
      assert(token != null);
      pushNotificationManager.subscribe(MyApp.user);
      print("Push Messaging token: $token");
    });
  }
void initFirebasePushNotifications(){
_firebaseMessaging.configure(
onMessage:(映射消息)异步{
打印(“onMessage:$message”);
showtoost(消息:“onMessage$message”);
//_showItemDialog(消息);
},
onBackgroundMessage:myBackgroundMessageHandler,
onLaunch:(映射消息)异步{
打印(“onLaunch:$message”);
showtoots(消息:“onLaunch$message”);
//_导航项目详细信息(信息);
},
onResume:(映射消息)异步{
打印(“onResume:$message”);
showtoots(msg:“onResume$message”);
//_导航项目详细信息(信息);
},
);
_firebaseMessaging.requestNotificationPermissions(
const IosNotificationSettings(
声音:真,徽章:真,警报:真,临时:真);
_firebaseMessaging.onissettings已注册
.listen((IONotificationSettings){
打印(“已注册设置:$Settings”);
});
_firebaseMessaging.getToken().then((字符串标记){
断言(令牌!=null);
pushNotificationManager.subscribe(MyApp.user);
打印(“推送消息传递令牌:$token”);
});
}
和myBackgroundMessageHandler:

import 'dart:io';
import 'dart:math';

import 'package:didiservicekiosk/ui/main/main_screen.dart';
import 'package:flutter/material.dart';
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
import 'package:rxdart/rxdart.dart';

// Streams are created so that app can respond to notification-related events since the plugin is initialised in the `main` function
final BehaviorSubject<ReceivedNotification> didReceiveLocalNotificationSubject =
BehaviorSubject<ReceivedNotification>();

final BehaviorSubject<String> selectNotificationSubject =
BehaviorSubject<String>();

Future<dynamic> myBackgroundMessageHandler(Map<String, dynamic> message) {
  print('AppPushs myBackgroundMessageHandler : $message');
  _showNotification(message);
  return Future<void>.value();
}

Future _showNotification(Map<String, dynamic> message) async {
  var pushTitle;
  var pushText;
  var action;

  if (Platform.isAndroid) {
    var nodeData = message['data'];
    var notification = message['notification'];
    pushTitle = nodeData['title'];
    pushText = nodeData['body'];
    action = nodeData['action'];
  } else {
    pushTitle = message['title'];
    pushText = message['body'];
    action = message['action'];
  }
  print("AppPushs params pushTitle : $pushTitle");
  print("AppPushs params pushText : $pushText");
  print("AppPushs params pushAction : $action");
  var initializationSettingsAndroid = AndroidInitializationSettings('@mipmap/launcher_icon');
  var initializationSettingsIOS = IOSInitializationSettings(onDidReceiveLocalNotification:
      (int id, String title, String body, String payload) async {
    print("onDidReceiveLocalNotification");
    didReceiveLocalNotificationSubject.add(ReceivedNotification(
        id: id, title: title, body: body, payload: payload));
  });
  var initializationSettings = InitializationSettings(initializationSettingsAndroid, initializationSettingsIOS);

// @formatter:off
  var platformChannelSpecificsAndroid = new AndroidNotificationDetails(
      '234', 'Chat notifications', 'Notifications from chat',
      playSound: true,
      enableVibration: true,
      importance: Importance.Max,
      priority: Priority.High);
// @formatter:on
  var platformChannelSpecificsIos =
      new IOSNotificationDetails(presentSound: false);
  var platformChannelSpecifics = new NotificationDetails(
      platformChannelSpecificsAndroid, platformChannelSpecificsIos);
  FlutterLocalNotificationsPlugin _flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin();
  await _flutterLocalNotificationsPlugin.initialize(initializationSettings, onSelectNotification: selectNotification);

new Future.delayed(Duration.zero, () {
    _flutterLocalNotificationsPlugin.show(
      Random().nextInt(1000),
      pushTitle,
      pushText,
      platformChannelSpecifics,
      payload: 'No_Sound',
    );
  });
}

Future selectNotification(String payload) async {
//  if (payload != null) {
    print('selectNotification notification payload: ' + payload);
//  }
}

class ReceivedNotification {
  final int id;
  final String title;
  final String body;
  final String payload;

  ReceivedNotification({
    @required this.id,
    @required this.title,
    @required this.body,
    @required this.payload,
  });
}
导入'dart:io';
导入“dart:math”;
导入“package:didiservicekiosk/ui/main/main_screen.dart”;
进口“包装:颤振/材料.省道”;
导入“package:flatter_local_notifications/flatter_local_notifications.dart”;
导入“包:rxdart/rxdart.dart”;
//创建流是为了让应用程序能够响应通知相关事件,因为插件是在“main”函数中初始化的
最终行为主体未收到本地通知主体=
行为主体();
最终行为主体选择通知主体=
行为主体();
未来myBackgroundMessageHandler(映射消息){
打印('AppPushs myBackgroundMessageHandler:$message');
_显示通知(消息);
返回Future.value();
}
Future\u showNotification(映射消息)异步{
标题;
文本;
var作用;
if(Platform.isAndroid){
var nodeData=消息['data'];
var通知=消息['notification'];
pushTitle=nodeData['title'];
pushText=nodeData['body'];
动作=节点数据[‘动作’];
}否则{
pushTitle=消息['title'];
pushText=消息['body'];
action=消息['action'];
}
打印(“AppPushs参数pushTitle:$pushTitle”);
打印(“AppPushs参数pushText:$pushText”);
打印(“AppPushs参数pushAction:$action”);
var initializationSettingsAndroid=AndroidInitializationSettings(“@mipmap/launcher_图标”);
var initializationSettingsIOS=IOSSinitializationSettings(onDidReceiveLocalNotification:
(int-id、字符串标题、字符串正文、字符串有效负载)异步{
打印(“onDidReceiveLocalNotification”);
didReceiveLocalNotificationSubject.add(ReceivedNotification(
id:id,title:title,body:body,payload:payload));
});
var initializationSettings=initializationSettings(initializationSettingsAndroid,initializationSettingsIOS);
//@formatter:off
var platformChannelSpecificsAndroid=新的AndroidNotificationDetails(
“234”、“聊天通知”、“聊天通知”,
playSound:没错,
使能振动:正确,
重要性:重要性,马克斯,
优先级:优先级高);
//@formatter:on
var平台=
新的IOSNotificationDetails(当前声音:false);
var platformChannelSpecifics=新通知详细信息(
platformChannelSpecificsAndroid,platformChannelSpecificsIos);
flatterLocalNotificationsPlugin_flatterLocalNotificationsPlugin=flatterLocalNotificationsPlugin();
等待本地通知pugin.initialize(初始化设置,onSelectNotification:selectNotification);
新未来。延迟(Duration.zero,(){
_flatterLocalNotificationsPlugin.show(
随机().nextInt(1000),
pushTitle,
pushText,
平台通道细节,
有效载荷:“没有声音”,
);
});
}
未来选择通知(字符串负载)异步{
//如果(有效负载!=null){
打印('selectNotification notification payload:'+payload);
//  }
}
收到通知的班级{
最终int id;
最后的字符串标题;
最终管柱体;
最终管柱有效载荷;
收到通知({
@需要这个.id,
@需要这个标题,
@需要这个机构,
@需要这个有效载荷,
});
}
有什么建议吗