iOS 13 安排 iOS 后台任务

Posted

技术标签:

【中文标题】iOS 13 安排 iOS 后台任务【英文标题】:iOS 13 Schedule iOS background tasks 【发布时间】:2020-01-30 21:29:00 【问题描述】:

我正在实施 BackgroundTasks 框架来更新数据。但是我遇到了以下问题

Could not schedule refreshApp: Error Domain=BGTaskSchedulerErrorDomain Code=1 "(null)"
Could not schedule data featch: Error Domain=BGTaskSchedulerErrorDomain Code=1 "(null)"
2019-10-01 19:19:32.550320+0530 SOBackgroundTask[34131:1129470] Can't end BackgroundTask: no background task exists with identifier 3 (0x3), or it may have already been ended. Break in UIApplicationEndBackgroundTaskError() to debug.

【问题讨论】:

【参考方案1】:

如果出现BGTaskSchedulerErrorDomain 错误3,下面我没有添加

<array>
    <string>com.shiny.job</string>
    <string>com.shiny.jobpower</string>
    <string>com.shiny.jobnet</string>
    <string>com.shiny.jobpowernet</string>
</array>```

【讨论】:

【参考方案2】:

解决方案是在设备上运行。我在模拟器上运行。但是,在模拟器上运行时,它显示后台应用刷新已在设置中启用。

可能还有其他一些原因。请拜访 https://developer.apple.com/documentation/backgroundtasks/bgtaskschedulererrorcode/bgtaskschedulererrorcodeunavailable?language=objc

【讨论】:

【参考方案3】:

根据https://developer.apple.com/documentation/backgroundtasks/bgtaskschedulererrorcode/bgtaskschedulererrorcodeunavailable?language=objc 的说法,这个错误的发生通常有以下三个原因之一:

用户已在设置中禁用后台刷新。 应用在不支持后台的模拟器上运行 处理。 键盘扩展或者没有将 RequestsOpenAccess 设置为 YES Info.plist 文件,或用户未授予开放访问权限。 扩展类型无法安排后台任务。

【讨论】:

【参考方案4】:

我认为这是因为您的手机关闭了 bg 刷新!!!!!!!

【讨论】:

尽管我正在寻找另一个问题,但你让我很开心。非常感谢!【参考方案5】:

只需检查背景模式是否已添加到目标功能中,并且选择了背景获取和背景处理选项

【讨论】:

【参考方案6】:

为:

BGTaskSchedulerErrorDomain error 3

在项目的 .xcodeproj 文件中检查适当的目标。然后转到信息选项卡和自定义 iOS 目标属性,并检查是否添加了允许的后台任务计划程序标识符 (BGTaskSchedulerPermittedIdentifiers)。

这解决了我在将BackgroundTasks 添加到现有项目时遇到的问题。

【讨论】:

【参考方案7】:

请检查您是否错过在项目的 info.plist 文件中注册BGTaskSchedulerPermittedIdentifiers

【讨论】:

【参考方案8】:

我在真机(ios13.2和iOS13.2.2)上测试过,结果是一样的。

错误域=BGTaskSchedulerErrorDomain 代码=2 "(null)" 无法结束 BackgroundTask:不存在标识符为 37 (0x25) 的后台任务,或者它可能已经结束。中断 UIApplicationEndBackgroundTaskError() 进行调试。

错误域=BGTaskSchedulerErrorDomain 代码=1 "(null)" 无法结束 BackgroundTask:不存在标识符为 113 (0x71) 的后台任务,或者它可能已经结束。中断 UIApplicationEndBackgroundTaskError() 进行调试。

好像还有bug。

https://forums.developer.apple.com/thread/121990

【讨论】:

当我运行调试命令时,调度成功,但在真实设备上调度任务时出现相同的错误(代码 1)。 (iOS 13.2.3) @Teo 你是什么意思?在模拟器上成功了吗?在真实设备上失败了? 这已在 iOS 13.4 GM 中修复。【参考方案9】:

以下是从 ObjC 标头中提取的 Domain=BGTaskSchedulerErrorDomain 的可能错误代码,并附有一些解释。

BGTaskSchedulerErrorCodeUnavailable = 1 // 后台任务调度功能不适用于此应用/扩展。后台应用刷新可能已在“设置”中禁用。

BGTaskSchedulerErrorCodeTooManyPendingTaskRequests = 2 // 由于该类型的待处理任务请求过多,无法提交任务请求。在重试之前取消一些现有的任务请求。

BGTaskSchedulerErrorCodeNotPermitted = 3 // 无法提交任务请求,因为UIBackgroundModes数组中没有包含相应的后台模式,或者应用程序的Info.plist的BGTaskSchedulerPermittedIdentifiers数组中不存在其标识符。

【讨论】:

developer.apple.com/documentation/backgroundtasks/…

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

在后台任务中安排通知

ios后台任务定时器

应用程序关闭时的 iOS 任务

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

后台位置更新因调试器中发现的后台任务问题而停止

ios - 在后台创建会话下载任务