diff --git a/Libraries/PushNotificationIOS/NativePushNotificationManagerIOS.js b/Libraries/PushNotificationIOS/NativePushNotificationManagerIOS.js index 1eec7bde81481b..84d59b030a9df1 100644 --- a/Libraries/PushNotificationIOS/NativePushNotificationManagerIOS.js +++ b/Libraries/PushNotificationIOS/NativePushNotificationManagerIOS.js @@ -65,6 +65,9 @@ export interface Spec extends TurboModule { +getDeliveredNotifications: ( callback: (notification: Array) => void, ) => void; + +getAuthorizationStatus: ( + callback: (authorizationStatus: number) => void, + ) => void; +addListener: (eventType: string) => void; +removeListeners: (count: number) => void; } diff --git a/Libraries/PushNotificationIOS/PushNotificationIOS.js b/Libraries/PushNotificationIOS/PushNotificationIOS.js index c8c8e535ea444f..efe9b6132e716d 100644 --- a/Libraries/PushNotificationIOS/PushNotificationIOS.js +++ b/Libraries/PushNotificationIOS/PushNotificationIOS.js @@ -399,6 +399,20 @@ class PushNotificationIOS { ); } + /** + * This method returns a promise that resolves to notification authorization status. + */ + static getAuthorizationStatus( + callback: (authorizationStatus: number) => void, + ): void { + invariant( + NativePushNotificationManagerIOS, + 'PushNotificationManager is not available.', + ); + + NativePushNotificationManagerIOS.getAuthorizationStatus(callback); + } + /** * You will never need to instantiate `PushNotificationIOS` yourself. * Listening to the `notification` event and invoking diff --git a/Libraries/PushNotificationIOS/RCTPushNotificationManager.mm b/Libraries/PushNotificationIOS/RCTPushNotificationManager.mm index aa075bb6bfa1e6..3924fd64e2387b 100644 --- a/Libraries/PushNotificationIOS/RCTPushNotificationManager.mm +++ b/Libraries/PushNotificationIOS/RCTPushNotificationManager.mm @@ -471,6 +471,14 @@ - (void)handleRemoteNotificationRegistrationError:(NSNotification *)notification }]; } +RCT_EXPORT_METHOD(getAuthorizationStatus:(RCTResponseSenderBlock)callback) +{ + UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter]; + [center getNotificationSettingsWithCompletionHandler:^(UNNotificationSettings *_Nonnull settings) { + callback(@[@(settings.authorizationStatus)]); + }]; +} + #else // TARGET_OS_UIKITFORMAC RCT_EXPORT_METHOD(onFinishRemoteNotification:(NSString *)notificationId fetchResult:(NSString *)fetchResult) @@ -551,6 +559,11 @@ - (void)handleRemoteNotificationRegistrationError:(NSNotification *)notification RCTLogError(@"Not implemented: %@", NSStringFromSelector(_cmd)); } +RCT_EXPORT_METHOD(getAuthorizationStatus:(RCTResponseSenderBlock)callback) +{ + RCTLogError(@"Not implemented: %@", NSStringFromSelector(_cmd)); +} + - (NSArray *)supportedEvents { return @[];