0

我似乎无法在 IOS 上使用 Flutter workmanager 进行后台获取。

通过调试在 xcode 中调用时,我可以确认它正在工作。只是在部署到设备时永远不会。

我已经初始化了我的工作管理器并设置了回调main.dart

    ...

    Workmanager().initialize(
        callbackDispatcher,
        isInDebugMode: true
    );
}

void callbackDispatcher() 
{
  Workmanager().executeTask((task, inputData) async 
  {
    function()
    
    return Future.value(true);
  });
}

我已将获取后台模式添加到info.plist

<key>UIBackgroundModes</key>
<array>
    <string>fetch</string>
</array>

我已将系统功能添加到project.pbxproj

SystemCapabilities = {
    com.apple.BackgroundModes = {
        enabled = 1;
    };
};

我已将插件添加到appdelegate.swift

import UIKit
import Flutter
import workmanager

@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
  override func application(
    _ application: UIApplication,
    didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
  ) -> Bool {

    UIApplication.shared.setMinimumBackgroundFetchInterval(TimeInterval(60*15))

    return super.application(application, didFinishLaunchingWithOptions: launchOptions)
  }
}

如果有人有工作设置,将不胜感激。

4

1 回答 1

0

好的。对于未来阅读此问题的人来说,这确实“最终”起作用。

在后台打开应用程序约 48 小时后,我终于得到了一个后台任务来运行。这绝不是完全成功,因为它并没有真正达到所需的频率,但这种实现确实“有效”。

只需在调试模式下运行以确认并非常耐心。

于 2022-01-28T23:49:56.303 回答