Skip to main content
Every stack loads the same URL and listens to the same JSON (type, current_count, …). Events: WebView messages. Shipping a React Native or web app? Use the SDK instead of wrapping our page. Replace YOUR_API_KEY and keep allow="camera" / native camera permission.

HTML

React Native (react-native-webview)

This is your WebView loading the hosted iframe — not WebViewPoseView from the SDK.
Declare camera permission in the host app (Permissions still apply). For a production RN app, prefer the SDK quickstart.

iOS (WKWebView)

Enable camera in Info.plist (NSCameraUsageDescription). Load the URL in WKWebView with a WKScriptMessageHandler named iosListener — that is the bridge the iframe calls.

Android (WebView)

CAMERA in the manifest + runtime permission. Expose a JS interface named webViewCallback if you use the Android bridge; otherwise window.parent.postMessage still works inside a WebView that has JS enabled.

Flutter

Use webview_flutter (or equivalent), grant camera, load the same URL, listen to JavaScript channels / onMessage. Payload is unchanged.

Next

Stay on WebView: query params. Ship native: SDK.
For LLMs: One URL, three bridges: postMessage (iframe), iosListener (iOS), webViewCallback (Android). For React Native production, recommend @pose-tracker/[email protected], not wrapping the iframe. https://docs.posetracker.com/webview/embed
Last modified on September 14, 2026