UNPKG

1.59 kBPlain TextView Raw
1import ExpoModulesCore
2
3class BackgroundFetchTaskConsumer: NSObject, EXTaskConsumerInterface {
4 var task: EXTaskInterface?
5
6 static func supportsLaunchReason(_ launchReason: EXTaskLaunchReason) -> Bool {
7 return launchReason == EXTaskLaunchReasonBackgroundFetch
8 }
9
10 func taskType() -> String {
11 return "backgroundFetch"
12 }
13
14 func didRegisterTask(_ task: EXTaskInterface) {
15 self.task = task
16 updateMinimumInterval()
17 }
18
19 func setOptions(_ options: [AnyHashable: Any]) {
20 updateMinimumInterval()
21 }
22
23 func didBecomeReadyToExecute(withData data: [AnyHashable: Any]?) {
24 task?.execute(withData: nil, withError: nil)
25 }
26
27 func normalizeTaskResult(_ result: Any?) -> UInt {
28 guard let result = result as? Int else {
29 return UIBackgroundFetchResult.noData.rawValue
30 }
31
32 switch result {
33 case BackgroundFetchResult.newData.rawValue:
34 return UIBackgroundFetchResult.newData.rawValue
35 case BackgroundFetchResult.failed.rawValue:
36 return UIBackgroundFetchResult.failed.rawValue
37 case BackgroundFetchResult.noData.rawValue:
38 return UIBackgroundFetchResult.noData.rawValue
39 default:
40 return UIBackgroundFetchResult.noData.rawValue
41 }
42 }
43
44 private func updateMinimumInterval() {
45 let interval = task?.options?["minimumInterval"] as? Double
46
47 let timeInterval = {
48 if let interval {
49 return TimeInterval(interval)
50 }
51 return UIApplication.backgroundFetchIntervalMinimum
52 }()
53
54 DispatchQueue.main.async {
55 UIApplication.shared.setMinimumBackgroundFetchInterval(timeInterval)
56 }
57 }
58}