我有一个 Expo/React Native 应用程序,可以接收
Firebase Messaging
通知。 Firebase 消息的两个处理程序使用 expo-notifications
来呈现带有来自远程推送通知的数据的本地通知。这部分按预期工作。
如果用户点击某些通知,则需要将他们重新路由到特定屏幕。为此,我尝试使用
Notifications.getLastNotificationResponseAsync
、Notifications.useLastNotificationResponse
和 Notifications.addNotificationResponseReceivedListener
。 Notifications.useLastNotificationResponse
有点作用;仅在 Android 上,当应用程序位于前台且应用程序在第一次按下通知时崩溃。必须按第二次,然后应用程序打开并重新路由。 Notifications.useLastNotificationResponse
在 iOS 上无法工作,即使在前台也是如此,另外两个在任何一个操作系统上都根本无法工作。我需要它在两个平台和所有应用程序状态(已终止、前台和后台)下工作而不会崩溃。
这是我当前代码的简化版本:
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]);
我认为只有当 screen 为真(即包含路线)时,你才需要有条件地调用 Navigation.navigate(screen)
此外,请在应用程序的根级别调用此 useEffect,而不是在任何子组件中。