What are permissions?
Sensitive device capabilities — camera, location, photos, notifications — require the user's explicit consent. Permissions are how you request that consent, check the current status, and handle the cases where the user says no or revokes it later.
Why it matters
Permissions are a privacy gate and a common source of bad UX and store rejections. Asking at the wrong time, or crashing when denied, frustrates users and reviewers. Handling permissions gracefully — asking in context, degrading when refused — is the difference between an app that feels respectful and one that feels pushy or broken.
What to learn
- The permission lifecycle: undetermined, granted, denied, blocked
- Requesting in context, not all at once on launch
- Checking status before using a capability
- Explaining why before the system prompt
- Handling denial gracefully
- Deep-linking to settings when blocked
- Platform differences in permission flows
Common pitfall
Requesting every permission on first launch, before the user understands why. It feels invasive, denial rates spike, and a blocked permission is hard to recover. Ask only when the feature needs it, with a short in-app explanation first, so the user grants it in a context that makes sense.
Resources
Primary (free):
- Expo — Permissions · docs
- React Native — PermissionsAndroid · docs
- Apple — Requesting access to protected resources · docs
Practice
Add a feature that needs a permission — say the camera — and implement the full flow: show a brief explanation, request it in context, handle granted and denied, and offer a path to settings if blocked. Done when denying the permission degrades gracefully instead of crashing.
Outcomes
- Request permissions in context with an explanation.
- Check permission status before using a capability.
- Handle denied and blocked states gracefully.
- Deep-link to settings to recover a blocked permission.