iOS PWA push notifications: what actually works
iOS web push (16.4+) exists. It works. It’s also the most friction-heavy part of the trigger.fyi setup, and there are real constraints worth understanding before you trust it.
The requirements
To receive web push on iOS, all of these must be true:
- iOS 16.4 or later — web push doesn’t exist before this version
- Added to Home Screen — the PWA must be installed as a home screen app. Safari won’t show the permission prompt until after installation
- Permission granted — the user must explicitly grant notification permission after installation
- Not in private browsing — push doesn’t work in private/incognito mode
If any of these aren’t met, notifications won’t arrive — and there’s no error visible to the sender.
The install flow
On iPhone:
- Open trigger.fyi in Safari (not Chrome, not Firefox — Safari only)
- Tap the Share button → Add to Home Screen
- Open the app from the home screen
- When prompted, tap Allow for notifications
The permission prompt only appears the first time you open from the home screen. If you tap “Don’t Allow,” you can re-enable it in Settings → trigger.fyi → Notifications.
The silent mode limitation
iOS web push cannot break silent mode.
fyi.critical() sends with Web Push urgency high. On Android, the OS honors this and delivers the notification even in Do Not Disturb mode. On iOS, urgency high is ignored — the notification arrives, but only if your device is not silenced.
This is a platform constraint, not a trigger.fyi limitation. It applies to all web push on iOS. The docs say so.
For truly critical delivery on iOS — the kind that needs to wake you up — a native app with APNs is required. That’s the only path that can break silent mode.
When notifications don’t arrive
The most common failure modes in order:
1. Not installed to home screen The most common issue. Web push only works from an installed PWA. If you’re testing by opening trigger.fyi in Safari, push won’t work. Open it from the home screen icon.
2. Permission not granted Check Settings → [your PWA name] → Notifications. If it says “Off,” tap to enable.
3. Focus mode / Do Not Disturb iOS may silently suppress notifications in Focus mode. Check your active Focus settings.
4. Low power mode Background activity is limited in low power mode. Notifications may be delayed.
5. iOS version below 16.4 Check Settings → General → About → iOS Version. Web push doesn’t exist before 16.4.
The troubleshooter
trigger.fyi ships a built-in troubleshooter that walks through these failure modes in order and identifies the first real blocker. If a test notification doesn’t arrive, tap the troubleshoot button in the app — it won’t guess, it’ll tell you which step failed.
Testing delivery
The most reliable way to test: send a notification and watch the lock screen.
From the CLI:
npx trigger.fyi
# Press 't' to send a test notificationFrom curl:
curl -X POST "https://trigger.fyi/$TRIGGER_FYI_SECRET_KEY" -d "Test"Watch the lock screen. If it doesn’t arrive within 5 seconds, run the troubleshooter.
Reliability in practice
Once set up correctly — installed to home screen, permission granted, not silenced — iOS web push delivery through trigger.fyi is reliable for normal and log-level notifications. The latency is typically under 2 seconds.
The honest caveat: web push on iOS is newer than on Android and Chrome OS. There have been edge cases (Safari updates, focus mode interactions, background refresh settings) that affect delivery. These are being addressed at the platform level over time.
For developers who need guaranteed delivery on iOS today, Pushover (using APNs) is the more battle-tested option. trigger.fyi will close that gap when native apps are available.
Related: The Web Push API · VAPID push notifications · Push notifications from Next.js