Skip to main content

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
)
ParameterTypeDescription
channelUrlStringRequired. URL to the channel JSON configuration.
optionsBBChannelOptions?Configuration options.
initialNavigationStateBBNavigationState?Open at a specific page on load.
viewModelBBChannelViewModelView model for programmatic control.
callbacksBBChannelCallbacksEvent callbacks.

BBChannelViewModel

An ObservableObject that exposes channel state and control methods.

Published Properties

PropertyTypeDescription
canGoBackBoolWhether back navigation is available.
isReadyBoolWhether the channel has finished loading.
MethodDescription
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

MethodDescription
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.

MethodDescription
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?
}
PropertyTypeDefaultDescription
autoPlayBool?trueAuto-play the first video.
searchBarBool?channel configShow the search bar.
noStatsBool?falseDisable analytics.
playoutString?channel configOverride the playout.
jwtString?nilJWT for restricted content.
rpcTokenString?nilRPC token (legacy).
nativePlayerModeBool?falseUse native player via BBNativePlayerKit.
bundleUrlString?CDNOverride 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]?
}