【问题标题】:Flutter iOS FCM notifications onMessageFlutter iOS FCM 通知 onMessage
【发布时间】:2021-01-21 03:59:35
【问题描述】:

我在尝试在 iOS 上显示 onMessage 通知时遇到问题,Android 工作正常。我发送通知并且 onMessage 被触发但没有在 Android 设备上显示 Flushbar。奇怪的是,它在控制台中打印了 onMessage,但没有在 App 上显示 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();
  }

【问题讨论】:

    标签: firebase flutter firebase-cloud-messaging


    【解决方案1】:

    刚刚注意到问题。 json在接收​​onMessage通知时与Android和iOS不同,并且在firebase onMessage上没有显示任何异常。

    【讨论】:

    • 真的,在此之上,你现在有一个例子:)
    【解决方案2】:

    应用程序本地通知像这样对我有用

     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
      }
    

    在初始化状态下调用函数,然后检查操作系统类型并显示通知。

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

    【讨论】:

      【解决方案3】:

      修改即将到来的json

      onMessage: (Map<String, dynamic> message) async {
              print("onMessage");
              if (Platform.isIOS) {
                message = _modifyNotificationJson(message);
              }
      );
       /// This method will modify the message format of iOS Notification Data
        Map _modifyNotificationJson(Map<String, dynamic> message) {
          message['data'] = Map.from(message ?? {});
          message['notification'] = message['aps']['alert'];
          return message;
        }
      

      【讨论】:

        猜你喜欢
        • 2018-11-30
        • 2020-12-18
        • 1970-01-01
        • 2021-05-11
        • 2020-02-11
        • 2023-02-25
        • 2021-06-25
        • 1970-01-01
        • 2022-06-15
        相关资源
        最近更新 更多