UNPKG

1.45 kBPlain TextView Raw
1import ExpoModulesCore
2
3public 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}