Skip to content
The Product Guys
All patterns
Onboarding4 min read

Permission Priming

Ask for the reason before the operating system asks for the permission.

The problem it solves

System permission dialogs are one shot and mostly irreversible. Fired with no context, they are denied, and the capability is gone until the user digs into settings.


Notifications, location, camera, microphone, contacts and photos all sit behind a dialog you do not control. You cannot restyle it, you cannot explain inside it, and on most platforms you get one chance. A denial does not just cost the permission. It costs the ability to ask again.

Priming inserts a screen you do control immediately before the one you do not. It states the benefit in the user's terms, and gives them a way to say not now that does not burn the real prompt.

The three part prime

Specific benefit
Name what the user gets, not what you get. Get a message when your delivery is five minutes away, rather than Enable notifications to stay updated.
Honest scope
Say what you will not do. We only send delivery alerts. No marketing. This is the part that earns the yes.
Safe refusal
Offer Not now as a real option that dismisses your screen without triggering the system dialog, so the door stays open.

Timing matters as much as wording. The strongest moment to prime is immediately after the user has done something that creates a need for the permission. They placed the order, so now the delivery alert makes sense. Priming at app launch, before any of that, is only marginally better than not priming.

Cold prompt

  • Fired on first launch, before anything happens.
  • Enable notifications to get the most out of the app.
  • Allow or Don't Allow, both feeding the system dialog.
  • No second chance after a denial.

Primed

  • Fired right after the first order is placed.
  • We will tell you when the driver is five minutes away.
  • Not now dismisses the prime without touching the system dialog.
  • Can be asked again at the next natural moment.

Worked example

Ferry, a transit app

Ferry asked for location on launch and a large share of users declined, which left the app showing a city wide list of stops forever. They moved the ask behind a screen that appears after the user taps Find stops near me. The prime says one line about showing the three closest stops and nothing else. The user has already declared the intent, so the dialog now confirms a decision rather than interrupting one.

A last detail worth building: if the user has already denied at the system level, do not show the prime again as though it works. Show a path to the settings screen instead, with the exact toggle named.

When it fits

  • Any one shot system permission on mobile, especially notifications, location and contacts.
  • Permissions where the benefit is real and can be described in one concrete sentence.
  • Moments right after a user action that creates the need, such as placing an order or joining a call.
  • Apps where a denial has a long tail cost, since re asking requires the user to visit system settings.

When it backfires

  • When the prime overstates the benefit, so the first notification feels like a bait and switch and the permission is revoked.
  • When Not now still triggers the system dialog, which destroys the only reason the prime exists.
  • When it is shown on first launch before the user has any stake, which trains people to refuse on reflex.
  • When the permission is not actually needed for the stated feature, which is a dark pattern: An interface built to get an outcome the user would reject if it were stated plainly. wearing a friendly screen.

Products using it

  • Duolingo

    The notification permission is introduced with a screen about practice reminders before the system dialog appears.

  • Uber

    Location access has been requested in the context of setting a pickup point rather than at first launch.

  • WhatsApp

    Contact access is explained in terms of finding people you already know before the system prompt is raised.

The psychology under it

The takeaway

Put a screen you control in front of every system dialog, and make sure declining your screen never spends the real prompt.

Finished the teardown? Bank it and the day counts toward your run.