Globe
Globe

Reputation: 195

Expo Notifications - NotificationResponse not working

I have an Expo/React Native app that receives Firebase Messaging notifications. Two handlers for the Firebase messages use expo-notifications to present a local notification with data from the remote push notification. This part works as expected.

If a user clicks on certain notifications, they need to be re-routed to specific screens. To do this, I have tried using Notifications.getLastNotificationResponseAsync, Notifications.useLastNotificationResponse, and Notifications.addNotificationResponseReceivedListener. Notifications.useLastNotificationResponse works somewhat; only on Android when the app is in the foreground, and the app crashes the first time a notification is pressed. It has to be pressed a second time, then the app opens and re-routes. Notifications.useLastNotificationResponse is not working on iOS, even in the foreground, and the other two did not work at all for either OS. I need this to work on both platforms and in all app states (killed, foreground, and background) without crashing.

Here is a simplified version of the current code I have for this:

  const lastNotification = Notifications.useLastNotificationResponse();

  useEffect(() => {
    if (
      lastNotification &&
      lastNotification.notification &&
      lastNotification.actionIdentifier ===
        ExpoNotifications.DEFAULT_ACTION_IDENTIFIER
    ) {
      const notification = lastNotification.notification;

      console.log("Notification response");

      const screen = notification.request.content.data.screen;

      navigation.navigate(screen);
    }
  }, [lastNotification]);

Upvotes: 1

Views: 646

Answers (1)

Victor
Victor

Reputation: 1

I think you need to conditionally call the Navigation.navigate(screen) only if screen is true (i.e. contains a route)

Also, call this useEffect at the root level of your app, not within any of your child component.

Upvotes: 0

Related Questions