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 toThe tag is a String tag that stores one of the values below for each device in each application.
| Value | What it means |
|---|---|
not_determined | The user hasn’t answered the permission prompt yet, so the app can still ask |
granted_explicit | The user allowed notifications in the permission prompt |
granted_default | Notifications are allowed, but not through an answer to the Pushwoosh SDK permission prompt. Android only |
provisional | Notifications are allowed provisionally. They go quietly to Notification Center, without alerts, sounds, or banners. iOS only |
ephemeral | Notifications are allowed for a limited time, as for an App Clip. iOS only |
denied | The user turned notifications off, either in the prompt or later in device or browser settings |
unsupported | The 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:
| Platform | Minimum SDK version |
|---|---|
| iOS | 7.2.10 |
| Android | 6.17.0 |
| Web | 3.95.0 |
When the tag updates
Anchor link toThe 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 toEach 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 status | Push Permission Status |
|---|---|
| Not determined | not_determined |
| Authorized | granted_explicit |
| Provisional | provisional |
| Ephemeral | ephemeral |
| Denied | denied |
Android
Anchor link toAndroid 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 reportsdenied.
Browsers allow notifications only after the user clicks to allow them, so a web device never reports granted_default.
| Browser permission | Push Permission Status |
|---|---|
Not asked yet (default) | not_determined |
Allowed (granted) | granted_explicit |
Blocked (denied) | denied |
| Browser doesn’t support web push | unsupported |
Build reachability segments
Anchor link toCombine 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.
| Segment | Filter | How to use it |
|---|---|---|
| Users who see push alerts | in granted_explicit, granted_default | Send time-critical push notifications |
| Quiet delivery only | in provisional, ephemeral | Expect lower visibility, and invite these users to allow full notifications |
| Users you can still ask | in not_determined | Show an in-app message before the push permission prompt |
| Users who declined | in denied | Reach them through email, SMS, or in-app messages, or run an opt-out recovery popup |
| Browsers without web push | in unsupported | Use 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 toPush 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 Enabled | Push Permission Status | |
|---|---|---|
| Type | Boolean | String |
| Never asked for permission | false | not_determined |
| Declined permission | false | denied |
| Provisional or temporary permission on iOS | Depends on the alert, sound, and badge settings | provisional or ephemeral |
| Explicit or default grant | true when the device shows alerts | granted_explicit or granted_default |
| Devices with older SDK versions | Reported on all SDK versions | Not 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.