iOS 13:BackgroundTasks 框架不执行后台作业

Posted

技术标签:

【中文标题】iOS 13:BackgroundTasks 框架不执行后台作业【英文标题】:iOS 13: BackgroundTasks framework does not executing background job 【发布时间】:2020-03-16 07:35:19 【问题描述】:

当应用程序状态为后台/终止时,我需要执行特定任务。 任务必须从CoreData 表中获取数据并形成JSON,然后使用REST API Call 使用URLSession.shared 同步到服务器。

我严格按照 Apple 的文档和几个博客从编码和 Xcode 配置的角度设置后台作业。

我已在应用程序进入后台后设置time-interval to 1 分钟为BGAppRefreshTask

request.earliestBeginDate = Date(timeIntervalSinceNow: 60)

知道,ios 系统有很多参数需要满足来执行后台抓取。 我等了 24 小时让应用程序运行后台作业,但甚至一次都没有执行作业。

请分享,如果有人有同样的经历并提出特定的解决方案或理由。

我关注的参考链接。

https://www.andyibanez.com/posts/modern-background-tasks-ios13/

https://medium.com/snowdog-labs/managing-background-tasks-with-new-task-scheduler-in-ios-13-aaabdac0d95b

【问题讨论】:

这里有同样的问题。我让它工作了一个星期。但是在我将第二个任务添加到白名单后,它就不再起作用了。它已提交并很好地注册。不知何故,系统只是不触发这些任务。我尝试在Xcode中使用一个命令来模拟运行,效果很好。 【参考方案1】:

URLSession.shared 明确记录为

当您的应用未运行时,您无法执行后台下载或上传。

改为创建适合后台处理的会话:

let config = URLSessionConfiguration.background(withIdentifier: "foo")
let session = URLSession(configuration: config)

【讨论】:

感谢您的建议。但是,一旦执行后台作业,我就在 UserDefaults 中记录了一个时间戳。但实际上工作没有运行。不过,我会实施您对 REST API 调用的建议。

以上是关于iOS 13:BackgroundTasks 框架不执行后台作业的主要内容,如果未能解决你的问题,请参考以下文章

如何让iOS设备上App定时执行后台任务(下)

如何让iOS设备上App定时执行后台任务(下)

IOS 13中的iOS后台任务不起作用

带有 iPhone 13 的 iOS 15 不支持附近的交互框架

使用 CarPlay 框架的 CarPlay 应用在 iOS 13 或更早版本上崩溃

iOS 13 中历史相关的 Contacts 框架类都有哪些?