Интеграция 8th Wall для WebAR в мобильном приложении
8th Wall — платформа для WebAR на базе WebGL и кастомного SLAM-движка, работающего прямо в браузере без ARKit/ARCore. Это означает, что AR-опыт запускается по ссылке или QR-коду, без установки приложения. Для бизнеса это часто решающий аргумент: конверсия в «открыл ссылку» в разы выше, чем «скачал приложение».
Интеграция в существующее мобильное приложение строится через WKWebView (iOS) или WebView/Custom Tabs (Android), где 8th Wall-сцена рендерится внутри нативного контейнера. Либо как standalone PWA с диплинкингом из приложения.
Где обычно ломается
Камерный доступ внутри WKWebView. С iOS 14.3 Apple разрешила getUserMedia в WKWebView, но с оговорками: mediaTypesRequiringUserActionForPlayback должен быть настроен, а allowsInlineMediaPlayback = true. Без этого 8th Wall не получит доступ к камере и выбросит NotAllowedError. На Android ситуация проще — Chrome WebView поддерживает getUserMedia без специфических флагов начиная с Chrome 89.
Производительность SLAM на бюджетных устройствах. 8th Wall использует собственный world tracking вместо ARCore, что тяжелее по CPU. На устройствах с Snapdragon 665 и ниже FPS в сцене с динамическим освещением и несколькими 3D-объектами падает до 18-22. Решается: снижение poly count модели до 15k треугольников, отключение real-time shadows, использование baked lightmaps в GLTF.
HTTPS-требование. 8th Wall требует secure context для camera API. Локальная разработка через localhost проходит, но staging на HTTP — нет. WKWebView в приложении работает с любым URL при NSAllowsLocalNetworking, но для production-сцен нужен валидный SSL.
Как строим интеграцию
Проект 8th Wall создаётся в cloud IDE платформы — там же JavaScript/TypeScript сцены на базе A-Frame или Three.js + 8th Wall pipeline. Для нативной интеграции:
iOS (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/")!))
WKUIDelegate нужен для перехвата webView(_:requestMediaCapturePermissionFor:) — иначе пермишен-диалог не появится.
Android (Custom Tab vs WebView): Custom Tabs запускают полноценный Chrome с поддержкой WebXR API и camera — предпочтительный вариант. Нативный WebView требует WebChromeClient с переопределённым onPermissionRequest. Для seamless-интеграции (без перехода в браузер) — WebView с кастомным UA-string, если платформа 8th Wall не определяет его как restricted.
Передача данных между нативным слоем и 8th Wall сценой — через WKScriptMessageHandler / addJavascriptInterface. Типовой кейс: передать userId или SKU продукта в сцену, чтобы та загрузила правильную 3D-модель из CDN.
Лицензирование и ограничения
8th Wall работает по подписке: Starter ($99/мес), Pro ($250/мес), Enterprise (custom). Лицензия привязана к домену. Для white-label продукта или нескольких клиентских доменов — только Enterprise. Учитывайте это на этапе оценки.
Сроки
Интеграция WebView-контейнера в существующее приложение — 3-5 дней. Разработка самой AR-сцены на 8th Wall (1-2 объекта, базовое взаимодействие) — ещё 5-10 дней. Стоимость рассчитывается индивидуально после анализа требований к сцене и целевым устройствам.







