Overview

Confirmed delivery tracks whether a device has actually received a push notification sent via OneSignal. This information appears in the notification’s Message Report under the status “Confirmed” or “Received.”
Confirmed Deliveries Flow

Confirmed Deliveries Flow

Push notifications are sent from OneSignal to platform-specific services:
  • Apple Push Notification Services (APNs) for iOS and Safari
  • Google Firebase Cloud Messaging (FCM) for Android and Chrome
  • Huawei Messaging Service (HMS) for Huawei devices
  • Amazon Device Messaging (ADM) for Amazon devices
  • Microsoft Push Notification Service (MPNS) for Windows devices
When these push services receive the notification from OneSignal, they send us back a success, unsubscribed, or failed response. The successful push notifications are sent by these push services to your end users. Once the user’s device receives the push notification, the OneSignal SDK sends a “Confirmed Delivery” event which is a received reciept of the notification ID and the push subscription ID.

Requirements

  • Confirmed Delivery is only available on paid plans. Compare plans and pricing.
  • Complete all steps in our Mobile SDK Setup, especially the iOS Notification Service Extension and App Group setup.
  • The push Subscription must have our device-side SDK installed (cannot be an API-created subscription).

Platform-specific limitations

iOS

  • Requires both the Notification Service Extension (NSE) and correct App Group configuration to confirm receipt. Make sure to follow our Mobile SDK Setup guide for directions on setup and testing.
  • APNs keeps only 1 message per app if device is offline. If the iOS device is offline and 2 or more push is sent to it, only the last push will be received.

Huawei

  • Only available for data Huawei message type. However, Huawei provides the confirmed delivery data for the message type directly in their dashboard.

Web

  • Safari is not supported.

Handling inactive devices

Devices that are offline will not receive push notifications. This is common when users change or abandon devices. Tips for re-engagement:
  • Use Audience Activity to try resending messages to users who “Did not Confirm Delivery.”
  • Create Segments based on Last Session to identify users inactive for 6 months, 1 year, or longer.
  • Periodically target inactive users with push notifications to identify unsubscribed or unreachable devices.
See Subscriptions and When do push subscription statuses update? for more details.

FAQ

Why are my confirmed delivery numbers low or not showing?

There are several reasons why your confirmed delivery numbers may be low or not showing:
  1. You may have a lot of inactive/older subscriptions. See above Handling inactive devices for more details.
  2. You may have platform-specific limitations if using Huawei or Safari.
  3. There may be a setup issue. This is most common with iOS but can happen with other platforms. See Troubleshooting Confirmed Delivery for more details.

Why does it say confirmed but not shown on my device?

The confirmed delivery event means the device received the push notification. This event is generated by the OneSignal SDK in your app for that specific user’s subscription ID and push notification ID. It would be rare for the device to not show the push notification. Things to check:
  • The push is overlooked by mistake.
    • Especially common on iPhones with Focus modes enabled like “Do not disturb”, “Sleep”, or a custom setup. Push notifications received outside of this state are grouped differently than those received while in this state. All push notifications received while in a Focus mode are grouped together until the Focus mode is over. At which point, the push notifications will re-group with others for the app. If you swiped away all the grouped notifications while in Focus mode, you may miss them.
  • You may have custom code in your app suppressing notification display. Check for the following code in your app:
  • Check the push payload or data you are sending with the push notification.
    • Make sure you send with high priority
    • If using the collapse_id parameter, this will replace the older push with newer ones using the same collapse_id.
  • Are you sending to the correct device?

Troubleshooting Confirmed Delivery

General scenarios

  • Device offline: Push can be delivered up to 3 days later by default if the device is offline. Adjust this using the Time To Live parameter.
  • Unstable network: The notification may be received and/or clicked but the confirmation might fail to send due to network issues or app crash. This should be rare.

iOS troubleshooting

Common Cause: Misconfigured of both the Notification Service Extension (NSE) and App Groups. Must-haves:
  • NSE properly configured following our Mobile SDK Setup guide.
  • The same App Group name for both the main app and the NSE.
    • group.your-main-app-target-bundle-id.onesignal
    • group.your-bundle-id.OneSignalNotificationServiceExtension.onesignal
  • Message is sent with mutable-content set to 1. This happens automatically, but you may be setting it to 0 in your code.
If issues persist, see Troubleshooting the iOS Notification Service Extension guide for more debugging steps.

Android troubleshooting

  • If notifications are not displaying on Android, see our Notification Not Shown Guide.
  • If notifications display, but no Confirmed Delivery reported, you likely have a custom Android Notification Service Extension blocking the request. See our Android Service Extension setup guide to make sure you implemented it to work correctly with OneSignal Notifications.

Web troubleshooting

  • Due to limitations with the Safari browser, it cannot support Confirmed Delivery.
  • Ensure that you migrated to the v16 SDK correctly. See our User Model Web Migration Guide for more details.
    • Your init code loads the correct v16 SDK:
      <script src="https://cdn.onesignal.com/sdks/web/v16/OneSignalSDK.page.js" defer></script>
      
    • Your OneSignalSDKWorker.js Service Worker script references the correct v16 script:
      importScripts("https://cdn.onesignal.com/sdks/web/v16/OneSignalSDK.sw.js");
      

Need help?Chat with our Support team or email support@onesignal.comPlease include:
  • Details of the issue you’re experiencing and steps to reproduce if available
  • Your OneSignal App ID
  • The External ID or Subscription ID if applicable
  • The URL to the message you tested in the OneSignal Dashboard if applicable
  • Any relevant logs or error messages
We’re happy to help!