Push Notifications in 2026: Expo, APNs and FCM Basics
Beto, February 23, 2026 · 9,134 views
Learn the essentials of push notifications in React Native apps using Expo, Apple Push Notification service (APNs), and Firebase Cloud Messaging (FCM): how tokens work, how to request permissions, and how to debug notifications when they don’t arrive.
If you build React Native or native iOS/Android apps, you'll learn the full push notification flow and how to troubleshoot issues effectively. I also cover tools like Quick Push and the open-source X1 Notifications app for testing and debugging.
What's inside
- Requesting push notification permissions and handling user consent
- Understanding push notification tokens and their lifecycle
- Sending notifications via Expo and native services (APNs and FCM)
- How Expo manages tokens and notification delivery
- Using Quick Push to test and debug push notifications
- Debugging with native tokens and the X1 Notifications app
- Handling errors and invalid tokens in push notification responses
- Setting up credentials for native iOS push notifications
Requesting push notification permissions and handling user consent
The first step in your app, whether iOS or Android, is to request permission from the user to receive push notifications. If the user denies permission, you cannot send notifications to that device.
When the user accepts, your app obtains a push notification token. This token is a unique string that identifies the device for push services. You must save this token in your backend to send notifications later.
Understanding push notification tokens and their lifecycle
Push tokens are not permanent. They can change over time, for example, if the user reinstalls the app. Because of this, you should always fetch the token fresh when the app opens instead of relying on a cached value.
The recommended approach is to get the token directly from Expo Notifications or your native library each time the app launches. Then compare it with the token stored in your database. If the token has changed, update your backend with the new token.
Sending notifications via Expo and native services (APNs and FCM)
When sending a push notification, you don’t send it directly to the device. Instead, your server sends it to a push service depending on the platform:
- For iOS devices, notifications go through Apple Push Notification service (APNs).
- For Android devices, notifications go through Firebase Cloud Messaging (FCM).
If you use Expo Notifications, Expo abstracts this for you and provides a unified token that works for both platforms.
How Expo manages tokens and notification delivery
Expo returns a token when you request permissions in your app. When you send a notification using Expo’s push API, Expo responds with a receipt ID confirming it queued the notification.
However, this receipt only means Expo received the notification, not that it was delivered to the user. Expo queues the notification and sends it to APNs or FCM, which then deliver it to the device.
You can check the delivery status by querying the receipt ID. If the receipt confirms delivery, the notification reached the device. If not, something went wrong.
Using Quick Push to test and debug push notifications
Quick Push is a tool for sending push notifications manually to Expo or directly to APNs and FCM. It supports sending images and rich notifications.
You can paste tokens and payloads into Quick Push and send notifications to test your setup. Quick Push also shows raw JSON responses and receipt IDs, which help you debug delivery issues.
Quick Push is available on Mac and iOS and can be used alongside curl commands for terminal testing.
Debugging with native tokens and the X1 Notifications app
X1 Notifications is an open-source app useful for debugging push notifications. It can show you the native push tokens for iOS (APNs) and Android (FCM) devices.
Using X1 Notifications, you can verify the tokens your app receives and compare them with what your backend has. This helps identify token mismatches or invalid tokens causing delivery failures.
Handling errors and invalid tokens in push notification responses
If you send a notification with an invalid or outdated token, the push service returns an error indicating the token is not registered or associated with your project.
This error means you should remove or update that token in your database. I demonstrate changing one character in a token to simulate this error and show the response you get.
Always check responses from push services to handle errors gracefully and keep your token list clean.
Setting up credentials for native iOS push notifications
For native iOS push notifications, you need to configure credentials including your Apple team ID, app bundle ID, and a P8 key.
If you use X1 Notifications or Expo, you must provide these credentials so the service can authenticate with APNs and send notifications on your behalf.
I briefly show where to set these credentials in your app or service configuration.
Resources

CourseReact Native course
Fundamentals through shipping: the concepts behind the prompts, with lifetime access.
Like this article? Get the rest of the library plus weekly React Native tips. Free.