firebase_messaging回调在前台时不会触发。 iOS应用Flutter

时间:2020-03-19 18:55:39

标签: flutter firebase-cloud-messaging

我正在将Swift应用程序移植到Flutter,并使用firebase_messaging软件包设置FCM。 使用我的Swift应用程序时,如果我从Firebase控制台直接将测试消息发送到令牌或广泛发送,无论应用程序是在前台还是在后台,我都会收到通知发送到系统托盘。

Flutter应用程序不会发生这种情况。 当App在后台运行时,我仍会在系统任务栏中同时收到这两个通知,但是在前台运行时,不会调用onMessageonLaunchonResume回调。

您能发现我在做什么吗? 非常感谢。

class _MapScreenState extends State<MapScreen> {
  final FirebaseMessaging _firebaseMessaging = FirebaseMessaging();
  String _token;
  String _launchMessage;
  @override
  void initState() {
    super.initState();
    _firebaseMessaging.requestNotificationPermissions(
        const IosNotificationSettings(sound: true, badge: true, alert: true));

    _firebaseMessaging.onIosSettingsRegistered
        .listen((IosNotificationSettings settings) {
      print("Settings registered: $settings");
    });

    _firebaseMessaging.configure(
      onMessage: (Map<String, dynamic> message) async {
        print('on message $message');
      },
      onResume: (Map<String, dynamic> message) async {
        print('on resume $message');
      },
      onLaunch: (Map<String, dynamic> message) async {
        print('on launch $message');
      },
    );

    _firebaseMessaging.getToken().then((token) {
      print('token: $token');
      if (mounted) {
        setState(() {
          _token = token;
        });
      } else {
        _token = token;
      }
    });
  }

1 个答案:

答案 0 :(得分:0)

好的,我发现问题出在包装本身。当切换到插件的MaikuB fork时,一切都按预期工作。

#  firebase_messaging: 6.0.9 # doesn't work

      firebase_messaging: # works properly
        git:
          url: https://github.com/MaikuB/flutterfire.git
          path: packages/firebase_messaging

他告诉我,该文件已合并到官方仓库中,这是由于更新了保存此文件的插件。 MaikuB的fork实际上解决了与其他需要注册到

的插件的不兼容问题
if #available(iOS 10.0, *) {
        UNUserNotificationCenter.current().delegate = self as? UNUserNotificationCenterDelegate
    }

作为他自己的flutter_local_notification插件,用于显示本地通知。

我希望这在新版本的插件推出时能对其他人有所帮助,因为使其工作相当令人沮丧。

欢呼