Short answer
Send one test notification and read the push receipt: it names the error. A notification that works in development but not in the store build usually means the production credentials are missing or wrong: on Android, the FCM V1 service account key uploaded to EAS; on iOS, the push key. Then check that the app still holds a valid token for that user, and send with high priority on Android.
Check these in order
01
Read the push ticket and the push receipt
“To narrow things down, check the push ticket and push receipt for error messages.” Expo, Push notifications troubleshooting and FAQ
When your server sends a notification, the response holds a push ticket with an ID. The ticket only means Expo accepted the message. The push receipt, fetched later with that ID, says whether Apple or Google took it, with an error code if not. Look it up before changing anything.
curl -H "Content-Type: application/json" -X POST "https://exp.host/--/api/v2/push/getReceipts" -d '{ "ids": [ "YOUR-TICKET-ID" ] }'02
Works in development, not in the store build
“This indicates that you have either misconfigured your credentials or didn't configure them at all in your production app.” Expo, Push notifications troubleshooting and FAQ
Expo’s docs say this points to production credentials that are wrong or missing. Store builds need your own credentials, and since SDK 53 Expo Go can’t test push at all, so test with a development build.
03
Android: the FCM V1 key isn’t uploaded, or doesn’t match
“MismatchSenderId : This indicates that there is an issue with your FCM push credentials.” Expo, Send notifications with the Expo push service
Expo delivers Android notifications through Firebase Cloud Messaging, which needs a Google service account key uploaded to EAS (Expo’s build service) for your production build. A MismatchSenderId error means the key and the app’s google-services.json have different sender IDs, usually because they come from different Firebase projects. InvalidCredentials means the credentials are invalid or were revoked. Keep the key file out of your repository.
eas credentials # Android > production > Google Service Account # > Manage your Google Service Account Key for Push Notifications (FCM V1)04
iOS: no push key, or an expired or revoked one
“If you revoke an APN key, all apps that rely on that key will no longer be able to send or receive push notifications” Expo, Send notifications with the Expo push service
A “No valid aps-environment entitlement string found” error means the iOS project has no push key. If the key expired, remove it and generate a new one with eas credentials, then build again. Check first whether other apps use the same key: revoking it stops push for all of them until a new key is uploaded.
05
Old or missing tokens
“On Android, reinstalling the app may result in the token changing.” Expo, Push notifications troubleshooting and FAQ
The app has to ask the user for permission and then send its ExpoPushToken to your server. On Android a reinstall can change the token. Our advice: have the app send its token each time it starts and replace the stored one, so a changed token is picked up. If a receipt says DeviceNotRegistered, stop sending to that token.
06
Android notifications that sometimes don’t show
“Setting the priority to high gives your notification the greatest likelihood that Android will display the notification.” Expo, Push notifications troubleshooting and FAQ
If Android notifications arrive only some of the time, check the priority you send, and set it to high for notifications people need to see.
Checked against the vendor’s docs on : Expo docs: Push notifications troubleshooting and FAQ; Expo docs: Send notifications with the Expo push service; Expo docs: Obtain Google Service Account Keys using FCM V1; Expo docs: Push notifications setup.
Rather hand it over?
Fixed scope, fixed price, paid upfront. The work happens in writing; no call needed.
- from $450App Fix TicketOne reproducible bug in an existing mobile or web app, diagnosed and fixed.See scope and start
- from $450AI-Built App RescueA Lovable, Bolt or Cursor app checked end to end in 3 days, then its worst problems fixed at a fixed price.No issues worth fixing, no charge. If the Launch Check finds nothing rated medium or higher, Simon refunds the full $450. You keep the report either way.See scope and start
Related: Expo EAS build failed · App Store Guideline 2.1 rejection · FCM legacy API shutdown and the HTTP v1 move · Google Play 12 testers for 14 days