我制作了出租车预订应用程序,当订单来自 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");
}
});
}
收到通知订单时自动打开后台应用程序