significant - aggiornamento periodico posizione sfondo Swift 3.0 iOS 10




swift significant location change (2)

Hai provato questo:

https://github.com/paleksandrs/APScheduledLocationManager

Massimo 180 s con attività in background.

Faccio un'app che quando entra in background ho bisogno di inviare al server alcuni dati periodici. Per il risveglio dallo sfondo, utilizzo la posizione significativa dell'aggiornamento in background (batteria in esaurimento). Ho notato che la posizione viene aggiornata quando la cella del telefono da wifi / 3G o quando 3g cambia cella, ma il mio problema è che se l'utente non si sposta (e quindi la torre della cella non cambia) la posizione non viene aggiornata e la la richiesta di app si attiva e quindi non riesco a inviare dati al server.

Conosci qualche metodo per risolvere questo problema?

Faccio tutti quelli nel file AppDelegate:

class AppDelegate: UIResponder, UIApplicationDelegate ,  CLLocationManagerDelegate{

var manager = CLLocationManager()

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

        manager.desiredAccuracy = kCLLocationAccuracyBest
        manager.delegate = self
        manager.requestAlwaysAuthorization()
        manager.allowsBackgroundLocationUpdates = true

        return true
    }

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]){

      sendDataToServer()
}
func applicationDidEnterBackground(_ application: UIApplication) {

        manager.startMonitoringSignificantLocationChanges()
}

}

L'evento significativo di modifica della posizione viene attivato solo quando si verifica una modifica della posizione (ad es. Cambio cella). Dovresti utilizzare il recupero in background anziché la modifica della posizione per attivare l'app se ciò che ti occorre è scaricare o caricare periodicamente i dati:

application.setMinimumBackgroundFetchInterval(UIApplicationBackgroundFetchIntervalMinimum)

quindi gestire

func application(_ application: UIApplication, performFetchWithCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void)






location