You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 21:22:49