我一直搞错了
No task request with identifier <decode: missing data> has been scheduled
在我的调试器输出中,我决定尝试运行Apple 这里提供的示例代码,并得到了相同的错误。我尝试过多台计算机和Xcode版本,来自不同来源的多个示例项目,但都没有任何效果。
我的AppDelegate.swift文件:
import UIKit
import Firebase
import BackgroundTasks
@main
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
FirebaseApp.configure()
BGTaskScheduler.shared.register(forTaskWithIdentifier: “redacted.identifier”, using: nil) { task in
self.handleAppRefresh(task: task as! BGAppRefreshTask)
}
return true
}
func applicationDidEnterBackground(_ application: UIApplication) {
BGTaskScheduler.shared.cancelAllTaskRequests()
scheduleAppRefresh()
}
func scheduleAppRefresh() {
let request = BGAppRefreshTaskRequest(identifier: "redacted.identifier")
request.earliestBeginDate = Date(timeIntervalSinceNow: 60)
do {
try BGTaskScheduler.shared.submit(request)
} catch {
print("Could not schedule app refresh: \(error)")
}
}
func handleAppRefresh(task: BGAppRefreshTask) {
scheduleAppRefresh()
let db = Firestore.firestore()
db.collection("devices").document(UIDevice.current.identifierForVendor!.uuidString).setData([
"batteryLevel": UIDevice.current.batteryLevel*100
]) { err in
if let err = err {
print("Error writing document: \(err)")
} else {
print("success")
task.setTaskCompleted(success: true)
}
}
task.expirationHandler = {
task.setTaskCompleted(success: false)
}
}我正在通过运行
e -l objc -- (void)[[BGTaskScheduler sharedScheduler] _simulateLaunchForTaskWithIdentifier:@"redacted.identifier"]在Xcode控制台中,然后发生上述错误。
控制台输出:
Simulating launch for task with identifier redacted.identifier
No task request with identifier <decode: missing data> has been scheduled发布于 2021-01-18 23:12:01
几个潜在的问题:
Info.plist有一个“允许的后台任务调度器标识符”(即BGTaskSchedulerPermittedIdentifiers)条目,其中包含后台任务的标识符。BGTaskScheduler.shared.submit(...)行之后立即设置断点,并在调用submit之后执行_simulateLaunchForTaskWithIdentifier。也就是说,确保你甚至到达了submit的电话。(见下一点。)applicationDidEnterBackground(_:)中调度它。但是如果您使用的是UIWindowSceneDelegate (即在您的SceneDelegate中),则不调用应用程序委托的applicationDidEnterBackground(_:),而是调用场景委托的sceneDidEnterBackground(_:)。我把BGAppRefreshTaskRequest的调度放到了场景代表的sceneDidEnterBackground(_:)中。发布于 2021-04-29 14:48:31
当我在一个设备上测试时,我也遇到了同样的问题。转到设备设置>常规>背景应用程序刷新并打开背景应用程序刷新。这个问题已经解决了。
发布于 2021-11-04 09:07:55
在其他答案中没有提到另一种情况,如果您试图提交不同的或超过一个刷新任务,您可能会碰到下面的错误情况。问题是,目前在Xcode 13.1中没有抛出所提到的错误,因此看起来提交请求是可行的,但基本上没有。
Apple :可以在任何时候总共安排一个刷新任务和10个处理任务。尝试安排更多任务返回BGTaskScheduler.Error.Code.tooManyPendingTaskRequests.
https://stackoverflow.com/questions/65781089
复制相似问题