
When Should an App Ask for Camera, Location or Notification Permission?
Why phones guard camera, location and notifications, why you often get one clear chance, and how to ask so people say yes.
When should an app ask for permission?
Ask right after the person chooses a feature that needs it, not on first launch. Explain what the permission is for in plain words. On iOS especially, you usually get one clear chance: once someone taps "Don't Allow", they have to change it in Settings themselves.

Your phone guards the door
Apps cannot use these until the person says yes, and iOS and Android ask on their behalf:
- Camera and microphone
- Location
- Notifications (Android 13 and later asks too)
- Photos and contacts
When to ask
| Moment | Result |
|---|---|
| On first launch: "Allow notifications?" | People do not know why yet, and many refuse |
| Right after an action: they tap "Notify me when it ships" | The reason is obvious, and they usually agree |
Write the reason
iOS requires a short reason (a purpose string) for each permission. Make it specific:
- "To scan your receipts", not "This app needs the camera."
- "To show places near you", not "Allow location access."
Vague reasons are also a common App Store rejection.
Before you ask for anything
- Do you need it at all? Fewer asks, more trust.
- Is it the right moment? Right after the person asks for that feature.
- What if they say no? The app should still work, with less.
Request permission at the moment it makes sense
If someone taps Scan receipt, a camera request has context. If the same request appears immediately after installation, before the person understands the app, it is harder to judge. Explain the feature briefly and let the operating system present its permission prompt.
Do not draw a fake system permission dialog. Your own explanation can introduce the request, but the actual choice belongs to the platform.
Ask for the smallest access that works
A person choosing one profile photo may be able to use the system photo picker without granting broad access to their library. A map may need location while in use rather than continuous background tracking. A city search can sometimes work with manual entry instead of location permission.
Decide from the feature, not from a template's default permissions. Extra access increases privacy obligations and can introduce review questions without helping the person.
Refusing permission is an ordinary path
| Feature | Useful fallback |
|---|---|
| Nearby places | Enter a city or address |
| Receipt scanning | Type the amount manually |
| Profile image | Keep a default avatar or use the available picker |
| Reminders | Show the schedule inside the app |
The fallback should fit the task. Some features genuinely cannot function without access, but the rest of the app need not become unusable. Explain what is unavailable and how to change the setting later if the person chooses.
Match the explanation to the actual use
'To scan your receipt and extract its total' is more specific than 'to improve your experience.' If photos are sent to an AI provider, camera permission alone does not explain that transfer. The product's privacy information and any necessary disclosures must also cover what happens to the image.
Background location, contacts and sensitive information deserve particular care. Only request them when the app's core task supports that use and the platform allows it.
Test all the choices
Test allowing access, refusing it and changing the setting outside the app. Check what happens after returning from system settings and after reinstalling. Permission behavior differs between operating systems and versions.
Use an installed build for device-dependent behavior. A browser permission prompt and a native prompt are different environments. Success in one does not prove your release build has the right configuration or the correct explanation text.
Should I ask again immediately after a refusal?
Do not nag the person with repeated prompts. Platform behavior may prevent another system prompt anyway. Explain the unavailable feature when they choose it again and offer a route to settings where appropriate. Keep a usable fallback if the task allows one.
Does adding a permission in configuration request it?
Not by itself. Build-time declarations and runtime requests serve different roles. The installed app must contain the right configuration and ask at the appropriate moment. Test both instead of checking only a configuration file.
Is approximate location enough?
For a city forecast or nearby recommendations, it may be. Precise or background access should follow a real requirement. Test reduced access and explain any meaningful limitation without forcing broader access for unrelated features.
Do permission choices affect store information?
They can. The app's actual data access and sharing must match its declarations and privacy information. Merely removing a visible button does not guarantee an SDK stopped collecting information. Review the implementation as well as the interface.
A useful first-device exercise
Install a fresh build, deny optional permissions and complete the main task. Then enable one permission and try its feature. Return from system settings and reopen the app. This exposes assumptions that are easy to miss when your own development phone already granted everything weeks ago.
Remove unused access before release
Review the final build configuration after features are removed or changed. A permission left behind from an early experiment can create unnecessary questions for users and reviewers. Check which libraries still require it before removing it, then test the related feature again. The goal is a build that asks for the access its current behavior actually needs.
Build it with RNBlocks
Build the feature in RNBlocks and tell our agent when access is needed and what should happen if it is refused. Test the installed app's real permission choices. Start with the useful task, then add only the device access that task requires.
Ready to build?
Build, connect and publish iOS and Android apps with AI.