В настоящее время я работаю над приложением и столкнулся с проблемой. Цель моего приложения - видеть, когда кто-то отправляется в определенное место. Приложение отлично работает, когда находится на переднем плане и на заднем плане, но как только пользователь принудительно прервал приложение, оно не сможет получить доступ к его местоположению. Насколько я понимаю, вы должны использовать для этого функцию существенного изменения местоположения. Тем не менее, он не работает, как ожидалось.
Но это работает на Fitbit App и не знаю других, если приложение работает это или нет, кто-то, пожалуйста, помогите этому, Пожалуйста, проверьте эту ссылку https://apps.apple.com/us/app/fitbit-activity-calorie-tracker/id462638897?ign-mpt=uo%3D4
Также, пожалуйста, проверьте мой текущий код, когда приложение закрыто / приостановлено. Я пробую этот код.
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
if launchOptions?[UIApplication.LaunchOptionsKey.location] != nil {
//You have a location when app is in killed/ not running state
locationManager.requestAlwaysAuthorization()
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.allowsBackgroundLocationUpdates = true
locationManager.startMonitoringSignificantLocationChanges()
}
}
func applicationDidEnterBackground(_ application: UIApplication) {
// Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
// If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
locationManager.stopUpdatingLocation()
locationManager.startMonitoringSignificantLocationChanges()
locationManager.delegate = self
}
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
guard let newLocation = locations.last else {
return
}
guard let oldLocation = oldLocation else {
// Save old location
self.oldLocation = newLocation
return
}
let oldCoordinates = oldLocation.coordinate
let newCoordinates = newLocation.coordinate
// Save old location
self.oldLocation = newLocation
currentLocation = newLocation
}
func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {
print("Error \(error)")
if let error = error as? CLError, error.code == .denied {
// Location updates are not authorized.
manager.stopMonitoringSignificantLocationChanges()
return
}
}