Soft Push Requests: How to Never Waste Your One-Shot Permission Dialog
02 Mar 2025
On iOS, the system push notification permission dialog can only be shown once. There is no second chance. If a user taps "Don't Allow" on that native alert, your app loses the ability to reach them through push notifications — permanently, unless they manually navigate through Settings. And almost nobody does that. This article covers a proven technique called a soft push request that protects your one-shot permission dialog and can increase your push opt-in rate by 30-40%.
The Cost of a Wasted Permission Dialog
Let's be concrete about what happens when a user taps "Don't Allow." The only recovery path requires the user to:
- Leave your app and open device Settings.
- Scroll through a long list of apps to find yours.
- Tap into your app's settings page.
- Find the Notifications toggle and enable it.
Industry data suggests that fewer than 5% of users will ever complete that journey. The real problem is timing. Many apps fire the system dialog on first launch, before the user has any reason to trust the app.
A push permission denied on day one is a marketing channel lost for the lifetime of that install.
The Soft Push Pattern Explained
- Show a custom in-app popup
Display your own UI asking: 'Want to receive notifications about deals and updates?' with Yes and No buttons.
- User taps Yes
Now trigger the real system permission dialog. The user has already expressed intent, so they are far more likely to tap 'Allow.'
- User taps No
Do NOT trigger the system dialog. You have saved your one-shot permission for a later time when the user may be more engaged.
Teams that adopt this pattern typically see push permission opt-in rates increase by 30-40% compared to firing the system dialog cold.
When to Show the Soft Push
Session-based targeting
Show the soft push prompt starting from the user's third session. By session three, the user has returned to your app multiple times, which signals genuine interest.
Event-based targeting
Trigger the soft push after a meaningful in-app action:
- E-commerce: After the user adds their first item to favorites.
- Fitness: After the user completes their first workout.
- Content: After the user bookmarks or saves an article.
Setting Up with Amply
- Session count ≥ 3: Only show to users who have opened the app at least three times.
- push_permission_asked = false: Exclude users who have already seen the soft push.
- push_enabled = false: Exclude users who already granted push permission.
- Impression limit: Once per device lifetime.
Code Implementation
Initialize custom properties
// Set initial properties on first launch
AmplySDK.setCustomProperties(mapOf(
"push_permission_asked" to false,
"push_enabled" to false
))Handle the soft push deeplink
AmplySDK.setDeeplinkHandler { url ->
if (url.contains("soft-push-request")) {
showSoftPushDialog(
onAccept = {
// User said YES — now trigger the real system dialog
requestPushPermission()
AmplySDK.track("SoftPushResponse", mapOf("accepted" to true))
AmplySDK.setCustomProperties(mapOf(
"push_permission_asked" to true,
"push_enabled" to true
))
},
onDecline = {
// User said NO — preserve the system dialog for later
AmplySDK.track("SoftPushResponse", mapOf("accepted" to false))
AmplySDK.setCustomProperties(mapOf(
"push_permission_asked" to true
))
}
)
}
}The requestPushPermission() call is the platform's native API — on iOS, UNUserNotificationCenter.requestAuthorization(), and on Android 13+, the POST_NOTIFICATIONS runtime permission request.
Measuring Push Permission Rates
- Soft push impressions: How many users saw the custom popup.
- SoftPushResponse (accepted: true): How many tapped Yes.
- SoftPushResponse (accepted: false): How many tapped No — their system permission is still intact.
- Actual push permission granted: Of those who tapped Yes, how many also tapped Allow on the system dialog.
Conclusion
The system push notification permission dialog is one of the most consequential UI moments in your app. It is irreversible, uncontrollable, and unforgiving. The soft push pattern gives you control by placing a custom dialog in front of the system prompt.
Combined with Amply's session targeting, custom property filters, and impression limits, you can orchestrate the entire flow from the dashboard — no app updates required. Stop burning your one-shot permission dialog on cold users.