Android SDK release notes (historical)
Historical Experiences SDK release notes for Android, 2026 onward. For current releases, use the latest published release notes. For 2025 and earlier, see Android SDK release notes (historical, 2025 and earlier).
1.21.2 - Android
Date: 2026-10-15
Added
- KDocs are now included in published SDK artifacts. Inline documentation is available in your IDE on hover for improved developer experience.
- Added
onTriggerInteractionLinktoBlazePlayerSourceDelegate, so apps can handle links opened from Engagement Layers.
Live catchup
- While a live stream has a recap, the full-screen Videos player shows a recap button, and can suggest the recap with a Still time to catch up popup or a Live recap banner. Closing the recap returns to the stream at the live edge. Live catchup is enabled per account by WSC Sports and needs no code changes. Hide the button with
BlazeVideosPlayerStyle.buttons.liveCatchup. See Live catchup.
Content entitlements
- Content can be restricted per viewer. Set the viewer token with setExternalUserToken and handle refused items with onContentRestricted on
BlazePlayerSourceDelegate. See Content entitlements.
Stream tokenization
- Videos and live streams can be delivered through tokenized CDN URLs, using the same viewer token as content entitlements. Stream tokenization is enabled per account by WSC Sports. See Stream tokenization.
Followed entities data source
BlazeDataSourceType.FollowedEntities(entityTypes, orderType, advancedOrderType, maxItems)shows Moments, Stories, or Videos about the players, teams, and properties the viewer follows. Restrict it to some categories withentityTypes. If the viewer follows nothing, no content is returned. See BlazeDataSourceType.
Follow entity category
BlazeFollowEntity.entityType(BlazeFollowedEntityCategory:PLAYER,TEAM,PROPERTY) carries the type of a followed entity. It's optional, is reported inonFollowEntityClickedandgetFollowedEntities(), and can be passed tosetFollowedEntities,insertFollowedEntities, andremoveFollowedEntities. See BlazeFollowEntity.
Follow button star icon
- The Follow button can show a star. Set
iconSourcetoBlazeMomentsPlayerFollowEntityIconSource.STARonfollowEntity.followState.chipandfollowEntity.unfollowState.chipfor an outlined star while unfollowed and a filled star while followed.DEFAULTkeeps the+and the checkmark. See iconSource.
Subtitle and description on Moments widgets
subtitleanddescriptiononBlazeWidgetItemStyleshow a Moment's subtitle and description under its title. Both are hidden by default, have their own unread and read text styles liketitle, and move with the title's position as one block.topSpacingsets the space above each line. See BlazeWidgetItemSubtitleStyle and BlazeWidgetItemDescriptionStyle.
Animated thumbnails
- Row presets play an animated (GIF) preview in each item's thumbnail:
StoriesWidget.Row.animatedThumbnailsCircles,StoriesWidget.Row.verticalAnimatedThumbnailsRectangles,MomentsWidget.Row.verticalAnimatedThumbnailsRectangles,VideosWidget.Row.verticalAnimatedThumbnailsRectangles, andVideosWidget.Row.horizontalAnimatedThumbnailsRectangles. The Stories presets and the horizontal Videos preset are new; the vertical Videos preset now plays the preview where it previously showed a still image. See Presets and BlazeWidgetItemImageAnimatedThumbnailStyle.
Widget play icon
playIcononBlazeWidgetItemStyleshows a play icon centered on the item's thumbnail, with a single built-in design. It's hidden by default, andisVisibleis its only setting. For a custom icon, placestatusIndicatororbadgeover the image with your own background image. See BlazeWidgetItemPlayIconElementStyle.
Story page title
- The Stories player shows the page title set in the CMS as a second header row, under the Story title. Pages without a title show no row. Style it with
subtitleonBlazeStoryPlayerStyle. See BlazeStoryPlayerSubtitleTextStyle.
Audio track selector for live streams
- The Videos full-screen player shows an audio button for live streams with more than one audio track, so viewers can switch commentary feeds. Their choice is remembered. The button is hidden while casting to Chromecast. Controlled by
BlazeVideosPlayerStyle.buttons.audio, visible by default. See Audio track selection.
Live UI styles
statusIndicatorandbackToLiveButtononBlazeVideosPlayerStyleare now public, so you can customize the live status indicator and the Back to live button. See Live UI in the player.
Badge images from the CMS
- Widget items can show a badge image set per Story, Moment, or Video in the CMS. It replaces the badge background image and fills the badge inside its border, so
paddingdoesn't apply to it. It shows the badge even whenisVisibleisfalse, and hides the badge for that item if the image fails to load. See BlazeWidgetItemBadgeStyle.
Moments tabs reselection
onTabReselectedonBlazePlayerContainerTabsDelegateis called when the viewer taps the title of the tab that's already selected, for example to reload it withreloadTab(at = tabIndex).tabIndexis the zero-based index among visible tabs. See Player tabs container.
Cold start status
BlazeSDK.isInColdStart(playerType)returns whether the current viewer's For you feed for a content type is served cold start content (true) or personalized content (false). Returnsnullwhen the status is unknown, for example for an anonymous viewer. See Implicit personalization.
Privacy settings from the Back Office
- WSC Sports can enforce
disableAnalyticsandsetDoNotTrackfor your app from the Back Office. An enforced setting applies even if your app sets it tofalse, and stays in effect across launches. Your app's own settings are unchanged when nothing is enforced. See disableAnalytics.
Follow entity provider name
BlazeFollowEntity.providerNamenames the content provider of a followed entity. It's optional, is set on entities the SDK reports, and is sent with the follow state. Follow and unfollow are now stored by the SDK and synced through User Activity, so they survive app restarts and follow the viewer across devices. See BlazeFollowEntity.
Changed
Videos inline player content
BlazeVideosInlinePlayernow always shows on-demand videos. It still acceptsvideosFilterParamsfor source compatibility, but ignores the value. See In the inline player.
Widget badge defaults
- In the widget presets, the badge now sits at the top end of the image on circle items and at the top center, 4dp below the top edge, on rectangle items. Previously it sat at the top start, over the NEW or LIVE status chip. Badge padding is now 4dp on every side. The default badge text is 8sp in the dark primary color instead of 11sp white. This text default also applies to badge state styles created with
unread(),read(),liveUnread(), orliveRead()that settextwithout atextStyle.
Moments widget duration
- Moments widget presets now show the duration on each item by default, like Videos presets. To hide it, set
widgetItemStyle.durationElement.isVisible = false.
Moments player icons
- The Moments player's icon buttons are now 44dp and share one vertical alignment line, so a wide element such as the Follow avatar or a long likes count no longer shifts the other icons.
Android 16 and compileSdk 35
- The SDK now compiles against and targets Android 16 (API 36). Building against this version requires
compileSdk35 or higher in your app.
Follow button shown by default
- The Moments player shows the Follow button by default, so the Follow feature works without extra styling. To hide it, set
followEntity.isVisible = falseonBlazeMomentsPlayerStyle. See BlazeMomentsPlayerFollowEntityStyle.
Share and search in tabs containers
onShareClickedandonSearchButtonClickedonBlazePlayerContainerTabsDelegateare now called for players inside a tabs container. Previously the tabs container didn't forward them, so a delegate that implements them starts receiving these callbacks. See Player tabs container.
Public API cleanup
- Classes that aren't part of the documented API are now
internal, for example the player activities and internal data models. Apps that use only the documented API are unaffected. Code that referenced an undocumented class no longer compiles; use the documented API instead.
Fixed
Moments ad frequency
- Moments ads now appear at the configured frequency regardless of how content loads. The SDK keeps a running count of Moments viewed across the player session, so the count no longer resets when new content is loaded.
External user ID
- Fixed a crash that could occur when the external user ID changed (meaning
setExternalUserIdwas called right after initializing the SDK).
Videos player restore
- The Videos player no longer crashes when it's restored after the app process was stopped in the background. It now closes instead.
In-app web view back navigation
- Back in the in-app web view, opened from a CTA of type web, steps through the page history again instead of closing the web view.
VAST ad tags
- Ad tags with unreplaced macros, such as
[RANDOM], are now encoded before the ad request, so IMA no longer rejects them.
SDK dependencies
- The SDK and ad modules now declare every library they use, so a change in your app's dependencies can no longer remove a library the SDK needs. The library versions your app resolves are unchanged.
1.20.10 - Android
Date: 2026-09-10
Fixed
Resolved a rare crash that could occur when loading Blaze widgets in some app configurations.
1.20.4 - Android
Date: 2026-07-23
Added
Keep empty tabs visible
isTabVisibleWhenEmpty on BlazePlayerTabsStyle controls whether a tab with no content, or a failed load, stays visible. Defaults to true. See isTabVisibleWhenEmpty.
A tab that stays visible presents the player's empty or error state. When set to false, a tab is removed after its content is prepared. The first tab is always kept, whether or not it has content.
This changes the default for every app, not only apps that requested it.In 1.20.3, empty tabs were hidden automatically with no way to keep them. From 1.20.4, empty tabs are visible again by default. If your app relies on the automatic hiding, set
isTabVisibleWhenEmpty = falseto keep that behavior.
This is a setup-time configuration. Set it before playback starts. Changing it through updateTabsStyle() at runtime doesn't re-evaluate tabs, and tabs that were already removed aren't restored. Add them again with upsertTabs.
1.20.3 - Android
Date: 2026-07-20
Breaking changes
Widget remote identifier
Renamed widgetRemoteId to widgetRemoteIdentifier on widget init / reload paths (and related models). Update call sites to the new name. CMS-configured widgets are supported starting with this version: set widgetRemoteIdentifier so content creators can configure widgets in Experiences CMS. See CMS-configured widgets and Widget initialization.
For you cold start labels
Renamed the Recommendations For you parameter from promotedLabels to coldStartLabels. Update any For you data source that still passes promotedLabels. See Implicit personalization.
Added
GAM Next-Gen module
The SDK now supports Google GMA Next-Gen SDK for Google Ad Manager banner and custom native ads, through the new com.blaze:gam-next-gen module. If you use the legacy GAM module today, migrate to GAM Next-Gen so you stay on the supported Google ads stack. See GAM Next-Gen module and the migration guide.
- What you get: the same Experiences
BlazeGAMAPI (banner and custom native), on GMA Next-Gen - What to change: Ad Manager app ID in the Manifest, Gradle artifact (
com.blaze:gam→com.blaze:gam-next-gen),com.blaze.gam.nextgenimports, and Google ad object types if you use them directly - Important: you can't run legacy Google Mobile Ads and GMA Next-Gen in the same app; don't keep both Blaze GAM modules
Item click thumbnail
Added BlazeWidgetItemClickParams now includes contentThumbnailUrl, the URL of the clicked item's main thumbnail (Stories, Moments, and Videos widgets). See BlazeWidgetItemClickHandlerState.
Closed captions style
BlazeCaptionsStyle for customizing closed captions in the player.
Moments likes count threshold
Added shouldPreserveLikesCountBelowThreshold on BlazeMomentsPlayerButtonsStyle.
CTA border customization
Added borderColor and borderWidth on Moments, Stories, and Videos CTA styles. See BlazeMomentsPlayerCtaStyle, BlazeStoryPlayerCtaStyle, and BlazeVideosPlayerCtaStyle.
Stories pre-roll ads
Added ads.enablePreroll on BlazeStoriesPlaybackConfiguration. When enabled, the fixed-position ad on the first page plays as a pre-roll instead of being skipped. Default is false.
Moments tabs Chrome
Added isTabTitleVisibleWhenSingleTab and activeTabIndicator on BlazePlayerTabsStyle.
Share extra info
Added extraInfo on BlazeShareParams. See BlazePlayerSourceDelegate.
Custom action button metadata
Added sdkMetadata on BlazePlayerCustomActionButtonParams .
Compose Data Source
composite to enable multiple data sources in a single call. See BlazeDataSourceType.Composite: Android
Videos player overlay auto-hide time
overlayVisibilityThreshold on BlazeVideosPlayerStyle sets how long (in milliseconds) the player controls overlay stays visible before it auto-hides. Non-positive values (zero or negative) fall back to the default. Presets keep the current default of 3000 ms.
Live streaming
Streaming video (CMS Streams / live video) is supported starting with this version. The Videos player and widgets now support live video streams alongside on-demand videos. A live stream is a video that carries stream metadata, so it plays through the standard Videos player and widgets: there is no separate live player. See Video content type delivery.
BlazeVideosFilterParams(contentTypes,streamStates) controls which content types and stream states a widget or player shows. Create it withBlazeVideosFilterParams.base(), adjust the properties, and pass it toinitWidgeton the Videos widgets and toBlazeSDK.playVideos/BlazeSDK.prepareVideos.BlazeVideoContentType(VIDEO/STREAM) andBlazeLiveStreamStatus(LIVE/UPCOMING/ENDED) identify the content type and the stream lifecycle.- Order streams with
BlazeOrderType(RECENTLY_STARTED_FIRST/RECENTLY_STARTED_LAST) andBlazeAdvancedOrderType(LiveFirst). - Style the live/upcoming/ended chip and start time on widget items with BlazeWidgetItemStatusIndicatorStyle and BlazeWidgetItemEventTimeElementStyle.
See Live streaming.
Changed
Videos multi-aspect ratio default
Default of BlazeVideosPlaybackConfiguration.multiAspectRatio changed from false to true.
Removed
Remote config data source
Removed BlazeDataSourceType.RemoteConfig. CMS-configured widgets are supported starting with this version through widgetRemoteIdentifier at widget initialization. See CMS-configured widgets.
Improved
- Widget loading performance
Fixed
Closed captions (Material 3)
Crash on CC button tap with some Material 3 versions.
Search (shared Moment)
Search unavailable when viewing a Moment from a shared link.
Search (RTL)
Search did not respect RTL / forced layout direction.
1.19.5 - Android
Date: 2026-06-11
Fixed
- On process death restoration, fixed a silent crash on the Moments player.
- In rare cases, preparing recommendations caused no content to be displayed in the Moments player.
1.19.3 - Android
Date: 2026-06-02
Fixed
- Fixed a rare internal ANR caused by the SDK delegates mechanism.
1.19.1 - Android
Date: 2026-05-17
Added
- Added
extraInfo: Map<String, String>toBlazeWidgetItemClickParams, exposing the content item's key-value metadata to the widget click handler. See BlazeWidgetItemClickHandlerState. - Added shimmer color customization for widgets via the new
BlazeWidgetShimmeringStyletype, exposed onBlazeWidgetLayout.shimmering. See BlazeWidgetShimmeringStyle. - Added configurable buffering spinner delay to all player types:
bufferingSpinnerDelayMsadded to BlazeMomentsPlaybackConfiguration and BlazeVideosPlaybackConfiguration.- Introduced new
BlazeStoriesPlaybackConfigurationwithbufferingSpinnerDelayMsand a new global methodBlazeSDK.setDefaultStoriesPlaybackConfiguration(). See BlazeStoriesPlaybackConfiguration.
- Added Widget to Tabs support for Moments widgets. A new
initWidgetoverload acceptsBlazeMomentsWidgetTabsConfiguration, launching a fullscreen tabs player on item tap instead of a single-moment player. See Moments Widget to Tabs. - Added SDK-wide sound state control via the new BlazePlayerSoundState type and
BlazeSDK.setPlayerSoundState()method, allowing apps to mute or unmute all story, moment, and video playback globally.
Fixed
- Fixed 2x speed mode not activating on Moments and Videos shorter than 20 seconds.
- Fixed the 2x speed indicator overlapping the Moments Tabs header.
1.18.1 - Android
Date: 2026-05-06
Fixed
- Improved stability when the player screen is restored by the system after the app was evicted from memory under low-resource conditions.
1.18.0 - Android
Date: 2026-03-29
Added
Moments Tabs: Programmatic Content Reload
You can now programmatically refresh the content of your Moments Tabs component without requiring users to navigate away and back.
New public APIs on BlazeMomentsPlayerContainerTabs / BlazeMomentsPlayerContainerTabsComposeStateHandler:
Story Player: Title Image
A contextual image can now be displayed alongside the story title in the player header. See Storyplayertitleimagesource
- New public types:
BlazeStoryPlayerTitleImageSource,BlazeStoryPlayerTitleImageStyle.
Bug fixes
- Fixed a bug in Moments tabs where non-scrollable items were not behaving correctly.
1.17.1 - Android
Date: 2026-03-08
Added
- Added a Casting functionality to the Videos player. See BlazeVideosPlayerCastButtonStyle .
- Added auto advance functionality to the Moments player. See BlazeMomentsPlayerLoopBehavior .
- Added Picture-in-Picture (PIP) support to the Videos player. Requires Android 8.0+ (API 26+). See BlazePiPManager.
- Added
onShareClickedmethod to allow apps to fully override the share link creation. See onShareClicked. - Added a new Search functionality (free text content search UI):
- Stand alone API: BlazeSDK.screens.showSearchScreen.
- In-player experience: BlazeMomentsPlayerStyle.buttons.search.
- Added Seek buttons to Moments and Videos players. See Moments Seek and Videos Seek.
- Added X2 speed mode for Moments and Videos players.
- Added double-tap gesture to Videos player.
1.16.3 - Android
Date: 2026-01-21
Fixed
- Fixed a widget layout cutoff when using Jetpack Compose.
1.16.1 - Android
Date: 2026-01-15
Fixed
- Fixed an issue where widgets could remain stuck in shimmering mode.
- Fixed an issue where
appendMomentsToPlayerdid not work for Entry Points. - Fixed an issue where the video player always resumed playback after dismissing the Share chooser, ignoring the previous paused state.
Updated 1 day ago
