Skip to main content

Installation

For Live Shopping Picture-in-Picture (PiP), also install react-native-video (>= 6.0.0) and run pod install in your ios/ folder.

SDK

Event callbacks use discriminated unions via OnEventType<T>:

Shared props

Available on Inline, Floating, VideoFeed, and LiveShoppingChannel:

Videowise Live Shopping Channel

A full-screen live shopping channel component that embeds the Videowise live streaming experience. It renders a WebView with the live shopping channel and dispatches typed live-shopping events for user interactions like adding products to cart.
Note: The LiveShoppingChannel component does not need to be wrapped inside <VideowiseSDK.Provider>. It operates independently.

Props

videowiseInfo object

onEvent callback

Triggered for all live shopping interaction events. The event object has the following structure: detail object (LSTrackingEventData) item object (when present) Possible interaction types (interactionType)
  • mute_player — Player muted
  • unmute_player — Player unmuted
  • pause_player — Player paused
  • resume_player — Player resumed
  • like_reaction — Like reaction
  • share — Share clicked
  • add_to_calendar — Added to calendar
  • send_chat — Chat message sent
  • close_player — Player closed
  • minimize_player — Player minimized
  • maximize_player — Player maximized
  • show_product_list — Product list shown
  • hide_product_list — Product list hidden
  • product_click — Product clicked
  • add_to_cart — Product added to cart
  • checkout — Checkout clicked
  • show_cart — Cart shown
  • hide_cart — Cart hidden
  • toggle_cc_on — Closed captions enabled
  • toggle_cc_off — Closed captions disabled
  • replay — Replay clicked
  • progress — Playback progress

onAddToCart callback

Triggered when a user adds a product to the cart (add_to_cart interaction). The product data is unified into a standard format. The event object has the following structure: detail object

onCheckout callback

Triggered when a user clicks checkout. The event object has the following structure:

Example

See the full list of live shopping events: Custom events (Live Shopping)

Picture-in-Picture (PiP)

When a user taps PiP inside the live shopping WebView, the SDK:
  1. Receives a PIP_ENTER message from the embed with the HLS stream URL, lsId, and playback position
  2. Swaps the WebView for a native react-native-video player and enters system PiP
  3. On PiP exit, remounts the WebView with the same lsId so the embed reloads the stream; for recordings, also writes playback position to session storage so the web player can seek on resume
  4. On iOS, automatically calls VwAppMinimizer.minimize() when PiP becomes active (if the host app implements the native module)
Android typically backgrounds the app automatically when PiP starts.

Setup in your app

1. Install peer dependencies
2. Render LiveShoppingChannel No extra PiP wiring is needed in JS — just render the component:
Pass lsId to open a specific stream on first load:
Disable the PiP button if needed (enabled by default):
3. iOS — Info.plist Add background audio so PiP playback continues when the app is backgrounded:
4. Android — AndroidManifest.xml Enable PiP on your main activity:
5. Optional — iOS VwAppMinimizer (host app native module) iOS has no public API to programmatically send the app to the background. The SDK calls VwAppMinimizer.minimize() automatically when PiP becomes active on iOS. Implement this native module in your host app (not in the SDK npm package) to enable auto-minimize.
App Store note: the example below uses a private API (UIApplication.suspend). Use only if your team accepts that trade-off.
ios/YourApp/VwAppMinimizer.swift:
ios/YourApp/VwAppMinimizer.m:
Register the files in your Xcode project Creating the files is not enough — they must be registered in your app target so Xcode compiles them. You can do this in Xcode or by editing project.pbxproj directly (useful if you manage the iOS project as code). Option A — Xcode UI
  1. Open ios/YourApp.xcworkspace in Xcode
  2. Right-click your app folder (same group as AppDelegate.swift) → Add Files to “YourApp”…
  3. Select VwAppMinimizer.swift and VwAppMinimizer.m
  4. Ensure your app target is checked under Add to targets
Option B — Edit project.pbxproj
  1. Place both files in ios/YourApp/ next to AppDelegate.swift
  2. Open ios/YourApp.xcodeproj/project.pbxproj
  3. Generate four unique IDs (run uuidgen four times, remove dashes, uppercase)
  4. Add entries following the same pattern as AppDelegate.swift:
  1. Add SWIFT_FILE_ID and OBJC_FILE_ID to your app’s PBXGroup children array (same group that lists AppDelegate.swift)
  2. Add SWIFT_BUILD_ID and OBJC_BUILD_ID to PBXSourcesBuildPhasefiles array (Compile Sources)
Replace YourApp with your iOS app folder name. Use the code blocks above for the file contents and mirror how AppDelegate.swift is registered in your project.pbxproj. If VwAppMinimizer is not registered, the SDK safely skips minimization — PiP still works. 6. Install the SDK in your app and rebuild Install from npm in your React Native project (not a local file: link):

Testing notes

The floating PiP window always shows system playback controls (play/pause, close). Those cannot be removed by the SDK.

WebView → native PiP protocol

The live shopping embed sends this message when the user requests PiP:

Native PiP → WebView resume

When PiP ends, the SDK remounts the WebView with window.lsId set so the embed auto-loads the same stream. For recordings (not live streams), the SDK also writes the native player’s current playback time to session storage:
The embed reads this key on init for recordings only, parses { time, lsId }, and seeks the web player to resume from that position. Live streams do not use this key — they resume at the live edge.
Note: The Inline, Floating, and VideoFeed components must be wrapped inside <VideowiseSDK.Provider> to function correctly. The Provider manages modal video state and handles navigation when a user taps on a video.

Videowise VideoFeed

A full-screen video feed component that displays a single video with shopping capabilities. The video player is shown immediately upon render.

Props

videowiseInfo object

onEvent callback

Triggered for all custom events from the widget. The event object has the following structure: detail object
All detail properties are optional and depend on the event type.
Possible event names (name)
  • videowiseProductAddToCart — Product added to cart
  • videowiseProductBuyNow — Buy now clicked
  • videowiseCheckoutClick — Checkout clicked
  • videowiseProductClick — Product clicked
  • videowiseVideoClick — Video clicked
  • videowiseVideoStart — Video played more than 3 seconds
  • videowiseVideoIsPlaying — Video is currently playing
  • videowiseVideoFull — Video played more than 80%
  • videowiseVideoSwipe — Video swiped
  • videowisePlayerClose — Player closed
  • videowiseVideoSoundOn — Sound turned on
  • videowiseVideoSoundOff — Sound turned off
  • videowiseVideoBounce — Video closed/swiped before 3 seconds
  • videowiseDataReady — Widget data loaded
  • videowiseCampaignReady — Campaign rendered
  • videowiseCampaignCheckout — Redirecting to checkout
  • videowiseBackgroundV2Rendered — Background V2 rendered
  • videowiseCtaClick — CTA button clicked
  • videowiseTriggerPlayerClose — Player close triggered

onAddToCart callback

Triggered when a user adds a product to the cart (videowiseProductAddToCart event). The event object has the following structure: detail object

onCheckout callback

Triggered when a user clicks checkout (videowiseCheckoutClick event). The event object has the following structure: detail object items array element

Example


Videowise Floating

A floating widget overlay that appears at the bottom-left of the screen. It dynamically sizes itself based on the widget content. When a user taps on a video, a full-screen VideoFeed modal opens.

Props

videowiseInfo object

onEvent callback

Triggered for all custom events from the widget. The event object has the following structure: detail object
All detail properties are optional and depend on the event type.
Possible event names (name)
  • videowiseProductAddToCart — Product added to cart
  • videowiseProductBuyNow — Buy now clicked
  • videowiseCheckoutClick — Checkout clicked
  • videowiseProductClick — Product clicked
  • videowiseVideoClick — Video clicked
  • videowiseVideoStart — Video played more than 3 seconds
  • videowiseVideoIsPlaying — Video is currently playing
  • videowiseVideoFull — Video played more than 80%
  • videowiseVideoSwipe — Video swiped
  • videowisePlayerClose — Player closed
  • videowiseVideoSoundOn — Sound turned on
  • videowiseVideoSoundOff — Sound turned off
  • videowiseVideoBounce — Video closed/swiped before 3 seconds
  • videowiseDataReady — Widget data loaded
  • videowiseCampaignReady — Campaign rendered
  • videowiseCampaignCheckout — Redirecting to checkout
  • videowiseBackgroundV2Rendered — Background V2 rendered
  • videowiseCtaClick — CTA button clicked
  • videowiseTriggerPlayerClose — Player close triggered

onAddToCart callback

Triggered when a user adds a product to the cart (videowiseProductAddToCart event). The event object has the following structure: detail object

onCheckout callback

Triggered when a user clicks checkout (videowiseCheckoutClick event). The event object has the following structure: detail object items array element

Example


Videowise Inline

An inline widget that embeds directly within the page flow. It starts with minimal height and dynamically expands as content loads, making it suitable for placing inside scrollable layouts. When a user taps on a video, a full-screen VideoFeed modal opens.

Available Widget Types

The following widget layouts are supported for the Inline component:
  • Single Video
  • In-Page Video Player
  • Quick Shop Carousel
  • Stories
  • Video Carousel
  • Highlighted Carousel
  • Overlapping Carousel
  • Scattered Videos
  • Masonry Grid
  • Grid Gallery
  • Floating
  • Gallery Highlight

Props

videowiseInfo object

onEvent callback

Triggered for all custom events from the widget. The event object has the following structure: detail object
All detail properties are optional and depend on the event type.
Possible event names (name)
  • videowiseProductAddToCart — Product added to cart
  • videowiseProductBuyNow — Buy now clicked
  • videowiseCheckoutClick — Checkout clicked
  • videowiseProductClick — Product clicked
  • videowiseVideoClick — Video clicked
  • videowiseVideoStart — Video played more than 3 seconds
  • videowiseVideoIsPlaying — Video is currently playing
  • videowiseVideoFull — Video played more than 80%
  • videowiseVideoSwipe — Video swiped
  • videowisePlayerClose — Player closed
  • videowiseVideoSoundOn — Sound turned on
  • videowiseVideoSoundOff — Sound turned off
  • videowiseVideoBounce — Video closed/swiped before 3 seconds
  • videowiseDataReady — Widget data loaded
  • videowiseCampaignReady — Campaign rendered
  • videowiseCampaignCheckout — Redirecting to checkout
  • videowiseBackgroundV2Rendered — Background V2 rendered
  • videowiseCtaClick — CTA button clicked
  • videowiseTriggerPlayerClose — Player close triggered

onAddToCart callback

Triggered when a user adds a product to the cart (videowiseProductAddToCart event). The event object has the following structure: detail object

onCheckout callback

Triggered when a user clicks checkout (videowiseCheckoutClick event). The event object has the following structure: detail object items array element

Example

Videowise trackingPixel

VideowiseSDK.trackingPixel is an async function that sends order data to Videowise analytics after a successful checkout. Call it once per completed order, after order confirmation. It is a plain async function and does not need to be rendered inside VideowiseSDK.Provider. It returns Promise<Response | null>. The resolved value is null when the SDK has no stored user identifier, when a required parameter is missing, or when the request throws.

Parameters

trackingPixel(params) takes a single object with the following properties:

orderItems element (OrderItem)

variant object finalLinePrice object

Example