Short answer
Check the phone first: on Android 13 and higher a new install has notifications off until the user allows them, and on iPhone the app has to ask and the user can say no. If no iPhone gets anything, check that an APNs authentication key is uploaded in the Firebase console. If messages arrive late, send user-facing ones at high priority. If they stopped for some users, the server may be sending to old device tokens.
Rather not fix it yourself? App Fix Ticket starts with a fixed-price diagnosis, then a fixed price for the fix before any fix work.
Why notifications don’t arrive, and the fix
01
Android 13 or higher: the user never allowed notifications
“If a user installs your app on a device that runs Android 13 or higher, your app's notifications are off by default.” Android Developers, Notification runtime permission
Android 13 added a POST_NOTIFICATIONS runtime permission. An app that never asks for it, or a user who taps Don’t allow, means nothing shows on that phone. The fix is to ask at a moment that makes sense to the user, for example after they book or order, and to point users who said no to your app’s notification settings.
02
iPhone: the app never asked, or the user said no
“The first time your app makes this authorization request, the system prompts the person to grant or deny the request and records that response.” Apple, Asking permission to use notifications
iOS asks the user once. If they deny it, asking again shows nothing, and only the user can turn notifications back on. Check the authorization status when the app opens, and if it is denied, explain why notifications help and point the user to the app’s settings.
03
iPhone gets nothing: no APNs key in Firebase
“Upload your APNs authentication key to Firebase.” Firebase, Get started with Firebase Cloud Messaging in Apple platform apps
Firebase sends to iPhones through Apple’s push service, so it needs an APNs authentication key from your Apple Developer account. Without one, Android can work while no iPhone receives anything. Open Project settings, then Cloud Messaging, and upload the key under your iOS app.
04
Notifications arrive late: they are sent at normal priority
“When the device is in Doze mode, delivery may be delayed to conserve battery until the device exits doze.” Firebase, Setting the priority of a message
Normal is the default priority. An Android phone that is asleep in Doze mode can hold a normal priority message until it wakes. Send notifications the user should see right away, such as a new message or an order update, at high priority.
05
It stopped for some users: the server sends to old tokens
“Message sends and topic fanouts for these stale registrations are unlikely to ever be delivered.” Firebase, Best practices for FCM registration token management
The server sends to the device tokens it has saved. A token can change, and a phone that has not connected to FCM for over a month goes stale. If the server keeps only an old token, that user stops getting notifications. Save the latest token each time the app opens, and remove tokens FCM rejects.
06
Nothing shows while the app is open
“if the app is running in the foreground when the notification is received, the app's code determines the behavior.” Firebase, Firebase Cloud Messaging message types
When the app is in the background, Firebase shows a notification message for you. When the app is open, your code decides what happens, so you may need to show the notification yourself. Data messages, which carry only your own fields, always need your code to turn them into a visible notification.
Checked against the vendor’s docs on : Android Developers: Notification runtime permission; Apple docs: Asking permission to use notifications; Firebase docs: Get started with FCM in Apple platform apps; Firebase docs: Setting the priority of a message; Firebase docs: FCM registration token management; Firebase docs: FCM message types.
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. This applies to the first 10 Launch Checks bought after October 30, 2026.See scope and start
“Very responsive, attentive to fixing bugs, and completed the project as needed! Thank you!”
Related: Expo push notifications not working · App Store Guideline 4.5.4 push notifications · Firebase users keep getting logged out · Firebase password reset email not arriving