1 | import ExpoModulesCore
|
2 |
|
3 | public class BackgroundFetchModule: Module {
|
4 | private var taskManager: EXTaskManagerInterface?
|
5 |
|
6 | public func definition() -> ModuleDefinition {
|
7 | Name("ExpoBackgroundFetch")
|
8 |
|
9 | OnCreate {
|
10 | taskManager = appContext?.legacyModule(implementing: EXTaskManagerInterface.self)
|
11 | }
|
12 |
|
13 | AsyncFunction("getStatusAsync") {
|
14 | return getStatus().rawValue
|
15 | }.runOnQueue(.main)
|
16 |
|
17 | AsyncFunction("setMinimumIntervalAsync") { (minimumInterval: Double) in
|
18 | let timeInterval = TimeInterval(minimumInterval)
|
19 | UIApplication.shared.setMinimumBackgroundFetchInterval(timeInterval)
|
20 | }.runOnQueue(.main)
|
21 |
|
22 | AsyncFunction("registerTaskAsync") { (name: String, options: [String: Any]) in
|
23 | guard let taskManager else {
|
24 | throw TaskManagerNotFound()
|
25 | }
|
26 |
|
27 | if !taskManager.hasBackgroundModeEnabled("fetch") {
|
28 | throw BackgroundFetchDisabled()
|
29 | }
|
30 |
|
31 | taskManager.registerTask(withName: name, consumer: BackgroundFetchTaskConsumer.self, options: options)
|
32 | }
|
33 |
|
34 | AsyncFunction("unregisterTaskAsync") { (name: String) in
|
35 | taskManager?.unregisterTask(withName: name, consumerClass: BackgroundFetchTaskConsumer.self)
|
36 | }
|
37 | }
|
38 |
|
39 | private func getStatus() -> BackgroundFetchStatus {
|
40 | switch UIApplication.shared.backgroundRefreshStatus {
|
41 | case .restricted:
|
42 | return .restricted
|
43 | case .available:
|
44 | return .available
|
45 | case .denied:
|
46 | return .denied
|
47 | }
|
48 | }
|
49 | }
|