Swift iOS: 当接收到远程通知时,关闭不会在后台运行

Swift iOS: Closure will not run in background when Remote Notification received

我正在编写一个 iOS 应用程序,它需要在收到推送通知时更新设备的 GPS 位置。

我使用一个闭包来获取当前的 GPS 位置。当应用程序在前台时,此代码运行完美("New remote notification" 和 "Got location" 都打印到控制台),但是当应用程序在后台时,只有 "New remote notification"(并且没有位置错误) ) 打印到控制台。因此我此时没有设备的 GPS 位置,这对我的应用程序的功能非常重要。

如有任何帮助,我们将不胜感激。 谢谢。

我的 Info.plist 文件中有 'Required background modes';

 App registers for location updates
 App downloads content from the network
 App downloads content in response to push notifications

我的应用程序还可以随时访问位置,包括后台(已在代码的其他点成功测试):NSLocationAlwaysUsageDescription 在 Info.plist 文件中

在我的 AppDelegate 文件中:

    func application(application: UIApplication!, didReceiveRemoteNotification userInfo:NSDictionary!) {

    println("New remote notification")
    var notification:NSDictionary = userInfo as NSDictionary

    var loc: LocationManager?
    loc = LocationManager()


    loc!.fetchWithCompletion {location, error in

        // fetch location or an error
        if let myloc = location {

            var lat = myloc.coordinate.latitude as Double
            var lon = myloc.coordinate.longitude as Double

            println("Got location")

        } else if let err = error {

            println(err.localizedDescription)

        }
        loc = nil
    }

}

如果应用程序不在前台,请确保使用 beginBackgroundTaskWithExpirationHandler 请求一点时间来完成请求,然后在完成后调用 endBackgroundTask

有关详细信息,请参阅iOS 的应用程序编程指南Background Execution 章节中的执行有限长度任务