Fix stale push notification replay after account switch (#10792)

This commit is contained in:
Spence Pope
2026-06-10 16:46:35 -04:00
committed by GitHub
parent b667cafca1
commit 974d2b15d5
2 changed files with 22 additions and 0 deletions
+10
View File
@@ -850,6 +850,8 @@ const LINKING = {
},
} satisfies LinkingOptions<AllNavigatorParams>
let didHandlePushNotificationEntry = false
function RoutesContainer({children}: React.PropsWithChildren<{}>) {
const ax = useAnalytics()
// eslint-disable-next-line react-compiler/react-compiler
@@ -910,6 +912,14 @@ function RoutesContainer({children}: React.PropsWithChildren<{}>) {
function handlePushNotificationEntry() {
if (!IS_NATIVE) return
// Only consume a launching notification once per JS runtime. Account
// switches remount the entire tree (see `key={currentAccount?.did}` in
// `App.native.tsx`), which re-fires `onNavigationReady` and would
// otherwise re-process whatever `getLastNotificationResponse` still has
// cached natively (APP-2338).
if (didHandlePushNotificationEntry) return
didHandlePushNotificationEntry = true
// intent urls are handled by `useIntentHandler`
if (linkingUrl) return
+12
View File
@@ -380,6 +380,18 @@ export function useNotificationsHandler() {
handleNotification(payload)
Notifications.dismissAllNotificationsAsync()
// Also clear the native `lastResponse` cache. Otherwise a subsequent
// `getLastNotificationResponse()` (e.g. on an account-switch remount,
// which re-runs `handlePushNotificationEntry`) would replay this
// payload and ping-pong the user back to the previous account/chat.
try {
Notifications.clearLastNotificationResponse()
} catch (error) {
notyLogger.error(
`useNotificationsHandler: error clearing notification response`,
{error},
)
}
} else {
logger.error('useNotificationsHandler: received no payload', {
identifier: e.notification.request.identifier,