Skip to content

Expo push notification problemWhy are my Expo push notifications not arriving?

The notification worked while you were testing, then the store build went quiet, or some users get it and others don’t. Push has many moving parts, so start with what Expo itself reports back. Here’s the order to check, or hand it over at a fixed price.

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

  1. 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" ] }'
  2. 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.

  3. 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)
  4. 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.

  5. 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.

  6. 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.

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

Questions

More on this error

Can I test push notifications in a simulator?

Yes, within limits: Expo lists a physical device, an Android Emulator with Google Play services, or an iOS Simulator on Xcode 14 or later (macOS 13+, iOS 16+). Expo Go can’t test push from SDK 53, so use a development build.

Does Expo charge for push notifications?

Expo’s FAQ says there is no cost to send through its push service. It does limit each project to 600 notifications per second; requests over the limit fail until the rate drops, so pace large sends.

What access do you need to sort it out?

The repo, the EAS project and the push receipt for a failing send. You keep the Apple, Google and Firebase accounts; we list the credential changes for you to make, or make them with access you grant, and send a test to a device you choose.

Can you fix it for me?

If one bug is the whole problem, the App Fix Ticket covers it: a written diagnosis first, then the fix. If the app has more going on, the Launch Check is a written check of the whole app. Each issue found is rated critical, high, medium or low, with where it is and how it was confirmed. 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.

A different error?

Describe it and get a written quote

Send the error and what you were doing. You get a written scope, a fixed price and a timeline; we reply by email, usually within one business day.