// Copyright 2018-present 650 Industries. All rights reserved. #import #import #import @interface EXBackgroundNotificationTasksModule () @property (nonatomic, weak) id taskManager; @end @implementation EXBackgroundNotificationTasksModule EX_EXPORT_MODULE(ExpoBackgroundNotificationTasksModule); # pragma mark - EXModuleRegistryConsumer - (void)setModuleRegistry:(EXModuleRegistry *)moduleRegistry { _taskManager = [moduleRegistry getModuleImplementingProtocol:@protocol(EXTaskManagerInterface)]; } # pragma mark - Exported methods EX_EXPORT_METHOD_AS(registerTaskAsync, registerTaskWithName:(nonnull NSString *)taskName resolve:(EXPromiseResolveBlock)resolve reject:(EXPromiseRejectBlock)reject) { if (![_taskManager hasBackgroundModeEnabled:@"remote-notification"]) { return reject( @"E_BACKGROUND_REMOTE_NOTIFICATIONS_DISABLED", @"Background remote notifications have not been configured. To enable it, add `remote-notification` to `UIBackgroundModes` in the application's Info.plist file.", nil ); } @try { [_taskManager registerTaskWithName:taskName consumer:EXBackgroundRemoteNotificationConsumer.class options:@{}]; } @catch (NSException *e) { return reject(e.name, e.reason, nil); } resolve(nil); } EX_EXPORT_METHOD_AS(unregisterTaskAsync, unregisterTaskWithName:(nonnull NSString *)taskName resolve:(EXPromiseResolveBlock)resolve reject:(EXPromiseRejectBlock)reject) { @try { [_taskManager unregisterTaskWithName:taskName consumerClass:[EXBackgroundRemoteNotificationConsumer class]]; } @catch (NSException *e) { return reject(e.name, e.reason, nil); } resolve(nil); } @end