docs / runtime behaviour

Device features and permissions

What a web page can reach on the phone once it is an app: which APIs need an Android permission, which work without one, and which Chrome features simply are not in the WebView.

6 min read·5 sections·updated Sep 2026
TL;DR

Camera, microphone and location are switched on in the builder's Permissions step (Pro), and the app asks for them at launch. Storage, clipboard writes and motion sensors need nothing. Notifications, Web Share, Bluetooth/USB/NFC and speech recognition are not available in a WebView — feature-detect them.

Two layers of permission

A website asks the browser for the camera; the browser asks the user. An app adds a layer underneath: the APK must declare the Android permission, and Android must grant it to the app, before the WebView can pass a page's request through. The builder's Permissions step (Pro) takes care of the Android side for three capabilities — Location, Camera/files and Microphone — and the app asks the user for the ones you switched on when it starts.

Switch on only what the page uses. Every permission is a line on Google Play's Data safety form and a prompt that makes some users uninstall.

Android Permission ScannerScan your site's code for camera, microphone, location and other device APIs — and what each needs in the APK Open tool

Capability table

Web APIIn the appNotes
getUserMedia videoPermissions → CameraHandle NotAllowedError; test on a device
getUserMedia audio, MediaRecorderPermissions → MicrophoneSame
navigator.geolocationPermissions → LocationDeclare on Data safety if positions leave the device
<input type="file">Pro builds: system picker, no permissionFree builds do not open a picker
localStorage, IndexedDB, Cache API✓ no permissionPrivate to the app; kept across updates
clipboard.writeText✓ from a tap handlerReading the clipboard is unreliable
Device orientation / motion✓ no permission—
navigator.vibrateIgnoredThe app does not declare VIBRATE
Notification API, Web Push✗Use native push (Pro, via OneSignal)
navigator.share✗ undefinedCopy link, or a https://wa.me/?text= link
Web Bluetooth, WebUSB, Web Serial, Web NFC✗Need a native app
Speech recognition✗Record audio, send it to a speech-to-text API
File System Access (showOpenFilePicker)✗Use a file input

Write code that degrades

A missing API should hide a button, not break the page:

const shareBtn = document.querySelector('#share')
if ('share' in navigator) {
  shareBtn.onclick = () => navigator.share({ title: document.title, url: location.href })
} else {
  shareBtn.textContent = 'Copy link'
  shareBtn.onclick = () => navigator.clipboard.writeText('https://example.com/item/42')
}

Note the hard-coded public URL in the fallback: inside the app, location.href is an appassets.androidplatform.net address that means nothing to anyone you send it to.

Handling a "no"

Users can refuse the prompt at launch, or revoke a permission later in Settings. Every call that needs one must handle failure — getUserMedia rejects, getCurrentPosition calls its error callback — and say, in the page, what the feature is for and how to turn it back on (Settings → Apps → your app → Permissions).

Screen and system UI

  • Viewport. Include <meta name="viewport" content="width=device-width, initial-scale=1">. Without it the WebView lays the page out at desktop width and zooms out. Pinch-zoom is available unless your viewport tag disables it.
  • Status bar colour comes from the theme colour you set in the builder, not from <meta name="theme-color">.
  • Keyboard resizes the visible area; fixed-position footers ride above it. Test forms near the bottom of the screen.

FAQ

When does the app ask for the permissions I switched on?

When it starts. Android shows its own prompt for each permission group; if the user declines, the page's later request for that capability fails and your error handling takes over.

Why doesn't my web app's notification permission prompt appear?

The Notification API is not implemented in Android WebView. Native push notifications from the builder (Pro) replace it and work even when the app is closed.

Can the page read files from the phone without a picker?

No. Pages can only read files the user picks through a file input (Pro builds). There is no general access to the phone's storage, which is also why no storage permission is needed.

Tools for this step

Unzip it on a phone today

Upload the ZIP, name the app, pick an icon — and download a signed APK a few minutes later. Free builds, no watermark, no Android Studio.

Convert a ZIP — free site.zip → app-release.apk