Skip to content

Push Permission Status tag

Push Permission Status is a default tag that stores the state of the push notification permission on a device: whether the user was never asked, allowed notifications, allowed them quietly, or turned them down. Use it to build reachability segments that a simple on/off flag can’t separate, for example users who can still be asked for permission versus users who already declined.

The Pushwoosh SDK collects the tag automatically on iOS, Android, and Web. A value sent as a regular tag, for example with setTags, is ignored, and you can’t create a custom tag with this name.

Push Permission Status values

Anchor link to

The tag is a String tag that stores one of the values below for each device in each application.

Value
What it means
not_determinedThe user hasn’t answered the permission prompt yet, so the app can still ask
granted_explicitThe user allowed notifications in the permission prompt
granted_defaultNotifications are allowed, but not through an answer to the Pushwoosh SDK permission prompt. Android only
provisionalNotifications are allowed provisionally. They go quietly to Notification Center, without alerts, sounds, or banners. iOS only
ephemeralNotifications are allowed for a limited time, as for an App Clip. iOS only
deniedThe user turned notifications off, either in the prompt or later in device or browser settings
unsupportedThe browser can’t receive web push notifications. Web only

The tag has no value on tvOS and macOS, and on devices with an SDK version older than:

PlatformMinimum SDK version
iOS7.2.10
Android6.17.0
Web3.95.0

When the tag updates

Anchor link to

The SDK reports the current status every time the app opens and when the device registers for push notifications. It also reports a change right after the user answers the permission prompt. If the user changes the permission in device or browser settings, the tag updates the next time the app opens. The Android SDK also checks the permission each time the app returns to the foreground, and the Web SDK reports a change as soon as the browser does in Chromium-based browsers and Firefox. In Safari, the tag updates on the next page load.

When a request comes without a status, for example from an older SDK version, the tag keeps its last value.

What each platform reports

Anchor link to

Each platform reads the permission from its own system API, so the set of values differs by platform.

The iOS SDK maps the system authorization status of the app directly to the tag.

iOS authorization statusPush Permission Status
Not determinednot_determined
Authorizedgranted_explicit
Provisionalprovisional
Ephemeralephemeral
Denieddenied

Android 13 and later require the user to allow notifications in a permission prompt. Earlier versions allow them by default after installation, so the Android SDK separates an explicit answer from a default grant:

  • granted_explicit: the user allowed notifications in the permission prompt that the Pushwoosh SDK shows, on Android 13 or later, in an app that targets Android 13 (API level 33) or later.
  • granted_default: notifications are allowed in any other way. That includes Android 12 and earlier, apps that target an API level below 33, a permission that was already allowed when the SDK first checked it, and a permission allowed from your own prompt or from system settings.
  • not_determined: on Android 13 and later, notifications are off and the user hasn’t answered the prompt yet, including when they closed the prompt without choosing.
  • denied: notifications are off after the user declined the prompt, or after they were allowed before. On Android 12 and earlier, any device with notifications turned off reports denied.

Browsers allow notifications only after the user clicks to allow them, so a web device never reports granted_default.

Browser permissionPush Permission Status
Not asked yet (default)not_determined
Allowed (granted)granted_explicit
Blocked (denied)denied
Browser doesn’t support web pushunsupported

Build reachability segments

Anchor link to

Combine the values in one Push Permission Status filter with the in operator to target users by how you can reach them. Learn more about building segments by tags.

SegmentFilterHow to use it
Users who see push alertsin granted_explicit, granted_defaultSend time-critical push notifications
Quiet delivery onlyin provisional, ephemeralExpect lower visibility, and invite these users to allow full notifications
Users you can still askin not_determinedShow an in-app message before the push permission prompt
Users who declinedin deniedReach them through email, SMS, or in-app messages, or run an opt-out recovery popup
Browsers without web pushin unsupportedUse other channels for these web users

To find devices that don’t report the tag yet, use the not set operator. These devices run an older SDK version, so target them with Push Alerts Enabled instead.

Push Permission Status vs Push Alerts Enabled

Anchor link to

Push Alerts Enabled is a Boolean tag that answers one question: can this device show push alerts right now. Push Permission Status describes the permission itself, so it tells apart the states that Push Alerts Enabled reports as the same false.

Push Alerts EnabledPush Permission Status
TypeBooleanString
Never asked for permissionfalsenot_determined
Declined permissionfalsedenied
Provisional or temporary permission on iOSDepends on the alert, sound, and badge settingsprovisional or ephemeral
Explicit or default granttrue when the device shows alertsgranted_explicit or granted_default
Devices with older SDK versionsReported on all SDK versionsNot set

Use Push Alerts Enabled for a quick opted-in count across all SDK versions. Use Push Permission Status when the next step depends on why a user isn’t reachable, for example to ask the users who were never asked and leave alone the users who declined.