每小时安排后台任务swift 4

Posted

技术标签:

【中文标题】每小时安排后台任务swift 4【英文标题】:Schedule background task per hour swift 4 【发布时间】:2018-11-14 16:30:20 【问题描述】:

我已经搜索并尝试了太长时间,我该如何解决我的问题。 我有订单,我需要每小时在我的后端 C# 上检查他们的更新。即使在后台状态或前台。

我试过了:

var timer = Timer.scheduledTimer(withTimeInterval: 5.0, repeats: true) 
    timer in
    self.updatePedidos(timer: timer)

func updatePedidos() 
    print("background started")
    let strdata = Functions.getMostRecentDtPedido()
    Functions.loadOrdersFromLastSyncByApi(strdata)

还有:

func applicationDidEnterBackground(_ application: UIApplication) 
    Timer.scheduledTimer(timeInterval: 0.4, target: self, selector: #selector(self.updatePedidos), userInfo: nil, repeats: true)

@objc func updatePedidos() 
    print("background started")
    let strdata = Functions.getMostRecentDtPedido()
    Functions.loadOrdersFromLastSyncByApi(strdata)

还有:

func applicationDidEnterBackground(_ application: UIApplication) 
    UIApplication.shared.setMinimumBackgroundFetchInterval( 5 )

func application(_ application: UIApplication, performFetchWithCompletionHandler completionHandler:
    @escaping (UIBackgroundFetchResult) -> Void) 
    print("background started")
    let strdata = Functions.getMostRecentDtPedido()
    Functions.loadOrdersFromLastSyncByApi(strdata)

    if let newData = fetchUpdates() 
        addDataToFeed(newData: newData)
        completionHandler(.newData)
    

    completionHandler(.noData)

最后我不能设置计时器:

NotificationCenter.default.addObserver(self, selector: #selector(updatePedidos), name:UIApplication.didEnterBackgroundNotification, object: nil)
@objc func updatePedidos() 
    print("background started")
    let strdata = Functions.getMostRecentDtPedido()
    Functions.loadOrdersFromLastSyncByApi(strdata)

所有这些都不会在后台状态打印“后台启动”,只是在前台。我在 info.plist 上添加了:

<key>UIBackgroundModes</key>
    <array>
        <string>fetch</string>
    </array>

【问题讨论】:

您将无法获得以这样的间隔在后台运行的东西。一旦您的应用进入后台,它将被暂停,如果需要可以终止。 【参考方案1】:

您可以尝试使用静默推送通知。每小时发送 1 个静默推送通知,并在后台模式下唤醒应用程序并执行您的任务一段时间。

您可以在下面的文章中阅读有关后台任务执行的更多详细信息:

https://www.hackingwithswift.com/example-code/system/how-to-run-code-when-your-app-is-terminated

Is there a way to wakeup suspended app in ios without user or server intervention

【讨论】:

以上是关于每小时安排后台任务swift 4的主要内容,如果未能解决你的问题,请参考以下文章

ios后台任务定时器

点餐系统设计任务安排

(iOS)后台运行下载任务

安排后台任务

iOS 13 安排 iOS 后台任务

如何安排每小时开始的任务