我一直收到错误
No task request with identifier <decode: missing data> has been scheduled
在我的调试器输出中,所以我决定尝试运行 Apple 提供的示例代码 here并得到同样的错误。我尝试了多台计算机和 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
最佳答案
几个潜在的问题:
Info.plist
有一个“允许的后台任务调度程序标识符”(即 BGTaskSchedulerPermittedIdentifiers
)条目,其中包含您的后台任务的标识符。BGTaskScheduler.shared.submit(...)
之后立即设置断点行并执行 _simulateLaunchForTaskWithIdentifier
在 submit
之后被称为。即,确保您甚至可以访问 submit
称呼。 (见下一点。)applicationDidEnterBackground(_:)
中。 .但是,如果您使用的是 UIWindowSceneDelegate
(即在您的 SceneDelegate
中),然后是应用程序委托(delegate)的 applicationDidEnterBackground(_:)
不是调用,而是场景委托(delegate)的 sceneDidEnterBackground(_:)
是。我把调度的BGAppRefreshTaskRequest
在场景代表的sceneDidEnterBackground(_:)
.关于ios - 尝试使用 BGAppRefreshTask 并收到错误 No task request with identifier <decode : missing data> has been scheduled,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65781089/