Video Feed (iOS)
Display Video Feed
Use FWSVideoFeedView
The FWSVideoFeedView provides a UIView wrapper for the VideoFeedViewController. You can customize the FWSVideoFeedView just like the VideoFeedViewController.
Integration
Import
FireworkVideo.Instantiate
FWSVideoFeedViewand embed it.
The following are the sample codes:
import UIKit
import FireworkVideo
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
self.addVideoFeedView()
}
func addVideoFeedView() {
let channelID = "<Encoded Channel ID>"
let playlistID = "<Encoded Playlist ID>"
let videoFeedView = FWSVideoFeedView(source: .channelPlaylist(channelID: channelID, playlistID: playlistID))
videoFeedView.viewConfiguration = getVideoFeedContentConfiguration()
videoFeedView.translatesAutoresizingMaskIntoConstraints = false
self.view.addSubview(videoFeedView)
NSLayoutConstraint.activate([
videoFeedView.leadingAnchor.constraint(equalTo: self.view.leadingAnchor),
videoFeedView.trailingAnchor.constraint(equalTo: self.view.trailingAnchor),
videoFeedView.heightAnchor.constraint(equalToConstant: 240),
videoFeedView.centerYAnchor.constraint(equalTo: self.view.centerYAnchor)
])
}
func getVideoFeedContentConfiguration() -> VideoFeedContentConfiguration {
var viewConfiguration = VideoFeedContentConfiguration()
viewConfiguration.itemView.autoplay.isEnabled = true
viewConfiguration.playerView.playbackButton.isHidden = false
return viewConfiguration
}
}Use FWSVideoFeedSwiftUIView(SwiftUI)
The FWSVideoFeedSwiftUIView provides a SwiftUI View wrapper for the VideoFeedViewController. You can customize the FWSVideoFeedSwiftUIView just like the VideoFeedViewController.
Integration
Import
FireworkVideo.Instantiate
FWSVideoFeedSwiftUIViewand embed it.
The following are the sample codes:
Autosizing (grid layout)
By default the feed fills the frame you give it and scrolls its own content. Autosizing inverts that: with a grid layout (VideoFeedGridLayout), the feed grows to the full height of its content, reports that height as its intrinsic content size, and lets your scroll view do the scrolling. That is what you want when the feed is one block inside a longer page.
Pass autosizingEnabled: true when you create the view.
In SwiftUI, place it in your ScrollView without a .frame(height:).
What autosizing changes
The feed stops scrolling internally and reports its content height as its intrinsic content size. Do not give it a fixed height constraint or
.frame(height:).At most 20 videos are rendered — one page. A grid grows taller with every page loaded, so it has to stay bounded. Set
fetchConfiguration.maxVideosto show fewer; a value above 20 is clamped back to 20. This cap applies only to an autosized grid — without autosizing, or with a row layout,maxVideosis not limited.
autosizingEnabled and the kind of layout — grid or row — are fixed when the view is created. Assigning a layout of the other kind afterwards is ignored, and trips an assertion in debug builds. To switch, replace the view with a freshly initialized one; in SwiftUI, give it a new .id().
Content Source
Please refer to Video Feed Content Source (iOS).
Custom Call-To-Action Button Handling
Custom Call-To-Action button handling is done via the FireworkVideoCTADelegate protocol. This provides control over what occurs when a call-to-action button is tapped.
Set the delegate:
2. Conform to protocol:
Force Refresh
You can force a VideoFeedViewController to reload its content by calling the refresh() method on the instance you want to update. This is useful when your feed is embedded alongside other components that refresh together, or when you support features like pull-to-refresh.
Receive video feed events
Set the delegate
Conform to
VideoFeedViewControllerDelegateprotocol
Receive onVideosLoaded callback
The onVideosLoaded closure is called whenever videos are loaded into the video feed, including the initial page and every subsequent page loaded via pagination. The closure receives a VideoFeedVideosLoadedInfo value whose videos property contains the [VideoDetails] that were loaded for that page.
Use FWSVideoFeedView
onVideosLoaded is exposed as a property on FWSVideoFeedView:
Use FWSVideoFeedSwiftUIView(SwiftUI)
onVideosLoaded is exposed as an initializer parameter on FWSVideoFeedSwiftUIView:
Autoplay
Autoplay lets the video feed automatically start playing the first eligible item without requiring user interaction. To enable it, set:
All behavior described below assumes this prerequisite is met. Which item is picked as "eligible" depends on the visibility threshold (viewConfiguration.itemView.autoplay.triggerVisibilityPercentage).
Viewport-based autoplay (default)
Autoplay is viewport-based by default, which delivers a seamless experience when the component is embedded in a ScrollView, TableView, or CollectionView. Visibility is measured against the viewport rather than the component's own bounds:
The first item whose visibility within the viewport is greater than or equal to
triggerVisibilityPercentagestarts playing automatically.When the feed is embedded in your own scroll container, the viewport is clipped to that container automatically — a feed scrolled out of it correctly pauses, with no extra configuration.
The viewport itself is customizable via
safeAreaEdges(see below).
Customize viewport
The default viewport is defined as the screen bounds minus the safe area insets—such as the status bar, top navigation bar, bottom tab bar, and bottom home indicator.
The viewport is then clipped to whatever your own layout hides. The SDK walks up from the feed and intersects the bounds of every ancestor view that clips its content, so a feed scrolled out of your scroll container — or hidden behind a header stacked above that container — is measured as not visible. This is automatic and needs no configuration.
If you want only some safe-area edges excluded, narrow them with safeAreaEdges.
Video feed configurations
Please refer to Video feed configurations (iOS).
Player configurations
Please refer to Player configurations (iOS).
Last updated
Was this helpful?