In this guide
A push that works on your phone and never shows up on a tester's phone has one of five causes. Check them in this order, from the device outward to your server. Each layer takes a few minutes, and the first one that fails is your answer.
1. Permission on the device
- On Android 13 (API 33) and newer, notifications are a runtime permission and the app must ask for it; on iOS the user must allow notifications too (check Apple's current documentation). A tester who tapped "Don't allow" gets nothing. Android's documentation says that for apps targeting API 32 or lower, a user who taps Don't allow isn't asked again until the app is reinstalled or updated to target Android 13 or higher.
- Ask the tester to open the system settings for your app and check that notifications are on.
- Check your own flow: is the permission request shown at all, and at a moment where it makes sense? If the request never appears, the problem is in the app, not the phone.
2. Notification channel (Android)
- Android groups notifications into channels (required from Android 8.0; for apps targeting API 26 or higher a notification without a channel is not shown). If a channel is switched off or set to silent, the message arrives but is not shown.
- Ask the tester to look at the channel list in the app's notification settings.
- Once a channel exists, the app can no longer change its importance or sound; the user controls them. A phone with an older channel keeps the old behavior even if you changed the code. Android's documentation suggests reinstalling the app or clearing its data to reset test channels on development devices; a new channel ID also shows whether this is the cause.
3. The token
The push service addresses a device by a token. No valid token, no delivery.
- Log the token on the device and compare it with the one stored on your server. Are they the same?
- Tokens can change, for example after a reinstall or a data reset. Does your app send the new token to the server?
- Check that the test build uses the same push project and configuration as your server. A build variant with a different config file is a common mismatch.
- On iOS, find out in Apple's current push notification documentation which push environment (development or production) your build uses, and make sure your server sends to the same one.
4. Battery and background rules
Some phone makers stop or delay background apps aggressively. A push can arrive minutes late or only when the screen is turned on. If delivery is irregular rather than absent, read background work killed by battery optimization and ask the tester to try with the app excluded from battery limits.
5. Server side
- Look at the response of your push call. An error such as "invalid token" or "unregistered" tells you the token is stale.
- Check the message type. A message the app only handles in code (data message) does nothing visible unless your app builds the notification itself. A message meant to be shown needs the display fields.
- Check the priority and any time-to-live you set. A short lifetime means a phone that was offline misses the message. Firebase's documentation says a message without a set time-to-live can last up to four weeks, and a TTL of 0 means a message that can't be delivered immediately is discarded.
- Send one test message to a single token from the push console of your provider. If it arrives there but not from your server, the fault is in your server code.
Narrow it down fast
| What you see | Likely layer |
|---|---|
| Works on your phone, not on any tester phone | Server or build configuration |
| Fails on one tester only | Permission, channel or battery |
| Arrives late or only with screen on | Battery rules |
| Server reports invalid token | Token |
Ask the tester for the right details
Request the phone model, Android or iOS version, whether notification permission is on, whether the app was opened after install, and whether battery saver is active. A good bug report saves a round of questions.
Related
- Overview: App testing problems and fixes
- Testers cannot install: device not compatible
- Testers abroad cannot see your test app
Need testers on real devices to confirm the fix? AppReviewX gives you private, structured feedback from other developers: you write one feedback, you earn one credit, and credits buy feedback on your own app. See how AppReviewX works