Skip to content

Goodspeed is in closed beta. Enter your email and we check your invite on the spot: invited accounts start free today, and everyone else joins the waitlist in one click. Get started

Skip to content
Goodspeed

Notification Permission Timing: Ask Smarter, Get More Opt-Ins

When and how you ask for notification permission shapes your opt-in rate more than almost anything else in your app.

Most apps ask for notification permission at the worst possible time. The user just installed, they have no idea what the app does yet, and a system dialog appears asking them to hand over a communication channel they barely understand. They tap No. That decision is permanent on iOS until they go digging through Settings, which most people never do.

This is not a minor UX annoyance. It is a growth bottleneck. The notification permission prompt is one of the most consequential decisions in your entire product, and treating it as a formality costs you compounding reach for the life of that install.

Here is how to think about it differently.

Why the Default Timing Fails

The standard implementation fires the permission request in AppDelegate or inside the first useEffect of the root component. It is the path of least resistance for a developer, and it produces the worst outcome for the business.

On iOS, you get one shot. Decline the native dialog, and your app cannot ask again. The user would need to navigate to Settings > Your App > Notifications and flip the toggle manually. That friction is high enough that almost nobody does it unless they are already deeply invested in the product.

Android gave apps more flexibility historically, but Android 13 and later brought a similar runtime permission requirement. The pattern now applies across both platforms.

The math here is simple. Ask too early, get a low opt-in rate, and every downstream metric tied to push (retention, re-engagement, revenue) suffers permanently for that cohort. The cost of a poorly timed prompt is not just one bad session; it compounds across the lifetime of that install.

The Concept of a Pre-Permission Screen

The pre-permission screen is not a new idea, but it remains underused. The principle is straightforward: before you trigger the OS-level dialog, show your own screen that explains what users will get and why it is worth saying yes.

This screen is fully under your control. It can be dismissed without consequence. If the user taps No on your screen, you have not burned your OS-level ask. You can try again at a better moment. If they tap Yes, you fire the system prompt immediately while intent is high, and they are primed to accept.

A good pre-permission screen does three things:

  1. Names a specific benefit. Not "Allow notifications" but "Get notified when your order ships" or "Be the first to know when a new session opens." Concrete beats abstract every time.
  2. Shows what the notifications will actually look like. A mock notification graphic removes ambiguity. Users know what they are signing up for.
  3. Gives an honest out. Something like "You can change this anytime in Settings" reduces the perceived permanence of the decision and paradoxically increases acceptance.

Where Developers Often Get This Wrong

The pre-permission screen still fails when it fires too early. Wrapping the OS dialog in a custom screen but placing that screen on the second tab of onboarding does not solve the underlying problem. The user still has no earned trust with the product.

The screen needs context. Without it, you are just adding a step before the same bad timing.

When to Actually Ask

The right moment to ask is when the user has just experienced something valuable enough that they want more of it.

Some examples that work across common app categories:

E-commerce apps. After the first item is added to a cart or a wishlist. The user has signalled intent. "Want to know when this item goes on sale?" is a credible, low-pressure reason to opt in.

Fitness or habit apps. After the first completed session or logged entry. The user has invested effort. A reminder prompt at this moment feels supportive, not intrusive.

Content or media apps. After a user finishes a piece of content and taps a follow or save action. They have just told you they like something. Following that with "We can tell you when there's more" is a natural extension of what they just did.

Social or community apps. After the user sends their first message or gets their first reply. They are now in a conversation. Notifications are genuinely useful to them in a way they were not five minutes ago.

The common thread: the user has taken an action that creates a logical reason for a notification to exist. You are not asking them to imagine a future benefit; you are naming a benefit they already want.

The Cold Start Problem

Some apps cannot manufacture an early value moment. A utility that requires configuration before it does anything useful, for instance, may not have a natural "wow" moment inside the first session.

In that case, skip the ask on day one entirely. Let the user return on their own. Second or third session opt-in rates are consistently higher than first-session rates for apps where the value takes time to establish. The user has already proven they will come back. That is the right time to ask.

Delaying does not mean forgetting. You can set a flag in local storage after a user completes a meaningful action, and trigger the ask the next time they open the app. The logic is easy to build. The discipline to wait is the harder part.

Framing the Message

The words on your pre-permission screen matter more than the design. A few patterns that hold up:

Lead with the user's outcome, not your feature. "Never miss a drop" works better than "Enable push notifications to stay updated." The first is about them; the second is about your system.

Use the word "you" early. People are more likely to act when they feel directly addressed. "You'll get notified the moment your request is approved" is more persuasive than "Users receive notifications upon approval."

Be specific about frequency if you can. Anxiety about notification volume is a real reason people decline. If you send one notification per week, say so. If you only notify on user-triggered events, say that. Specificity reduces the fear of inbox flooding.

Avoid negative framing. "Don't miss out" carries anxiety. "Be the first to know" carries anticipation. Same information, different emotional valence, different opt-in rate.

Testing Your Prompt

You can A/B test the pre-permission screen copy and timing without any backend infrastructure if you have analytics firing on the permission outcome. Measure the rate at which users who see your pre-permission screen go on to accept the OS-level dialog. That single number tells you how well your framing is working.

Small copy changes can produce meaningful differences here. If you are building with Expo and React Native, you can ship these variants through over-the-air updates without a new store submission, which makes iteration fast.

Handling the No

Even with good timing and framing, some users will decline. That is fine. Do not punish them for it.

The worst pattern is the nag: showing the pre-permission screen repeatedly on every session after a user has already said no to your custom screen. It erodes trust faster than anything else.

A better approach: if a user declines your pre-permission screen, let it go for a meaningful stretch of time. Then, if a moment arises where a notification would clearly benefit them, surface a single, contextual prompt that links directly to the Settings page. Something like "Turn on notifications to track this order" with a deep link to the system settings. One ask, in context, tied to something they care about. That is the ceiling of what is appropriate.

Never surface the OS-level dialog a second time on iOS. You cannot; the OS blocks it. But you can deep link to Settings. Use that path sparingly.

What This Looks Like in Practice

If you are building in React Native with Expo, the expo-notifications library gives you the primitives: requestPermissionsAsync triggers the OS dialog, and you can call it whenever you choose. The hard part is the product logic, not the implementation.

The implementation pattern looks like this. Track whether the user has encountered your pre-permission screen in persistent storage. Track whether they have accepted or declined. Build a simple decision tree: has the user hit a value moment, have they seen the pre-permission screen before, and have they already granted permission? Show the screen only when all three conditions align in your favor.

That logic is maybe fifty lines of code. The work is in defining what counts as a value moment for your specific app. That definition is the real product decision.

The Bigger Point

Notification permission is not a technical task you hand off to a developer with instructions to "add push." It is a product decision with a measurable outcome that affects retention and revenue for the life of every install.

Treat the prompt as a feature. Give it a design, test the copy, pick the moment deliberately. The apps that do this consistently outperform the ones that ship the default behavior and wonder why their push engagement is low.

The next step is auditing where your current app fires the ask and whether that moment has earned the right to ask. If it has not, moving it to a better moment is one of the highest-leverage changes you can make without touching your core product.

Subscribe to The Signal

The top 5 scored app ideas, delivered fresh.

Ready to build? Score your ideas free.