I am trying to get the location data on some particular time. On every time we want to fetch the location data, we are sending a silent notification to our app. When app sees a silent notification It tries to get the data and upload back to the server. Every thing is working fine when app is running in foreground, but when i close the app and clear from the background, alarm manager is not getting fired to fetch and save the location.

_firebaseMessaging.configure(
      onMessage: (
        Map<String, dynamic> message,
      ) async {
        final Map data =
            message.containsKey('data') ? message['data'] as Map : null;

        if (data?.isEmpty ?? false) {
          _handleNotification(message);
        } else {
          _handleSilentEvent(message); // This method will be called when server will make call to fetch location data
        }
      },
      onResume: (Map<String, dynamic> message) async {},
      onLaunch: (Map<String, dynamic> message) async {},
      onBackgroundMessage: _handleSilentEvent,
    );
Future<dynamic> _handleSilentEvent(
  final Map<String, dynamic> message,
) async {
  final Map data = message.containsKey('data') ? message['data'] as Map : null;

  if (data?.isNotEmpty ?? false) {
    if (data.containsKey('getLocation')) {
      await LocationService.triggerServiceToGetAndSaveLocation();
    } else {
      _handleWebEngage(data);
    }
  }
}

abstract class LocationService {
  static const int _alarmManagerId = 1001;

  static final ILocationFacade _locationFacade = getIt<ILocationFacade>();

  LocationService._();

  static Future<void> triggerServiceToGetAndSaveLocation() async {
    AndroidAlarmManager.oneShotAt(
      DateTime.now(),
      _alarmManagerId,
      LocationService._fetchAndSaveLocation,
      wakeup: true,
      exact: true,
    );
  }

  static Future<void> _fetchAndSaveLocation() async {
    final position = await _getCurrentLocation();
    final capturedAt = DateTime.now().millisecondsSinceEpoch.toString();
    final gpsEnabled = await Geolocator.isLocationServiceEnabled();
    final LocationInfo locationInfo = LocationInfo(
      lat: position.latitude,
      lng: position.longitude,
      capturedAt: capturedAt,
      gpsEnabled: gpsEnabled,
    );

    print(
        'onMessage:: Lat: ${position.latitude} Long: ${position.longitude} capturedAt: $capturedAt gpsEnabled: $gpsEnabled'); // This print is getting called when app is in foreground,  when i kill the app this print is not event getting called.

    // await _locationFacade.saveLocationInfo(locationInfo);
  }

  static Future<Position> _getCurrentLocation() async {
    final _gpsServiceEnabled = await Geolocator.isLocationServiceEnabled();

    if (_gpsServiceEnabled) {
      return Geolocator.getCurrentPosition();
    }
    return Geolocator.getLastKnownPosition();
  }
}

Can someone point me out where i am making the mistake?