Skip to content

[notifications] add FCM intent origin validation#43206

Merged
vonovak merged 1 commit intomainfrom
vonovak__notifications_add_fcm_intent_origin_validation
Feb 18, 2026
Merged

[notifications] add FCM intent origin validation#43206
vonovak merged 1 commit intomainfrom
vonovak__notifications_add_fcm_intent_origin_validation

Conversation

@vonovak
Copy link
Copy Markdown
Contributor

@vonovak vonovak commented Feb 17, 2026

Why

closes #34523

This PR fixes an issue with notification handling on Android by properly filtering out OEM-injected extras that aren't actual FCM notifications. Some device manufacturers (like Samsung) inject extras into intents that can be mistakenly processed as notifications.

How

  • Added a constant GOOGLE_MESSAGE_ID_KEY to reference the FCM message ID key consistently
  • Added validation in ExpoNotificationLifecycleListener to check if intents contain the FCM message ID before processing them as notifications

Test Plan

  • notification tester app on device - send push notification to a killed app, tap it, observe isFCMIntent returning true in ExpoNotificationLifecycleListener

Checklist

Copy link
Copy Markdown
Contributor Author

vonovak commented Feb 17, 2026

This stack of pull requests is managed by Graphite. Learn more about stacking.

@expo-bot expo-bot added the bot: suggestions ExpoBot has some suggestions label Feb 17, 2026
@expo-bot
Copy link
Copy Markdown
Collaborator

expo-bot commented Feb 17, 2026

The Pull Request introduced fingerprint changes against the base commit: 0e1c33b

Fingerprint diff
[
  {
    "op": "changed",
    "beforeSource": {
      "type": "dir",
      "filePath": "../../packages/expo-notifications/android",
      "reasons": [
        "expoAutolinkingAndroid"
      ],
      "hash": "9caf67006de510b0ef5aaaa31ac795e2d5b8690d"
    },
    "afterSource": {
      "type": "dir",
      "filePath": "../../packages/expo-notifications/android",
      "reasons": [
        "expoAutolinkingAndroid"
      ],
      "hash": "329be3225a338cf67cdd5a9d92af0c4b6f7991ed"
    }
  }
]

Generated by PR labeler 🤖

@vonovak vonovak force-pushed the vonovak__notifications_add_fcm_intent_origin_validation branch from 195403f to 6b8b4ba Compare February 17, 2026 12:25
@expo-bot expo-bot added bot: passed checks ExpoBot has nothing to complain about and removed bot: suggestions ExpoBot has some suggestions labels Feb 17, 2026
@vonovak vonovak force-pushed the vonovak__notifications_add_fcm_intent_origin_validation branch from 6b8b4ba to 491d689 Compare February 17, 2026 21:29
@vonovak vonovak requested a review from douglowder February 17, 2026 21:29
@vonovak vonovak marked this pull request as ready for review February 17, 2026 21:29
@github-actions
Copy link
Copy Markdown
Contributor

Subscribed to pull request

File Patterns Mentions
packages/expo-notifications/** @douglowder

Generated by CodeMention

@vonovak vonovak merged commit 9b42171 into main Feb 18, 2026
15 checks passed
@vonovak vonovak deleted the vonovak__notifications_add_fcm_intent_origin_validation branch February 18, 2026 08:21
benjaminkomen pushed a commit to benjaminkomen/expo that referenced this pull request Feb 25, 2026
# Why

closes expo#34523

This PR fixes an issue with notification handling on Android by properly
filtering out OEM-injected extras that aren't actual FCM notifications.
Some device manufacturers (like Samsung) inject extras into intents that
can be mistakenly processed as notifications.

# How

- Added a constant `GOOGLE_MESSAGE_ID_KEY` to reference the FCM message
ID key consistently
- Added validation in `ExpoNotificationLifecycleListener` to check if
intents contain the FCM message ID before processing them as
notifications

# Test Plan

- notification tester app on device - send push notification to a killed
app, tap it, observe `isFCMIntent` returning `true` in
`ExpoNotificationLifecycleListener`

# Checklist

- [x] I added a `changelog.md` entry and rebuilt the package sources
according to [this short
guide](https://github.com/expo/expo/blob/main/CONTRIBUTING.md#-before-submitting)
- [ ] This diff will work correctly for `npx expo prebuild` & EAS Build
(eg: updated a module plugin).
- [ ] Conforms with the [Documentation Writing Style
Guide](https://github.com/expo/expo/blob/main/guides/Expo%20Documentation%20Writing%20Style%20Guide.md)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bot: fingerprint changed bot: passed checks ExpoBot has nothing to complain about

Projects

None yet

Development

Successfully merging this pull request may close these issues.

getLastNotificationResponseAsync returns a half-empty object when the app is launched on Android

3 participants