Browse the documentation

App permissions: what your app asks for and why

2026-11-04· 4 min read· View as Markdown

An app that asks for too much looks suspicious, to people and to store reviewers. So your app declares only what the plugins you turned on need. With no plugin turned on, it shows no permission prompt at all.

Android permissions

Turned onPermission addedPrompt shown?
AlwaysINTERNETNo
LocationACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATIONYes, the first time your site asks
Biometric unlockUSE_BIOMETRICNo, the system window appears at use
Haptic feedbackVIBRATENo
In-app subscriptionscom.android.vending.BILLINGNo
Local notificationsPOST_NOTIFICATIONS, RECEIVE_BOOT_COMPLETEDYes on Android 13 and later, when your site calls requestPermission()
QR code scannerNone: the reader belongs to Google Play servicesNo
Document scannerNone: the scanner belongs to Google Play servicesNo
ContactsNone: people choose in the system's own contact pickerNo
CalendarNone: the phone's calendar editor opens, people save the eventNo

iOS usage messages

On iOS, every sensitive feature has a message that explains why the app needs it. People see it in the system prompt, and App Review reads it.

Turned onDeclaredWhen people see it
Biometric unlockNSFaceIDUsageDescriptionThe first time Face ID is used
LocationNSLocationWhenInUseUsageDescriptionThe first time your site asks
QR code scannerNSCameraUsageDescriptionThe first time your site calls scan() or requestPermission()
Document scannerNSCameraUsageDescription (one message shared with the QR code scanner)The first time your site calls scan()
CalendarNSCalendarsUsageDescriptionOn iOS 15 and 16 only, the first time your site calls addEvent()

Local notifications don't need a message: iOS shows its own prompt when your site calls requestPermission(). Contacts don't need one either: the contact picker runs outside your app and only returns what people choose.

Ask at the right moment

The system prompt appears when your site makes the call, and a refusal is hard to undo: people have to go to the phone's settings. So don't call it on the first page. Show why you need it first, then call it from a button.

// from a button such as "Find stores near me"
navigator.geolocation.getCurrentPosition(
  (position) => showStores(position.coords),
  (error) => showManualSearch(error), // refused or unavailable
);

Declare what you collect

The stores ask you to describe the data your app handles, on Google Play in the Data safety form, on the App Store under App Privacy. Your site's own data collection counts, as does the Location plugin. Answer for your whole app, not only for what SaasToStore adds. After a build, your personal to-do list reminds you of what applies to your app.

Camera and microphone

A file input lets people take a photo or pick a file through the system's own picker, with no permission on your side. The QR code scanner and document scanner plugins use the camera only to read a code or capture a page: on Android through Google Play services, with no camera permission; on iOS with the camera message listed above. Live camera or microphone access from a page, such as a video call, isn't part of the plugin library today.

Frequently asked questions

Why does my app ask for location?+

Your project has the Location plugin turned on, or a page of your site calls the geolocation API. Turn the plugin off if you don't need it, then launch a new build.

Can I change a permission without a new build?+

No. Permissions are written into the app when it's built. Turning a plugin on or off takes effect with the next build.

A person refused the permission. What now?+

Your site receives an error. Offer another way, such as a manual search, and tell them they can allow it in the phone's settings.

Do I need a privacy policy?+

Yes. Google Play and the App Store both require a link to one. SaasToStore can generate a first draft in the Configuration tab, which you should review.

See it with your own site

Paste your URL and get a free Android test build on your phone in about 3 minutes.

Publish now

Keep reading