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

firebase_messaging callbacks don't fire when in foreground . iOS app Flutter

我正在将我的 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;
      }
    });
  }

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

#  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插件,用于显示本地通知。

我希望这可以在推出新版本插件时帮助其他人,因为让它工作非常令人沮丧..

干杯