react-native-notifications: iOS cannot receive first push notification when open in foreground

Version: 3.1.2 RN version: 0.61.5

Using this version and lines from documentation

Notifications.events().registerNotificationReceivedForeground((notification: Notification, completion: (response: NotificationCompletion) => void) => {
      console.log("Notification Received - Foreground", notification.payload);

      // Calling completion on iOS with `alert: true` will present the native iOS inApp notification.
      completion({alert: true, sound: true, badge: false});
        });

I can only see the push notification alert starts from 2nd push notification, but not the first one.

About this issue

  • Original URL
  • State: closed
  • Created 4 years ago
  • Reactions: 6
  • Comments: 15

Most upvoted comments

To fix this bug in RN notifications 3.1.4, go first to RNNotificationsStore.m, then find the initializer and apply this changes (you can also apply this patch using patch-package):

 diff --git a/node_modules/react-native-notifications/lib/ios/RNNotificationsStore.m b/node_modules/react-native-notifications/lib/ios/RNNotificationsStore.m
index d5e953a..18075da 100644
--- a/node_modules/react-native-notifications/lib/ios/RNNotificationsStore.m
+++ b/node_modules/react-native-notifications/lib/ios/RNNotificationsStore.m
@@ -16,8 +16,13 @@ + (instancetype)sharedInstance {
 
 - (instancetype)init {
     self = [super init];
-    _actionCompletionHandlers = [NSMutableDictionary new];
-    _presentationCompletionHandlers = [NSMutableDictionary new];
+    if (!_actionCompletionHandlers){
+        _actionCompletionHandlers = [NSMutableDictionary new];
+    }
+    
+    if (!_presentationCompletionHandlers) {
+        _presentationCompletionHandlers = [NSMutableDictionary new];
+    }
     return self;
 }

I won’t put together a PR because it seems that the maintainers are not accepting/reviewing PRs, however, if @yogevbd is willing to review it, I’ll be glad to do it.

My current fix:

  1. Downgrade to 3.1.1
  2. In AppDelegate.m
  • make it conform to UNUserNotificationCenterDelegate
  • add a line [RNNotifications addNativeDelegate:self]; in didFinishLaunchingWithOptions
  • add a function:
- (void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler {
    completionHandler(UNNotificationPresentationOptionBadge | UNNotificationPresentationOptionSound | UNNotificationPresentationOptionAlert);
}

When you set this - [RNNotifications addNativeDelegate:self]; you will not be able to get notification from event listener Notifications.events().registerNotificationOpened that method will not trigger

Same problem