Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 后台获取performFetchWithCompletionHandler不工作?_Ios_Swift_Location_Background Fetch_Background Mode - Fatal编程技术网

Ios 后台获取performFetchWithCompletionHandler不工作?

Ios 后台获取performFetchWithCompletionHandler不工作?,ios,swift,location,background-fetch,background-mode,Ios,Swift,Location,Background Fetch,Background Mode,我的应用程序要在每5秒后更新服务器关于用户位置的信息,即使应用程序位于后台。我为它实现了后台提取 func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { application.registerUserNotificationSettings(UIUserNotific

我的应用程序要在每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
}
但问题是

  • 我无法进入performFetchWithCompletionHandler方法,除非我单击Debug>simulate background fetch
  • 如何实现每5秒调用performFetchWithCompletionHandler

  • 你对什么是背景提取有误解。开发人员对何时准确执行后台提取没有权限。iOS本身决定何时允许应用程序执行后台提取

    setMinimumBackgroundFetchInterval
    函数仅允许您指定背景回迁之间必须经过的最小时间间隔,以最小化应用程序的能量和数据使用。但是,您在此处设置的间隔根本不能保证您的应用程序能够经常执行后台提取。关于这一点的关键句子是“在后台机会主义地获取内容……”


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

    您对什么是后台提取有误解。开发人员对何时准确执行后台提取没有权限。iOS本身决定何时允许应用程序执行后台提取

    setMinimumBackgroundFetchInterval
    函数仅允许您指定背景回迁之间必须经过的最小时间间隔,以最小化应用程序的能量和数据使用。但是,您在此处设置的间隔根本不能保证您的应用程序能够经常执行后台提取。关于这一点的关键句子是“在后台机会主义地获取内容……”


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

    ok。。。是否可以在位置更新后台模式下完成。。。若要在后台设置location get interval,并在调用此interval方法/委托时立即将最新位置的消息在间隔5秒后发送到服务器。@您可以尝试使用Azhar,这是设置定期调用委托的时间间隔的唯一方法(请注意,GPS将在整个过程中保持开启状态,而不是在您的情况下每5分钟开启一次)。此外,系统可能没有为你的应用程序提供足够的执行时间来完成后台
    URLRequest
    。我真的不建议对常规后台网络请求滥用位置更新。首先,由于你的应用程序经常使用GPS,你的用户将经历严重的电池寿命下降,其次是Apple might因误用背景位置更新而拒绝您的应用程序。ye,我已经与客户沟通过,这可能会对电池寿命有害,苹果可以强制在应用程序描述中添加这样的文字……但他坚持要不惜任何代价:)好的。。。是否可以在位置更新后台模式下完成。。。若要在后台设置location get interval,并在调用此interval方法/委托时立即将最新位置的消息在间隔5秒后发送到服务器。@您可以尝试使用Azhar,这是设置定期调用委托的时间间隔的唯一方法(请注意,GPS将在整个过程中保持开启状态,而不是在您的情况下每5分钟开启一次)。此外,系统可能没有为你的应用程序提供足够的执行时间来完成后台
    URLRequest
    。我真的不建议对常规后台网络请求滥用位置更新。首先,由于你的应用程序经常使用GPS,你的用户将经历严重的电池寿命下降,其次是Apple might因误用背景位置更新而拒绝您的应用程序。ye,我已经与客户沟通过,这可能会对电池寿命有害,苹果可以强制在应用程序描述中添加这样的文字……但他坚持要不惜任何代价:)您找到解决方案了吗?您找到解决方案了吗?