API Reference
Complete reference for the BB Channel SwiftUI SDK.
BBChannelView
The main SwiftUI view that renders a Blue Billywig channel.
BBChannelView(
channelUrl: String,
options: BBChannelOptions? = nil,
initialNavigationState: BBNavigationState? = nil,
viewModel: BBChannelViewModel,
callbacks: BBChannelCallbacks
)
| Parameter | Type | Description |
|---|---|---|
channelUrl | String | Required. URL to the channel JSON configuration. |
options | BBChannelOptions? | Configuration options. |
initialNavigationState | BBNavigationState? | Open at a specific page on load. |
viewModel | BBChannelViewModel | View model for programmatic control. |
callbacks | BBChannelCallbacks | Event callbacks. |
BBChannelViewModel
An ObservableObject that exposes channel state and control methods.
Published Properties
| Property | Type | Description |
|---|---|---|
canGoBack | Bool | Whether back navigation is available. |
isReady | Bool | Whether the channel has finished loading. |
Navigation Methods
| Method | Description |
|---|---|
navigateTo(page:clipId:clipListId:query:) | Navigate to a specific page. |
goBack() | Go back in the navigation stack. |
search(_ query: String) | Trigger a search. |
playVideo(clipId: String) | Navigate to and play a specific clip. |
navigateToEntity(entityType:entityId:) | Navigate to a clip or playlist by ID. |
navigateToSubChannel(subChannelId: String) | Switch to a sub-channel (multi-channel). |
resetNavigation() | Return to the main page, clearing the stack. |
Authentication Methods
| Method | Description |
|---|---|
setJwt(_ jwt: String) | Set or update the JWT for restricted content. |
setRpcToken(_ token: String) | Set or update the RPC token (legacy). |
Player Control Methods
All player methods accept an optional playerId parameter. Without it, they target the active player.
| Method | Description |
|---|---|
play(playerId: String?) | Start or resume playback. |
pause(playerId: String?) | Pause playback. |
seek(to time: Double, playerId: String?) | Seek to position in seconds. |
setVolume(_ level: Double, playerId: String?) | Set volume (0.0 -- 1.0). |
setMuted(_ muted: Bool, playerId: String?) | Mute or unmute. |
enterFullscreen(playerId: String?) | Enter fullscreen mode. |
exitFullscreen(playerId: String?) | Exit fullscreen mode. |
BBChannelOptions
Configuration options for channel behavior and appearance.
struct BBChannelOptions {
var autoPlay: Bool?
var searchBar: Bool?
var noStats: Bool?
var playout: String?
var jwt: String?
var rpcToken: String?
var nativePlayerMode: Bool?
var bundleUrl: String?
}
| Property | Type | Default | Description |
|---|---|---|---|
autoPlay | Bool? | true | Auto-play the first video. |
searchBar | Bool? | channel config | Show the search bar. |
noStats | Bool? | false | Disable analytics. |
playout | String? | channel config | Override the playout. |
jwt | String? | nil | JWT for restricted content. |
rpcToken | String? | nil | RPC token (legacy). |
nativePlayerMode | Bool? | false | Use native player via BBNativePlayerKit. |
bundleUrl | String? | CDN | Override the JS bundle base URL. |
BBChannelCallbacks
Event callbacks struct. All callbacks are optional.
struct BBChannelCallbacks {
// Lifecycle
var onReady: (() -> Void)?
var onError: ((BBErrorEvent) -> Void)?
// Navigation
var onNavigate: ((BBNavigationEvent) -> Void)?
var onNavigationStateChange: ((BBNavigationState) -> Void)?
var onCanGoBackChange: ((Bool) -> Void)?
// Media
var onMediaPlay: ((BBMediaInfo) -> Void)?
var onMediaPause: ((BBMediaInfo) -> Void)?
var onMediaEnd: ((BBMediaInfo) -> Void)?
var onFirstPlayerMedia: ((BBMediaInfo) -> Void)?
// Player
var onPlayerStateChange: ((BBPlayerStateEvent) -> Void)?
var onPlayerEvent: ((BBPlayerEvent) -> Void)?
var onTimeUpdate: ((BBTimeUpdateEvent) -> Void)?
var onClipLoaded: ((BBClipLoadedEvent) -> Void)?
var onAdStart: ((BBAdEvent) -> Void)?
var onAdEnd: ((BBAdEvent) -> Void)?
// Multi-player
var onPlayersChange: (([BBRegisteredPlayer]) -> Void)?
var onActivePlayerChange: ((BBRegisteredPlayer) -> Void)?
// Other
var onSearch: ((BBSearchEvent) -> Void)?
var onExternalLink: ((String) -> Void)?
var onAnalyticsEvent: ((BBAnalyticsEvent) -> Void)?
}
Event Types
BBMediaInfo
Information about a media clip.
struct BBMediaInfo {
let clipId: String
let title: String?
let description: String?
let jsonUrl: String?
let thumbnailUrl: String?
let duration: Double?
let isInlinePlayer: Bool
let playerId: String?
let clipListId: String?
let clipListTitle: String?
let index: Int?
let context: [String: Any]?
}
BBNavigationState
Represents the current navigation state.
struct BBNavigationState {
let page: String // "main", "detail", "overview", "search"
let clipId: String?
let clipListId: String?
let query: String?
let subChannelId: String?
}
BBNavigationEvent
Fired on navigation changes.
struct BBNavigationEvent {
let pageType: String
let canGoBack: Bool
let stackDepth: Int
let clipId: String?
let clipListId: String?
let query: String?
}
BBErrorEvent
struct BBErrorEvent {
let code: String
let message: String
let details: [String: Any]?
}
BBSearchEvent
struct BBSearchEvent {
let query: String
let resultCount: Int
}
BBPlayerEvent
Raw player event.
struct BBPlayerEvent {
let playerId: String
let eventType: String
let data: [String: Any]?
}
BBTimeUpdateEvent
struct BBTimeUpdateEvent {
let playerId: String
let currentTime: Double
let duration: Double
}
BBPlayerStateEvent
struct BBPlayerStateEvent {
let playerId: String
let isPlaying: Bool
let currentTime: Double
let duration: Double
let volume: Double
let isMuted: Bool
let isFullscreen: Bool
}
BBClipLoadedEvent
struct BBClipLoadedEvent {
let playerId: String
let clipId: String
let title: String?
let duration: Double?
}
BBAdEvent
struct BBAdEvent {
let playerId: String
let adType: String?
let adPosition: String?
}
BBRegisteredPlayer
struct BBRegisteredPlayer {
let playerId: String
let context: String? // "player", "detailPage", "overviewPage"
}
BBAnalyticsEvent
struct BBAnalyticsEvent {
let eventType: String
let data: [String: Any]?
}