在应用程序终止时获取用户的位置

时间:2017-11-30 08:59:57

标签: ios swift xcode

我目前正在开发应用程序并遇到问题。 我的应用程序的目的是看看有人离开工作。为了使其在100%的时间内工作,应用程序应该能够在应用程序打开时,在后台或终止(被杀死)时获取用户的位置。我的理解是你必须使用重要的位置更改功能。 但是,它没有按预期工作。

的AppDelegate:

    //handle location changes when app is terminated and waken up by the OS
    if launchOptions?[UIApplicationLaunchOptionsKey.location] != nil {
        print("Restarted app due to a location update")
        request = Locator.subscribeSignificantLocations(onUpdate: { newLoc in
            let db: FirebaseDB = FirebaseDB.shared
            db.postCoordinates(coordinates: CLLocation(latitude: 9.99, longitude: 9.99))
            print("new loc found -> \(newLoc)")
        }, onFail: {(err, lastLoc) in
            print("failed to get loc, -> \(err)")
        })
        //send new post to DB
    }

    //subscribeSignificantLocations -> power efficient
        request = Locator.subscribeSignificantLocations(onUpdate: { newLoc in
            print("new loc found -> \(newLoc)")
        }, onFail: {(err, lastLoc) in
            print("failed to get new loc, -> \(err)")
        })

除了在应用程序终止时获取位置外,一切正常...

提前致谢!

1 个答案:

答案 0 :(得分:1)

经过数小时的搜索和阅读,我找到了一个可行的解决方案。 (注意:我正在研究地理围栏,需要在用户离开特定区域时通知/调用该API

第一步也是最重要的一步,就是要获得用户的“始终” 授权以进行位置访问。

第二,即使应用终止后,我们也需要使用arr1[0]=[...arr2]; arr1[counter]=[...arr2]; 进行位置更新。

startMonitoringSignificantLocationChanges()

下面是获取本地通知以更新位置信息的代码。

        locationManager.requestAlwaysAuthorization()
        locationManager.delegate = self
        locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation
        locationManager.allowsBackgroundLocationUpdates = true
        locationManager.startUpdatingLocation()
        locationManager.startMonitoringSignificantLocationChanges() //THIS IS WHERE THE MAGIC HAPPENS

希望有帮助。