8th Wall — a WebAR platform built on WebGL and a custom SLAM engine running directly in the browser without ARKit/ARCore. This means AR experiences launch via a link or QR code, no app installation required. For businesses, this is often a decisive factor: conversion to "opened link" is significantly higher than "downloaded app". We have integrated the platform into dozens of mobile applications and know how to avoid the typical pitfalls.
Integration into an existing mobile app is done through WKWebView (iOS) or WebView/Custom Tabs (Android), where the AR scene renders inside a native container. Alternatively, as a standalone PWA with deep linking from the app. WebAR via 8th Wall allows launching AR scenes 3 times faster than native app development and requires lower initial investment.
Common Pitfalls and Solutions
Camera access inside WKWebView. On current iOS versions, Apple permits getUserMedia in WKWebView, but with caveats: mediaTypesRequiringUserActionForPlayback must be set, and allowsInlineMediaPlayback = true. Without these, the platform cannot access the camera and throws NotAllowedError. On Android, the situation is simpler — modern Chrome WebView supports getUserMedia without specific flags.
SLAM performance on budget devices. 8th Wall uses its own world tracking instead of ARCore, which is heavier on CPU. On devices with Snapdragon 665 and below, FPS in a scene with dynamic lighting and multiple 3D objects drops to 18–22. Solutions: reduce model poly count to 15k triangles, disable real-time shadows, use baked lightmaps in GLTF. Our practice shows that optimizing the scene with these rules gives a 1.5–2x FPS boost on low-end devices.
HTTPS requirement. The platform requires a secure context for the camera API. Local development via localhost works, but staging on HTTP does not. WKWebView in an app works with any URL if NSAllowsLocalNetworking is set, but production scenes need a valid SSL certificate.
Ensuring Stable Camera Operation in WKWebView
- Configure
WKWebViewConfigurationcorrectly:allowsInlineMediaPlayback = trueandmediaTypesRequiringUserActionForPlayback = []. - Implement
WKUIDelegatewith the methodwebView(_:requestMediaCapturePermissionFor:)and return.granted. - Verify that the scene URL is loaded over HTTPS (even in development, use a local server with SSL).
- For debugging, enable
NSAllowsLocalNetworkingin Info.plist.
Why SLAM Performance Matters
Comparison of WebAR (8th Wall) vs native AR (ARKit/ARCore) by key parameters:
| Criterion | WebAR (8th Wall) | Native AR (ARKit/ARCore) |
|---|---|---|
| Installation | Not required, launch via link | Requires app download |
| SLAM performance | CPU-dependent; lower FPS on weak devices | Uses hardware acceleration, stable 60 FPS |
| Development cost | Lower: one codebase for iOS/Android | Higher: separate development per platform |
| Device coverage | Any smartphone with WebGL and camera | Only iOS A9+ and Android ARCore-certified |
Our Integration Process
The WebAR project is created in the platform's cloud IDE — there you write JavaScript/TypeScript scenes based on A-Frame or Three.js plus the 8th Wall pipeline. For native integration:
iOS Setup (WKWebView)
let config = WKWebViewConfiguration()
config.allowsInlineMediaPlayback = true
config.mediaTypesRequiringUserActionForPlayback = []
let webView = WKWebView(frame: .zero, configuration: config)
webView.load(URLRequest(url: URL(string: "https://your-8thwall-scene.8thwall.app/scene/")!))
A WKUIDelegate intercepts webView(_:requestMediaCapturePermissionFor:) — otherwise the permission dialog won't appear.
Android: Custom Tab vs WebView
Custom Tabs launch a full Chrome with WebXR API and camera support — the preferred option. A native WebView requires a WebChromeClient with overridden onPermissionRequest. For seamless integration (without switching to browser), use WebView with a custom UA string if the platform doesn't detect it as restricted.
Passing Data Between Native Layer and WebAR Scene
Via WKScriptMessageHandler on iOS and addJavascriptInterface on Android. A typical case: pass userId or SKU to the scene so it loads the correct 3D model from CDN.
What's Included in Our Service
- Analysis of current stack and versions (iOS/Android) — 1 day
- Architecture design of WebView container with permissions and backend interface — 2 days
- Implementation of WebView wrapper with custom
WKUIDelegate/WebChromeClient— 3 days - Deep linking and PWA mode setup (if needed) — 1 day
- Integration and testing on devices from the list: iPhone 11+, Samsung Galaxy S10 and above, Google Pixel 4+ — 2 days
- Provision of build and configuration documentation — included
- Access to 8th Wall cloud IDE and project setup — included
- Training session for your development team (2 hours) — included
- Post-launch support for 2 weeks — included
- Support during App Store / Google Play moderation (camera and media requirements) — included
Licensing and Limitations
8th Wall operates on a subscription model: Starter, Pro, Enterprise. The license is tied to a domain. For a white-label product or multiple client domains — Enterprise only. Keep this in mind during evaluation. 8th Wall Official Documentation
Example Info.plist configuration for iOS
<key>NSCameraUsageDescription</key>
<string>Camera access is required for WebAR</string>
<key>NSAllowsLocalNetworking</key>
<true/>
Timelines and Cost
| Stage | Timeline | Typical Cost |
|---|---|---|
| WebView container integration | 3–5 days | $500–$1,500 |
| Simple AR scene (1–2 objects, basic interaction) | 5–10 days | $1,000–$3,000 |
| Complex scenario (animations, backend interaction) | from 15 days | $4,000–$8,000 |
Cost is calculated individually after analyzing scene requirements and target devices. We'll assess your project for free — get in touch, let's discuss the details.
Why Choose Us?
With 5+ years of experience in mobile development and over 40 successful AR/VR integrations across iOS and Android, our certified engineers (Apple and Google) deliver robust solutions. We use modern approaches: SwiftUI, Jetpack Compose, Kotlin Multiplatform. Get a consultation — we'll help you choose the optimal solution.







