Mobile SDK FAQ
Common client questions about the Bambuser Shoppable Video mobile SDKs. Updated automatically from support threads.
To add a new entry, share the client question in a Slack thread and ask @sven-inge update mobile faq.
createShoppableVideoPlayerCollection throws an error even though my playlist ID is correct.
Verify that BambuserShoppableVideoPlaylistInfo has all required fields: orgId, pageId, and playlistId. These must match the values configured in BamHub under Shoppable Video → Placements → Component ID. Also confirm you are using type: .playlist(...) — not type: .videoId(...), which only works with createShoppableVideoPlayer (singular).
The thumbnail shows but tapping it does nothing.
Listen for the preview-should-expand event in onNewEventReceived. By default the player does not auto-expand — your app must respond to this event by calling changeMode(to: .fullExperience) or navigating to a dedicated player screen.
PiP starts unexpectedly when the user backgrounds the app.
Picture-in-Picture is disabled by default for shoppable videos. If it is activating, you have set playerView.pipController?.isEnabled = true somewhere in your code. Set it to false to disable PiP entirely, or only enable it on explicit user action.
getShoppableVideoPlayerCollection returns an empty list but no error.
Check that BambuserCollectionInfo.Playlist has the correct orgId, pageId, and containerId. These must match the BamHub placement exactly. If the placement is unpublished or the Component ID does not match, the API returns an empty collection without an error response.
The switchScreenMode call has no effect.
switchScreenMode is a method on ViewActions, which is the third parameter of onNewEventReceived. Make sure you are calling it on viewAction, not on playerActions (which is passed to onVideoStatusChanged). They are separate objects with different capabilities.
The carousel FlatList renders blank items on iOS.
This usually means cleanupPlaylist() was called before all playlist player views were mounted. Ensure cleanupPlaylist() is only called in the component's unmount lifecycle (useEffect(() => cleanup, [cleanup])), not during re-renders or navigation transitions.
On Android, the shoppable player shows a loading spinner indefinitely.
Confirm that mode="shoppable" is set on BambuserVideoView and that the id prop is a valid, published shoppable video ID. An invalid or draft video ID causes the player to stay in a loading state without an explicit error event.