后台获取 performFetchWithCompletionHandler 不工作?

Background fetch performFetchWithCompletionHandler not working?

我的应用程序想要每 5 秒更新一次关于用户位置的服务器,即使应用程序在后台也是如此。我为它实现了后台获取。

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {        
        application.registerUserNotificationSettings(UIUserNotificationSettings(forTypes: [.Alert, .Badge, .Sound], categories: nil))

        application.setMinimumBackgroundFetchInterval(5.0)

        return true
    }

func application(application: UIApplication, performFetchWithCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) {

    completionHandler(UIBackgroundFetchResult.NewData)
    UpdateData()
}

func UpdateData(){
     print("UpdateData executes")
    // function to update data when ever this method triggers
}

但问题是

  1. 我无法进入 performFetchWithCompletionHandler 方法,除非我单击 调试 > 模拟后台获取
  2. 如何实现每 5 秒调用一次 performFetchWithCompletionHandler

你对什么是后台抓取有误解。开发人员 无权 决定何时准确执行后台提取。 iOS 自行决定何时允许应用执行后台提取。

setMinimumBackgroundFetchInterval 函数仅允许您指定 最小 时间间隔,该时间间隔必须在后台提取之间传递,以最大限度地减少应用程序的能源和数据使用。但是,您在此处设置的间隔根本不能保证您的应用程序能够如此频繁地执行后台提取。 documentation中关于这个的关键句子是"Fetch content opportunistically in the background...".

目前,确保您的应用程序可以在后台执行某些功能(包括从服务器获取数据)的唯一方法是定期从您自己的服务器发送静默推送通知。但是,即便如此,如果您的应用需要很长时间才能完成执行以响应推送,或者如果您的应用收到太多通知,系统可能会决定不唤醒您的应用以响应静默推送通知。