1 import ExpoModulesCore 2 3 public class BackgroundFetchModule: Module { 4 private var taskManager: EXTaskManagerInterface? 5 definitionnull6 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 getStatusnull39 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 } 50