簡體   English   中英

Flutter iOS FCM 通知 onMessage

[英]Flutter iOS FCM notifications onMessage

我在嘗試在 iOS 上顯示 onMessage 通知時遇到問題,Android 工作正常。 我發送通知並且 onMessage 被觸發,但沒有在 Android 設備上顯示 Flushbar。 奇怪的是,它在控制台中打印了 onMessage 但它沒有在應用程序上顯示 Flushbar。

  @override
  void initState() {
    _firebaseMessaging.configure(
      onMessage: (Map<String, dynamic> message) async {
        print("onMessage: $message");
        int idEvent = int.parse(message['data']['idevent']);
        String image = message['data']['image'];

        Flushbar(
          title: message['notification']['title'],
          message: message['notification']['body'],
          duration: Duration(seconds: 5),
          flushbarPosition: FlushbarPosition.TOP,
          flushbarStyle: FlushbarStyle.GROUNDED,
          onTap: (Flushbar fb) async {
            fb.dismiss();

            ServiceEvent.fetchEvent(idEvent).then((event) {
              if (event != null) {
                Navigator.push(
                  context,
                  MaterialPageRoute(
                    builder: (context) => EventDetailsPage(
                      event,
                      fromNotification: true,
                    ),
                  ),
                );
              } else {
                DialogUtility.dialogInfo(
                    context, "There was an error didn't find event");
              }
            }).catchError((error) {
              DialogUtility.dialogInfo(context, error.toString());
            });
          },
          icon: image != null
              ? Padding(
                padding: const EdgeInsets.symmetric(horizontal: 5.0),
                child: Image.network('$image', height: 40, width: 40,),
              )
              : Padding(
                  padding: const EdgeInsets.symmetric(horizontal: 5),
                  child: SvgPicture.asset(
                    'assets/icons/tarjeta-rocket-entries.svg',
                    semanticsLabel: 'Acme Logo',
                    width: 40,
                    height: 40,
                  ),
                ),
        )..show(buildContext);
      },
      onLaunch: (Map<String, dynamic> message) async {
        print("onLaunch: $message");
      },
      onResume: (Map<String, dynamic> message) async {
        print("onResume: $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);
      setState(() {
        //_homeScreenText = "Push Messaging token: $token";
      });
      //print('token: '+token);
    });
    super.initState();
  }

剛注意到問題。 json 在接收 onMessage 通知時與 Android 和 iOS 不同,並且在 firebase onMessage 上沒有顯示任何異常。

應用程序本地通知像這樣對我有用

 setUpLocalNotification() async {
    //Local Notification Configuration--------
    var initializationSettingsAndroid = AndroidInitializationSettings('logo');
    var initializationSettingsIOS = IOSInitializationSettings();
    var initializationSettings = InitializationSettings(
        initializationSettingsAndroid, initializationSettingsIOS);
    await flutterLocalNotificationsPlugin.initialize(initializationSettings,
        onSelectNotification: onSelectNotification);

    //end local notification
  }

在 init 狀態下調用該函數,然后檢查操作系統類型並顯示通知。

 if (Platform.isIOS) {
      await flutterLocalNotificationsPlugin.show(
        0,
        message['aps']['alert']['title'],
        message['aps']['alert']['body'],
        platformChannelSpecifics,
        payload: JsonEncoder.withIndent("    ").convert(message),
      );
    }

我遇到了同樣的問題,我使用https://pub.dev/packages/flutter_local_notifications插件解決了它,或者確保您正確調用 Flushbar API

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM