Ask for push notification permission only after the user has a clear reason to care—usually right after they complete a job that notifications will protect, such as placing an order, booking an appointment, or enabling a reminder. Prompting on first launch is usually the wrong default, and Apple’s App Review Guidelines say you may not require push notifications to access the app or its paid features. This article gives you a timing ladder, a readiness scorecard, and platform-specific rules so you can approve the permission moment before engineering builds it.
Key takeaways
-
Apple’s documentation recommends requesting notification authorization in context—for example, after someone schedules a first task—rather than automatically on first launch.
-
On Android 13 and higher, newly installed apps have notifications off by default. If you target Android 13+, you control when the POST_NOTIFICATIONS dialog appears; Google recommends waiting until users understand the benefit.
-
Apple’s App Review Guidelines state that apps may not require users to enable push notifications (or other system functionalities) to access functionality, content, or compensation.
-
Use the Notification Permission Timing Ladder and Opt-In Readiness Scorecard below before you ship an onboarding flow that fires the system prompt.
Why permission timing is a product decision
Push permission looks like a small engineering checkbox. In practice it is a permanent product decision. On both major platforms, a denial is sticky: iOS does not re-show the system authorization dialog after the first answer, and Android’s documentation warns that a “Don’t allow” choice for apps targeting 12L or lower may not prompt again until uninstall/reinstall or a target-SDK update.
That means the first prompt is often your only clean chance. Teams that treat it as “ask everyone at launch so we maximize opt-in” frequently get the opposite result: early denials from users who have not yet experienced value, plus a support burden when the core app later depends on alerts that never arrive.
The decision also overlaps with other early product choices—such as whether accounts are required on day one—because stacking login walls, permission dialogs, and marketing prompts in the first session creates friction before the product has earned trust. For the account side of that sequencing problem, see whether your business app should require accounts from day one.
What Apple and Google actually require
Start with the platform rules, not with industry folklore about “best conversion rates.”
Apple: ask in context, or use provisional carefully
Apple’s User Notifications documentation requires permission before alerts, sounds, or badges. For an explicit request, Apple says to make it in a context that helps people understand why authorization is needed. Their example is a task-tracking app that asks after the person schedules a first task, which they describe as a better experience than automatically requesting authorization on first launch.
Apple also documents provisional authorization: requesting the provisional option can grant quiet, non-interrupting trial notifications that appear in Notification Center history with Keep / Turn Off controls. In that mode, Apple notes you can request authorization when the app first launches because the person is asked to keep or turn off notifications when they actually receive one. Provisional delivery is not a license to spam; it is a trial path for quiet utility alerts.
Separately, Apple’s Human Interface Guidelines on managing notifications say not to send marketing or promotional notifications unless people explicitly agree, and that apps should provide in-app settings so people can change that choice. Treat operational alerts and promotional messages as different consent products.
Finally, App Review Guideline language is unambiguous on gating: apps may not require users to enable system functionalities such as push notifications to access functionality, content, use the app, or receive compensation.
Android 13+: you control timing only if you target 13+
Google’s notification runtime permission documentation explains that Android 13 (API 33) and higher use the POST_NOTIFICATIONS runtime permission for non-exempt notifications. For newly installed apps on Android 13+, notifications are off by default until the user grants permission.
Timing control depends on target SDK:
-
If the app targets Android 13 or higher, the app controls when the permission dialog is displayed. Google specifically recommends using that control to explain why the permission matters.
-
If the app still targets 12L or lower, the system may show the dialog earlier—often around first activity start after a notification channel is created—which is frequently on startup.
Google’s best-practice examples for when to show the prompt include user actions such as tapping an alert-bell control, following an account, or submitting a food-delivery order. The common pattern is the same as Apple’s: wait until the benefit is concrete.
The Notification Permission Timing Ladder
Use this ladder to choose the earliest justified moment—not the earliest possible moment. Climb only as far as the product’s real notification purpose requires.
|
Level |
When you ask |
Best fit |
Primary risk |
|
L0 — Deferred |
No system prompt until a concrete feature needs it; in-app messaging covers early sessions. |
Browse-first apps, catalogs, calculators, and tools where alerts are optional. |
Lower early reach if users never hit the trigger event. |
|
L1 — Value-triggered |
Ask immediately after a job that notifications protect (order placed, booking confirmed, reminder created). |
Most customer-facing business apps. Default recommendation. |
Requires a clear “job completed” moment in the UX. |
|
L2 — Prefaced contextual ask |
Show a custom explanation screen, then fire the system dialog only if the user continues. |
Apps with mixed alert types or users who may confuse ops alerts with marketing. |
Extra step; copy must stay specific and honest. |
|
L3 — Provisional trial (iOS) |
Request provisional authorization and send quiet, high-quality trial notifications before an interrupting ask. |
iOS apps whose early alerts are useful but not urgent (status updates, digestible reminders). |
No banners/sounds by default; weak fit for time-critical alerts unless upgraded later. |
|
L4 — Early explicit ask |
Ask near first session because the core job is alert-dependent and the need is obvious before deeper use. |
Rare for general business apps; more plausible for security alerts or live-ops tools where missing a notice is the product failure. |
Highest denial risk if the need is not immediately obvious; still cannot gate the app on Allow. |
For most SME and ecommerce apps, L1 or L2 is the practical answer. L4 should be an exception you can defend in a product review, not a default borrowed from consumer social apps.
Opt-In Readiness Scorecard
Score your planned permission moment before development. Each item is 0 (no), 1 (partial), or 2 (yes). Total ranges from 0 to 14.
|
Criterion |
What “2” looks like |
|
Concrete benefit statement |
The prompt moment names a specific outcome (“order ready,” “technician en route”), not “stay updated.” |
|
User-initiated context |
Ask follows a user action that makes alerts relevant. |
|
Core app works if denied |
Denial does not block browsing, booking, purchasing, or content; fallback channels exist. |
|
Ops vs marketing separation |
Promotional notifications require a separate explicit opt-in and in-app controls. |
|
Denial recovery path |
Settings deep-link / education screen exists; no dark-pattern nag loops. |
|
Android target SDK posture |
App targets Android 13+ so you control dialog timing instead of inheriting startup prompts. |
|
First-notification quality plan |
The first real notification after Allow is useful within a short window, not a promotional blast. |
-
0–5: Do not ship the system prompt yet. Fix context, fallbacks, or Android targeting first.
-
6–9: Ship only a deferred or value-triggered ask (L0–L1). Avoid launch-time prompts.
-
10–14: Ready for L1–L2, or carefully justified L3/L4 with monitoring on deny rates and support tickets.
Worked example: a local service booking app
Consider a hypothetical home-services business building a customer app for booking and job updates. The team’s first wireframe asks for notifications on splash screen so “users never miss technician arrival updates.”
Scorecard before redesign:
-
Concrete benefit: 1 (claimed, but asked before any booking exists)
-
User-initiated context: 0
-
Works if denied: 1 (app works, but no email/SMS fallback specified)
-
Ops vs marketing separation: 0 (same prompt copy mentions “offers”)
-
Denial recovery: 0
-
Android 13+ targeting: 2
-
First-notification quality: 1
Total: 5. Not ready.
Revised flow:
-
User completes a booking confirmation screen.
-
Custom screen explains: “Turn on alerts for arrival windows and schedule changes. Promotional messages stay off unless you opt in later.”
-
Only then fire the system permission dialog.
-
If denied, keep the booking and fall back to SMS/email for critical updates; offer a settings path later.
Re-scored total lands around 12, which supports an L2 prefaced contextual ask. The app still functions without Allow, which keeps the design aligned with Apple’s gating rule.
Common failure patterns
-
Launch-stack friction: account creation, tracking prompts, and push permission in the first 30 seconds. Users deny to escape the stack.
-
Marketing disguised as utility: copy promises “important updates,” then the first sends are promos. Trust erodes quickly, and Apple’s guidance expects explicit marketing permission.
-
Hard gate on Allow: blocking the home screen until notifications are enabled conflicts with App Review expectations and creates support escalations.
-
Old Android targeting: staying on target SDK 32 or lower can force earlier system dialogs and reduce your ability to ask in context.
-
No recovery path: after Deny, the product never explains how to enable alerts in system settings when the user later wants them.
Limitations and exceptions
Contextual waiting is not absolute. A security monitoring app, a field-ops tool where missed alerts create safety risk, or an on-call staff app may justify an earlier explicit ask (L4) once the need is obvious. Even then, the app should remain usable if the user declines, and critical events should have a secondary channel.
Provisional authorization on iOS helps for quiet trial utility, but it is a poor substitute when the first alert must interrupt immediately. Likewise, Android exemptions for some media-session or call-style notifications do not mean a typical business app can skip the permission model.
This article does not replace legal counsel for consent, CASL/CAN-SPAM, GDPR, or industry-specific notice obligations. Platform permission is necessary for delivery mechanics; it is not automatically sufficient for every marketing use case in every jurisdiction.
What to do next
-
List every notification your V1 actually needs and label each as operational or promotional.
-
Pick the earliest justified ladder level (usually L1 or L2) and write the exact trigger event.
-
Score the moment with the Opt-In Readiness Scorecard; delay the prompt if you are below 6.
-
Confirm Android targets 13+ so you control dialog timing, and confirm the app is fully usable after Deny.
-
Design the first post-Allow notification as a useful confirmation of the same job the user just completed.
If you are still deciding which capabilities belong in the first release at all, pair this permission plan with a tighter V1 scope using what features belong in version 1 of a business app.
When the permission strategy has to live inside a broader build plan—native or cross-platform delivery, store submission, analytics, and post-launch iteration—Oasbit’s mobile app development services can help you sequence those decisions so onboarding earns trust instead of burning it.
If you want a practical review of your app’s permission moments before engineering locks the flow, book a growth strategy session.




