- Delivered means OneSignal successfully handed the notification off to the push service (FCM, APNs, or HMS) and received a success response.
- Confirmed means the OneSignal SDK on the device received the notification.
Before you begin
Gather the following to help troubleshoot. You will need these to identify the correct Subscription and check delivery status.- Your OneSignal App ID
- The Message ID of the notification that didn’t show
- The affected user’s Subscription ID
If you only have the External ID, find the Subscription in Audience > Subscriptions by filtering on Device Type, Last Session, or IP Address.
Device settings
This section applies to all platforms. Check these first before investigating platform-specific or code-level causes.Permission and subscription status
On the device:- Navigate to Settings > Notifications and open the app’s notification settings.
- Confirm that notification permission is enabled.
- Then open the app. If our SDK initializes, it will sync the subscription status back to OneSignal.
- Navigate to Audience > Subscriptions.
- Search for the Subscription ID or External ID or sort by Device Type, Last Session, or IP Address.
- Confirm the push status shows Subscribed. If it shows unsubscribed or does not appear, the device will not receive notifications regardless of what you send. If the status is unexpected, see Troubleshooting below.
Do not disturb and focus modes
Do Not Disturb and Focus modes on both Android and iOS can suppress notifications entirely or group them in ways that make them appear invisible until the mode is cleared. Disable these modes before testing:- iOS: Settings > Focus > Do Not Disturb > turn off
- Android: Settings > Notifications > Do Not Disturb > turn off
On iOS, if a notification arrives during Focus mode and the user swipes away the grouped notification summary, those notifications will not reappear individually later.
Low power mode and battery optimization
iOS: Disable Low Power Mode in Settings > Battery before testing. Android devices: In Battery Settings, set the app to “Unrestricted” or “Not Optimized”. If you don’t see that option, search for Battery Optimization, Power Saving Mode, Energy Saving, Background usage limits, or Adaptive Battery Settings and disable for the app.Network and connectivity
Devices must be online to receive push notifications. If the device is turned off, in airplane mode, has unstable or no internet connection, the push will not show until a proper connection is made. You can set the timeframe FCM and APNs will wait for a connection with the Time To Live (TTL) Parameter (the default is 3 days). If the device is on a WiFi network with a firewall or VPN, that network may be blocking the connection to Apple or Google servers. Test by switching to cellular data. If you are managing network traffic through a firewall, configure it to allow the following:- FCM (Android): outbound TCP ports 5228, 5229, and 5230. See FCM documentation for full requirements.
- APNs (iOS): outbound TCP port 5223 and TCP port 443 or 2197. See Apple’s documentation for full requirements.
Notification grouping behavior
Different versions of Android and iOS have their own notification grouping behavior. Notification grouping is when several notifications for the same app or multiple apps are grouped together in the notification center. It’s common for grouped notifications to be dismissed together, causing users to miss individual notifications.Android issues
This section applies only to Android devices. If you are troubleshooting iOS, skip to iOS issues.Android Force Stop
When an Android app is Force Stopped, the operating system prevents it from receiving push notifications until the user manually reopens it. This is one of the most common causes of missed notifications on Android. Some manufacturers — including Samsung, Xiaomi, and Huawei — aggressively Force Stop apps when the user swipes them away from the recent apps list, while exempting large apps like Gmail and WhatsApp. See dontkillmyapp.com for device-specific behavior. To reduce Force Stop behavior on the affected device, try the following steps in order:- Allow background activity: Settings > Apps > Your App > Battery > Allow background activity.
- Disable sleeping apps: Settings > Battery and Device Care > Battery > Background Usage Limits > Sleeping Apps > remove your app from this list.
- Lock the app in Recent Apps: Open your app, tap the Recent Apps button, then tap and hold on the app window and select Lock this app (available on some Samsung models).
- Enable auto-start (some devices): Settings > Apps > Your App > Permissions > Auto-Start > Enable.
- Disable adaptive battery optimization: Settings > Battery and Device Care > Battery > More Battery Settings > Adaptive Battery > toggle off (or exclude your app).
com.company.appname with your package name:
stopped=false means the app is not Force Stopped. stopped=true means it is.
You can also send a few notifications and check logcat for this entry:
FCM provides an API to check the last time a device connected to FCM servers. This can confirm whether the device is reachable at all. See Google’s documentation on app instance info for details.To help users fix this themselves, use an in-app message to target known Android devices users with instructions to enable background activity. See Example: Target certain Android manufacturers and devices.
Android notification categories disabled
Android notification categories (also called channels) allow users to disable specific types of notifications from your app. If a category is disabled, notifications sent with that category will not appear on the device — even if the app has notification permission. Check the category state on the device: Settings > Notifications > Your App. Confirm that “Show notifications” is enabled and that all categories are toggled on.
You can use in-app messages to target Samsung users with instructions to re-enable categories. See Example: Target certain Android manufacturers and devices.
Android Doze mode, priority, and deprioritized messages
Android’s Doze mode and App Standby features delay background processes — including push delivery — when the device is unplugged and stationary. These modes activate automatically and are not visible to the user. Sending high priority messages will wake the device and bypass Doze mode. However, if you send too many high priority messages that do not result in visible notifications, FCM may automatically downgrade your messages to normal priority. From FCM documentation:High priority messages on Android are meant for time sensitive, user visible content. If FCM detects a pattern in which messages do not result in user-facing notifications, your messages may be deprioritized to normal priority.If you suspect deprioritization, reduce high priority usage to time-sensitive messages only.
Android emulator setup
Push notifications on Android emulators require Google Play Services. If you are testing on an emulator and not receiving notifications, verify the following:- The emulator image includes the Google Play Store
- The emulator is configured to use a Cold Boot
iOS issues
This section applies only to iOS devices. If you are troubleshooting Android, see Android issues.APNs notification coalescing
If multiple notifications were sent while an iOS device was offline or unreachable, only the most recent one may appear when the device reconnects. APNs stores one notification per app while the device is offline and discards earlier ones. This is expected APNs behavior and cannot be changed by OneSignal or your app.iOS foreground blocking
If you set up the iOS UNUserNotificationCenterDelegate, you may have code blocking the notification from showing while the app is in the foreground. Remove this custom code and use our SDK’s Foreground Event Listener instead.iOS badge clearing
When an app clears its badge count, iOS removes all of that app’s notifications from the Notification Center. The OneSignal SDK clears badges automatically when the app opens, which means previously delivered notifications may disappear when the user next opens the app. If this is causing confusion during testing, see Badges for how to control this behavior.Message configuration
This section covers issues caused by how the notification was configured in OneSignal, not by the device.Subscription not in the target audience
Check the message audience to verify that your mobile Subscription is included:- Segments: Verify your Subscription meets all audience filter conditions.
- Direct send: Confirm the ID you are targeting is correct:
- The Subscription is still subscribed to push.
- It has a recent last session date — you may be sending to an old or inactive Subscription.
Collapse ID replacing notifications
If you are setting a Collapse ID on your messages, a new notification with the same Collapse ID will silently replace any unread notification with that ID. If the user has not opened the earlier notification, they will only see the newest one. See Remove notifications and TTL for details on how Collapse ID works.Code-level causes
This section requires access to the app’s source code. If you do not have code access, share these checks with your development team.OneSignal foreground notification prevention
The OneSignal SDK’s Foreground Event Listener includes anevent.preventDefault() method that suppresses a notification while the app is in the foreground. If this method is called unconditionally in your code, all foreground notifications will be silently blocked.
While testing, keep the app in the background or fully closed to rule out foreground suppression as the cause.
Android Notification Service Extension
If you have implemented the Android Notification Service Extension, this is the first entry point for an incoming notification in your app. Ifevent.preventDefault() is called inside this extension, the notification will be blocked regardless of app state. Review the extension code and confirm this method is only called intentionally.
Firebase Messaging SDK conflict
If your app also includes the Firebase Messaging SDK, verify it is not intercepting FCM messages before OneSignal can process them. This issue commonly occurs when:- Notifications show as Delivered in OneSignal but never appear on the device.
- The app includes both OneSignal and
firebase_messaging(or a customFirebaseMessagingService). - Push works when Firebase Messaging is removed, but fails when both SDKs are present.
-
Check your
AndroidManifest.xmlfor legacy Firebase receivers such ascom.google.firebase.iid.FirebaseInstanceIdReceiverand remove/conditionally exclude them if OneSignal is responsible for push delivery. -
Check for custom
FirebaseMessagingServiceimplementations (or libraries such asfirebase_messagingin Flutter) that overrideonMessageReceived. If another service fully processes or suppresses messages, it may consume the FCM payload before OneSignal can display the notification. -
Avoid calling Firebase token management APIs such as:
FirebaseMessaging.getToken()orFirebaseMessaging.deleteToken().
User.pushSubscription.token) and listen for subscription/token changes using the SDK’s observer APIs.
Troubleshooting
If you have worked through the sections above and the issue is not resolved, capture a debug log. This is the fastest way to identify exactly where delivery is failing. Follow Getting a Debug Log to enable verbose logging in your app. Then:- Put the app in the background
- Send a test notification to the affected device
- Check the log for any errors. Make sure you see OneSignal initialized and the
subscription-idin the log is subscribed to push and the same as the one you are sending the message to.
Need help?Contact our Support team at
support@onesignal.comPlease include:- Your OneSignal App ID
- The Subscription ID or External ID
- The URL to the message you tested in the OneSignal Dashboard
- The full debug log from Getting a Debug Log