收到 FCM 通知后如何启动后台应用程序?

问题描述 投票:0回答:0

我制作了出租车预订应用程序,当订单来自 fcm 通知并且应用程序在前台时,其打开的订单页面详细信息供司机接受或拒绝订单。

但是当应用程序在后台只收到通知时,司机需要点击通知才能打开页面详情订单。如何避免点击通知,以便在订单通知出现时自动打开页面详细订单。

class PushNotificationSystem
{
  FirebaseMessaging messaging = FirebaseMessaging.instance;

  Future initializeCloudMessaging(BuildContext context) async
  {
    //1. Terminated
    //When the app is completely closed and opened directly from the push notification
    FirebaseMessaging.instance.getInitialMessage().then((RemoteMessage? remoteMessage)
    {
      if(remoteMessage != null)
      {
        //display ride request information - user information who request a ride
        //readUserRideRequestInformation(remoteMessage.data["rideRequestId"], context);
        readUserRideRequestInformation(remoteMessage!.data["rideRequestId"], context);
      }
    });

    //2. Foreground
    //When the app is open and it receives a push notification
    FirebaseMessaging.onMessage.listen((RemoteMessage? remoteMessage)
    {
      //display ride request information - user information who request a ride
      //readUserRideRequestInformation(remoteMessage!.data["rideRequestId"], context);
      readUserRideRequestInformation(remoteMessage!.data["rideRequestId"], context);
    });


    //3. Background
    //When the app is in the background and opened directly from the push notification.
    FirebaseMessaging.onMessageOpenedApp.listen((RemoteMessage? remoteMessage)
    {
      //display ride request information - user information who request a ride
      //readUserRideRequestInformation(remoteMessage!.data["rideRequestId"], context);
      readUserRideRequestInformation(remoteMessage!.data["rideRequestId"], context);
    });
    
  }



  readUserRideRequestInformation(String userRideRequestId, BuildContext context)
  {
    FirebaseDatabase.instance.ref()
        .child("All Ride Requests")
        .child(userRideRequestId)
        .once()
        .then((snapData)
    {
      if(snapData.snapshot.value != null)
      {
        audioPlayer.open(Audio("music/music_notification.mp3"));
        audioPlayer.play();

        double originLat = double.parse((snapData.snapshot.value! as Map)["origin"]["latitude"]);
        double originLng = double.parse((snapData.snapshot.value! as Map)["origin"]["longitude"]);
        String originAddress = (snapData.snapshot.value! as Map)["originAddress"];

        double destinationLat = double.parse((snapData.snapshot.value! as Map)["destination"]["latitude"]);
        double destinationLng = double.parse((snapData.snapshot.value! as Map)["destination"]["longitude"]);
        String destinationAddress = (snapData.snapshot.value! as Map)["destinationAddress"];

        String userName = (snapData.snapshot.value! as Map)["userName"];
        String userPhone = (snapData.snapshot.value! as Map)["userPhone"];
        String jarak = (snapData.snapshot.value! as Map)["jarak"];
        String durasi = (snapData.snapshot.value! as Map)["durasi"];
        String tarif = (snapData.snapshot.value! as Map)["tarif"];

        String? rideRequestId = snapData.snapshot.key;

        UserRideRequestInformation userRideRequestDetails = UserRideRequestInformation();

        userRideRequestDetails.originLatLng = LatLng(originLat, originLng);
        userRideRequestDetails.originAddress = originAddress;

        userRideRequestDetails.destinationLatLng = LatLng(destinationLat, destinationLng);
        userRideRequestDetails.destinationAddress = destinationAddress;

        userRideRequestDetails.userName = userName;
        userRideRequestDetails.userPhone = userPhone;
        userRideRequestDetails.jarak = jarak;
        userRideRequestDetails.durasi = durasi;
        userRideRequestDetails.tarif = tarif;

        userRideRequestDetails.rideRequestId = rideRequestId;

        showDialog(
          context: context,
          builder: (BuildContext context) => NotificationDialogBox(
            userRideRequestDetails: userRideRequestDetails,
          ),
        );
      }
      else
      {
        Fluttertoast.showToast(msg: "Order ini telah KADALUARSA");
      }
    });
  }

收到通知订单时自动打开后台应用程序

android flutter notifications firebase-cloud-messaging push
© www.soinside.com 2019 - 2024. All rights reserved.