iOS中BGAppRefreshTask注册配置无误但无法执行的问题排查
iOS BGAppRefreshTask 无法执行问题排查求助
在iOS应用中使用BGTaskScheduler实现后台任务时,BGAppRefreshTask已完成正确的注册与配置,但始终无法执行。以下是AppDelegate中的相关代码:
import UIKit import Flutter import BackgroundTasks import os @available(iOS 14.0, *) @UIApplicationMain @objc class AppDelegate: FlutterAppDelegate { let taskIdentifier = "com.example.nativeBackgroundTaks.backgroundTask" private var logger = Logger(subsystem: Bundle.main.bundleIdentifier!, category: "BGTasks") override func application( _ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? ) -> Bool { //Task registrieren BGTaskScheduler.shared.register(forTaskWithIdentifier: taskIdentifier, using: nil) { task in guard let task = task as? BGAppRefreshTask else {return} self.handleTask(task: task) } schedule() GeneratedPluginRegistrant.register(with: self) SwiftPlugin.register(with: registrar(forPlugin: "SwiftPlugin")!) return super.application(application, didFinishLaunchingWithOptions: launchOptions) } private func handleTask(task: BGAppRefreshTask) { //Updaten des Timestamps der letzten Aktualisierung logger.info("BGtask started") UserDefaults(suiteName: "group.nativebackgorundwidget")?.set(Date().description, forKey: "last-update") if let suite = UserDefaults(suiteName: "group.nativebackgorundwidget"), let lastUpdate = suite.string(forKey: "last-update") { logger.info("Letztes Update: \(lastUpdate, privacy: .public)") } else { logger.info("Kein gültiger Wert für 'last-update' gefunden.") } schedule() task.expirationHandler = { self.logger.info("Task expired") } task.setTaskCompleted(success: true) } private func schedule() { // Manual Test: e -l objc -- (void)[[BGTaskScheduler sharedScheduler] _simulateLaunchForTaskWithIdentifier:@"com.example.nativeBackgroundTaks.backgroundTask"] self.logger.info("start task scheduled") BGTaskScheduler.shared.getPendingTaskRequests(completionHandler: { tasks in self.logger.info("Running Tasks: \(tasks.count, privacy: .public)") }) BGTaskScheduler.shared.getPendingTaskRequests { requests in guard requests.isEmpty else { return } do { let newTask = BGAppRefreshTaskRequest(identifier: self.taskIdentifier) newTask.earliestBeginDate = Date(timeIntervalSinceNow: 1 * 60) try BGTaskScheduler.shared.submit(newTask) self.logger.info("task scheduled") } catch { self.logger.info("Failed to schedule task: \(error)") } } } }
已完成以下排查步骤,但问题仍未解决:
- 确认后台任务已在正确的应用生命周期阶段(didFinishLaunchingWithOptions)完成注册;
- 检查设备能源管理,确保未处于低电量模式;
- 确认earliestBeginDate参数设置正确;
- 在开发环境中使用LLDB命令模拟后台任务触发;
- 已核查后台执行所需的各项权限。
恳请帮忙分析iOS拒绝执行该任务的原因,或指出可能遗漏的配置项。
内容的提问来源于stack exchange,提问作者machk1auge
相关产品推荐
相关产品推荐

