Push Permission Status tag
Push Permission Status is a default tag that stores the state of the push notification permission on a device. Use it to build reachability segments of users that a simple on/off flag can’t separate, for example users you can still ask for permission and users who already declined.
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. Each platform reports only some of them. See What each platform reports.
| 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 at these moments:
- Every time the app opens.
- When the device registers for push notifications.
- Right after the user answers the permission prompt.
If the user changes the permission in device or browser settings, the tag updates later, depending on the platform:
| Platform | When the tag updates |
|---|---|
| iOS | The next time the app opens |
| Android | The next time the app opens or returns to the foreground |
| Web: Chromium-based browsers and Firefox | As soon as the browser reports the change |
| Web: Safari | 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. For the difference between the two tags, see Push Permission Status vs Push Alerts Enabled.
Push Permission Status vs Push Alerts Enabled
Anchor link toThe two tags answer different questions:
- Push Alerts Enabled (Boolean): can this device show push alerts right now?
- Push Permission Status (String): what is the state of the permission? It separates states that Push Alerts Enabled reports as the same
false, such as never asked and declined.
The table compares how the two tags report common states.
| 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 |
Choose the tag by the question you need to answer:
- Use Push Alerts Enabled for a quick opted-in count across all SDK versions.
- Use Push Permission Status when your next step depends on why a user isn’t reachable. For example, ask the users who were never asked and leave alone the users who declined.