Flutter IOS Workmanager 后台获取从未在生产中调用
Flutter IOS Workmanager Background Fetch Never Called in Production
我似乎无法在 IOS 上使用 Flutter workmanager 进行后台获取。
我可以通过调试确认在 xcode 中调用时它正在工作。只是从不部署到设备上。
我已经在 main.dart
中初始化了我的 workmanager 和回调设置
...
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)
}
}
如果有人有可用的设置,将不胜感激。
好的。对于未来阅读此问题的人来说,这确实“最终”起作用。
让应用程序在后台打开约 48 小时后,我终于得到了 运行 的后台任务。这绝不是一个完全的成功,因为它并没有真正达到所需的频率,但是这个实现确实'work'none the less.
只需运行在调试模式下确认并耐心等待。
我似乎无法在 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)
}
}
如果有人有可用的设置,将不胜感激。
好的。对于未来阅读此问题的人来说,这确实“最终”起作用。
让应用程序在后台打开约 48 小时后,我终于得到了 运行 的后台任务。这绝不是一个完全的成功,因为它并没有真正达到所需的频率,但是这个实现确实'work'none the less.
只需运行在调试模式下确认并耐心等待。