Installation
react-native-video (>= 6.0.0) and run pod install in your ios/ folder.
SDK
OnEventType<T>:
Shared props
Available onInline, 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: 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
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.
Note: TheInline,Floating, andVideoFeedcomponents 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 cartvideowiseProductBuyNow— Buy now clickedvideowiseCheckoutClick— Checkout clickedvideowiseProductClick— Product clickedvideowiseVideoClick— Video clickedvideowiseVideoStart— Video played more than 3 secondsvideowiseVideoIsPlaying— Video is currently playingvideowiseVideoFull— Video played more than 80%videowiseVideoSwipe— Video swipedvideowisePlayerClose— Player closedvideowiseVideoSoundOn— Sound turned onvideowiseVideoSoundOff— Sound turned offvideowiseVideoBounce— Video closed/swiped before 3 secondsvideowiseDataReady— Widget data loadedvideowiseCampaignReady— Campaign renderedvideowiseCampaignCheckout— Redirecting to checkoutvideowiseBackgroundV2Rendered— Background V2 renderedvideowiseCtaClick— CTA button clickedvideowiseTriggerPlayerClose— 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-screenVideoFeed 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 cartvideowiseProductBuyNow— Buy now clickedvideowiseCheckoutClick— Checkout clickedvideowiseProductClick— Product clickedvideowiseVideoClick— Video clickedvideowiseVideoStart— Video played more than 3 secondsvideowiseVideoIsPlaying— Video is currently playingvideowiseVideoFull— Video played more than 80%videowiseVideoSwipe— Video swipedvideowisePlayerClose— Player closedvideowiseVideoSoundOn— Sound turned onvideowiseVideoSoundOff— Sound turned offvideowiseVideoBounce— Video closed/swiped before 3 secondsvideowiseDataReady— Widget data loadedvideowiseCampaignReady— Campaign renderedvideowiseCampaignCheckout— Redirecting to checkoutvideowiseBackgroundV2Rendered— Background V2 renderedvideowiseCtaClick— CTA button clickedvideowiseTriggerPlayerClose— 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-screenVideoFeed 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 cartvideowiseProductBuyNow— Buy now clickedvideowiseCheckoutClick— Checkout clickedvideowiseProductClick— Product clickedvideowiseVideoClick— Video clickedvideowiseVideoStart— Video played more than 3 secondsvideowiseVideoIsPlaying— Video is currently playingvideowiseVideoFull— Video played more than 80%videowiseVideoSwipe— Video swipedvideowisePlayerClose— Player closedvideowiseVideoSoundOn— Sound turned onvideowiseVideoSoundOff— Sound turned offvideowiseVideoBounce— Video closed/swiped before 3 secondsvideowiseDataReady— Widget data loadedvideowiseCampaignReady— Campaign renderedvideowiseCampaignCheckout— Redirecting to checkoutvideowiseBackgroundV2Rendered— Background V2 renderedvideowiseCtaClick— CTA button clickedvideowiseTriggerPlayerClose— 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