Note: TheLiveShoppingChannelcomponent 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 mutedunmute_player— Player unmutedpause_player— Player pausedresume_player— Player resumedlike_reaction— Like reactionshare— Share clickedadd_to_calendar— Added to calendarsend_chat— Chat message sentclose_player— Player closedminimize_player— Player minimizedmaximize_player— Player maximizedshow_product_list— Product list shownhide_product_list— Product list hiddenproduct_click— Product clickedadd_to_cart— Product added to cartcheckout— Checkout clickedshow_cart— Cart shownhide_cart— Cart hiddentoggle_cc_on— Closed captions enabledtoggle_cc_off— Closed captions disabledreplay— Replay clickedprogress— 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
Custom channel body / modular section layout
By default the WebView body is a single monolith mount:channelBodyHtml to replace that body content and use modular channel sections with your own HTML between mounts. Omit #videowise_stream_channel when using sections — the monolith container takes precedence and section mounts are ignored.
videowise_stream_channel_hero, videowise_stream_channel_livenow, videowise_stream_channel_upcoming, videowise_stream_channel_past, optional videowise_stream_channel_shared.
See Live channel page layout for the full web embed contract (same mount ids on the web and in the RN WebView body).
Picture-in-Picture (PiP)
When a user taps PiP inside the live shopping WebView, the SDK:- Receives a
PIP_ENTERmessage from the embed with the HLS stream URL,lsId, and playback position - Swaps the WebView for a native
react-native-videoplayer and enters system PiP - On PiP exit, remounts the WebView with the same
lsIdso the embed reloads the stream; for recordings, also writes playback position to session storage so the web player can seek on resume - On iOS, automatically calls
VwAppMinimizer.minimize()when PiP becomes active (if the host app implements the native module)
Setup in your app
1. Install peer dependenciesLiveShoppingChannel
No extra PiP wiring is needed in JS — just render the component:
lsId to open a specific stream on first load:
Info.plist
Add background audio so PiP playback continues when the app is backgrounded:
AndroidManifest.xml
Enable PiP on your main activity:
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:
project.pbxproj directly (useful if you manage the iOS project as code).
Option A — Xcode UI
- Open
ios/YourApp.xcworkspacein Xcode - Right-click your app folder (same group as
AppDelegate.swift) → Add Files to “YourApp”… - Select
VwAppMinimizer.swiftandVwAppMinimizer.m - Ensure your app target is checked under Add to targets
project.pbxproj
- Place both files in
ios/YourApp/next toAppDelegate.swift - Open
ios/YourApp.xcodeproj/project.pbxproj - Generate four unique IDs (run
uuidgenfour times, remove dashes, uppercase) - Add entries following the same pattern as
AppDelegate.swift:
- Add
SWIFT_FILE_IDandOBJC_FILE_IDto your app’sPBXGroupchildrenarray (same group that listsAppDelegate.swift) - Add
SWIFT_BUILD_IDandOBJC_BUILD_IDtoPBXSourcesBuildPhase→filesarray (Compile Sources)
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 withwindow.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:
{ 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.