On this page4 sections
ReferenceBeginner3-5 min reference

Mobile Permissions

Runtime permissions (camera, location, photos, notifications…) are a rich source of mobile bugs because apps forget the denied and revoked-later paths. This sheet lists the states, the platform differences, and the cases worth covering. It complements the broader Mobile Testing sheet linked below.

Permission states

StateMeansApp should
Not determinedNever askedShow rationale, then request
AllowedGrantedUse the feature
Allowed while usingGranted only in foreground (location)Degrade gracefully in background
Allowed onceGranted for this session (iOS)Re-request next launch
LimitedPartial access (iOS Photos)Work with the chosen subset
DeniedRefused onceShow fallback + path to Settings
Denied (don't ask again)Android: blockedDeep-link to system Settings
Revoked laterChanged in Settings after grantingDetect on resume, recover

iOS vs Android quick notes

  • iOS prompts once per permission; a second "no" can't be re-prompted in-app — you must send the user to Settings.
  • Android allows re-prompting until the user checks "don't ask again"; after that, only Settings works.
  • Android 12+ offers approximate vs precise location; iOS 14+ offers a limited Photos selection.
  • A permission granted then revoked in Settings can kill a backgrounded app's process — test the resume path.

What to test

  • First-run grant and deny for every permission the app requests.
  • The "denied forever / Settings" recovery path.
  • Background behaviour when "while using" is selected.
  • Revoke-in-Settings, then return to the app.
  • The feature degrades gracefully when permission is absent (no crash, clear messaging).

Common mistakes

  • Testing only "Allow" — the deny and revoke paths are where apps crash or hang.
  • Requesting a permission before the user understands why (no rationale screen).
  • Assuming a granted permission stays granted across sessions/OS updates.
  • Forgetting notifications are a runtime permission on modern iOS and Android 13+.

// Related resources