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 后台任务的主要内容,如果未能解决你的问题,请参考以下文章