How to integrate LiveForm in a WebView for iOS, Android, and React Native mobile apps
This guide explains how to integrate LiveForm as a WebView in a customer mobile app.Audience: Mobile engineers integrating LiveForm into an existing iOS or Android app.
LiveForm is an HTTPS-based web application. The app’s WebView must fully support modern browser features, camera permissions, file selection, and cookie/storage.
Platform
Minimum
Recommended
Notes
iOS
iOS 15+
iOS 16+
iOS 15+ supports the WKUIDelegate media capture permission callback to restrict grants to the LiveForm host.
Android
Android 9, API 28+
Android 10, API 29+
Use the latest Android System WebView or Chrome for stable file selection and camera capture.
Android WebView
Updatable Android System WebView or Chrome
Latest Android System WebView or Chrome
File selection, camera capture, and cookie/storage behavior can be affected by WebView/Chrome version.
React Native
react-native-webview 13.x+
Latest stable
Native apps can implement the same functionality directly using WKWebView/Android WebView.
Device testing scope:
Verify the full flow on Android 9 (API 28)+: app install, WebView loading, file selection, camera capture, cookie/storage.
Verify the full flow on iOS 15+: WKWebView file selection, camera capture, cookie/storage.
Final approval requires completing a real LiveForm submission — camera capture, upload, submit, and returnUrl/deep link navigation.
LiveForm uses the camera and image upload features inside the WebView. When running LiveForm as a WebView in a mobile app, the customer app must obtain camera and file access permissions before the WebView opens — permissions that would normally be handled by the browser.
Requesting and verifying camera and photo library (or media) permissions at the app level before opening the WebView is required. If required permissions are not granted, LiveForm camera capture or image upload may not work — do not open the WebView in that state.
iOS
Android
Add the following usage descriptions to Info.plist:
<key>NSCameraUsageDescription</key><string>Camera access is required for LiveForm ID document capture.</string><key>NSPhotoLibraryUsageDescription</key><string>Photo library access is required for LiveForm image upload.</string>
Add the following permissions to AndroidManifest.xml:
The WebView must allow JavaScript, storage, cookies, media playback, and media capture.
React Native
Android Native
iOS Native
When using react-native-webview, the underlying WebChromeClient (Android) and WKUIDelegate (iOS) details are handled by the library’s native layer. Set the WebView props below, then verify the Android and iOS checklists separately on real devices.
Request the CAMERA permission at the app level and verify it is granted before opening the WebView.
On Android 13+, if image selection requires permissions, handle READ_MEDIA_IMAGES or similar according to your file chooser implementation.
In onPermissionRequest, only grant camera access for the LiveForm host. Do not grant camera permission to all origins.
Implement onShowFileChooser to ensure <input type="file"> based uploads work reliably.
In an iOS native app, use WKWebView with JavaScript and inline media playback enabled. On iOS 15+, use the WKUIDelegate media capture permission callback to restrict grants to the LiveForm host.
Verification approachThe customer app should implement its own WebView screen based on the sample code provided, then verify the real LiveForm URL and a permissions/feature test page separately.
LiveForm URL mode: Verify the actual submission flow on the LiveForm production host.
Permissions/feature test page: Verify WebView storage/cookie, fetch, file input, and camera capture input in a single sequential flow, independent of LiveForm state.
Passing the permissions/feature test confirms the WebView mechanism is working, but does not guarantee a successful LiveForm submission. Final approval requires passing both modes.
Common (URL & Permissions)
Android
iOS WKWebView
React Native
URL and Navigation
A LiveForm URL in the format https://form.argosidentity.com?pid={pid} opens successfully.
pid is URL-encoded before being passed.
External custom schemes open in an external app or fail gracefully.
Permissions
Camera permission is verified before entering the WebView on first launch.
Photo library/media permission is verified before entering the WebView on first launch.
A recoverable message is shown if permission is denied.
The “Open Settings” button navigates to the app settings screen.
WebView Behavior
LiveForm loads with JavaScript enabled.
The camera UI opens when capturing an ID document.
The picker opens for image upload.
Cookies and storage persist during normal WebView navigation.
A loading state is shown while the page loads.
A recoverable error message is shown on WebView load error or HTTP error.
android.permission.CAMERA is declared in AndroidManifest.xml.
Android runtime camera permission is requested and verified as granted before opening the WebView.
WebChromeClient.onPermissionRequest is implemented in native WebView code.
WebChromeClient.onShowFileChooser is implemented in native WebView code.
Android System WebView or Chrome is up to date.
javaScriptEnabled is active.
domStorageEnabled is active.
Cookies and third-party cookies are allowed.
Media playback and camera access are not blocked by user gesture policy or WebView settings.
ValueCallback is called exactly once for all file chooser paths: success, cancel, and failure.
File upload results passed as content:// URIs are handled correctly.
The app’s file chooser implementation does not expose file:// URIs directly.
The LiveForm file selection UI allows file types matching the accept attribute.
The LiveForm capture UI opens the camera path matching the capture attribute.
LiveForm resources are not blocked by HTTPS or mixed content policy.
returnUrl or deep link navigation is delivered correctly to the external app/browser/customer app.
NSCameraUsageDescription is declared in Info.plist.
NSPhotoLibraryUsageDescription is declared in Info.plist.
App-level camera permission request and status check work correctly before opening the WebView.
App-level photo library permission request and status check work correctly before opening the WebView.
WKUIDelegate is set on the native WKWebView.
On iOS 15+, the WKUIDelegate media capture permission handler is verified.
input type="file" works in WKWebView.
Files selected or captured are correctly passed back to the WebView.
The LiveForm file selection UI allows file types matching the accept attribute.
The LiveForm capture UI opens the camera path matching the capture attribute.
HEIC image uploads are handled correctly by the server or WebView flow.
JavaScript execution is enabled.
window.open or new window requests are handled without blocking, according to app policy.
WKWebView cookie and website data store policy does not block the LiveForm flow.
LiveForm resources are not blocked by HTTPS or mixed content policy.
returnUrl, universal link, and deep link navigation are handled correctly per app policy.
javaScriptEnabled is active in react-native-webview.
domStorageEnabled is active in react-native-webview.
sharedCookiesEnabled and thirdPartyCookiesEnabled are configured per app policy.
Media capture WebView props do not block camera access.
allowFileAccess and file selection work on both Android and iOS.
Expo/RN permission API returns accurate camera and photo library/media permission status.
The onShouldStartLoadWithRequest, onOpenWindow, and Linking.openURL combination handles returnUrl/deep links safely.
onError and onHttpError provide recoverable guidance and a diagnostic report.