Migrate From v5

Why should you Migrate?

Firework Android SDK v6 is a ground-up re-built version of our Android SDK and thus not an incremental version of v5. This new version brings an improved video watching experience and seamless integration with a similar set of features for running short-form shoppable videos and setting up live-stream shopping in your apps. All the future major feature upgrades would be on top of v6. So it is mandatory to migrate if you want to make use of all the latest features being introduced. This guide will help you upgrade with ease.
Please discuss this with your Firework point of contact before deciding to go ahead with the migration.

Feature Comparison with V5

Last Updated March 10, 2023
Discover Feed
Channel Feed
Playlist Feed
Playlist Group Feed
Coming Soon
​Dynamic Content
Horizontal/Vertical/Grid Layouts
CTA button on Videos
CTA button click handler and listener
Shoppable Videos (Product Cards & Shopping experience
Video Analytics Events listener
Share button click listener
Feed item click listener
Video Player configurations
Share and Deep-link mechanism
Autoplay in Feed and its configuration
Coming Soon
Picture in Picture(Outside App)
Picture in Picture(Inside App)
Multihost Livestream(Agora)
Low Latency Livestream
Retail Media Network (RMN) Ad support
Interstitial Ima Ad support
Interstitial FWAI Ad support

Migration Steps

1. Update Dependencies

The new SDK is available in maven central so you have to add mavenCentral() in your repositories.
Remove the below dependencies from build.gradle
implementation 'com.github.loopsocial:firework_sdk:{sdk_version}'
implementation 'com.github.loopsocial:AndroidAdsService:v20.0.0'
implementation 'com.github.loopsocial:AndroidAdsService:v19.5.0'
implementation 'com.github.loopsocial:AndroidAdsService:v19.8.0'
Add the following
def fireworkSdkVersion = "latest_firework_sdk_version"
implementation 'com.firework:sdk:$fireworkSdkVersion'
// Only for single host (Optional)
implementation 'com.firework.external.livestream:singleHostPlayer:$fireworkSdkVersion'
// Only for multi host (Optional)
implementation 'com.firework.external.livestream:multiHostPlayer:$fireworkSdkVersion'
//Either 1 of the below image loading related depedencies can be added.
// Glide Impl (Optional)
implementation 'com.firework.external.imageloading:glide:$fireworkSdkVersion'
// Picasso Impl (Optional)
implementation 'com.firework.external.imageloading:picasso:$fireworkSdkVersion'

2. Android Manifest Changes

Remove the following activity from AndroidManifest.xml file as it is no longer required in v6.
//Activity needed for video playback
<activity android:name="com.loopnow.fireworklibrary.PlaybackActivity" />
In v5, If you enabled adding checksum to data reporting by adding the following snippet to AndroidManifest.xml, you can remove it. Enabling check sum is now part of SDK initialization which can be found in the next step.
<meta-data android:name="Firework:Checksum" android:value="true" />

3. SDK Initialization Changes

Remove the below initialization code required for v5, which must be added in your app's application class
FwSDK.initialize(this, clientId, userId, object : FwSDK.SdkStatusListener {
override fun currentStatus(status: SdkStatus, extra: String) {
Log.v("SdkStatusLog", "$status -> $extra " )
when(status) {
SdkStatus.Initialized -> {
Log.v("SdkStatusLog","Firework SDK Initialized");
Instead, Initialize our v6 SDK as below in the onCreate() of Application class
// build Firework Android SDK v6 configuration
val config = FireworkSdkConfig.Builder(this)
.clientId(FW_CLIENT_ID) // Client OAUTH Id
.userId("example app user ID") // User Id in your eco-system
.imageLoader(GlideImageLoaderFactory.createInstance()) // glide, picasso, or your ImageLoader implementation
// initialize Firework Android SDK v6

4. Updating Video Feed Layout Components

Update the video feed view component used in layout files. Change the following used in v5
To below VideoFeedView for v6
Similarly refer below pages for other types of feed layouts in v6.

5. Video Feed Configurations

In v6, video feed configurations can be done as attributes in FWVideoFeedView in XML layout or using ViewOptions builder in Java/Kotlin Classes. Refer below page for more details
Main changes in v6 for Video Feed Configurations compared to v5 are:
  1. 1.
    Display/Hide the Video Title(Caption) - change from app:showTitle="true" to app:fw_showFeedTitle="true"
  2. 2.
    Update feed title position to app:fw_feedTitlePosition
  3. 3.
    Styling the title text is not using a style defined in themes file. Instead it can be configured using attributes for the VideoFeedView as defined in above linked page
  4. 4.
    Styling the thumbnail image style for corner radius is also now using attributes in FwVideoFeedView instead of style definition in theme file
  5. 5.
    Not supported currently in v6
    1. 1.
      Custom Layouts
    2. 2.
      Feed item click listener
  6. 6.
    New Feed Configurations available in v6
    1. 1.
      Column Count for Grid View
    2. 2.
      Feed Background Color
    3. 3.
      Item Spacing for spacing between feed items
    4. 4.
      Enable or Disable Ads on Backward Swipe
    5. 5.
      Number of lines of the title text
    6. 6.
      Display or Hide Play icon on thumbnails
    7. 7.
      Ad badge background color
    8. 8.
      Ad badge text color
    9. 9.
      Ad Label

6. Video Player

All the Video player properties supported in v5 are also supported in v6. But the implementation is a bit different as it is along with FwVideoFeedView properties.
So you will need to remove the VideoPlayerProperties initialization part of v5 and then add the configuration using view properties. Refer to the specifics of each Video Player Property as documented in the below link for v6.
Another change is that ad badge styling(done as style definitions in v5) can also be defined using FwVideoFeedView properties
Launching the Video player with an encoded video share link or playlist as the source is also not supported currently.
Add to Cart Button styling in v6 is as follows
<resources xmlns:tools="">
<style name="FwShoppingAddToCartButtonStyle" parent="Widget.MaterialComponents.Button.TextButton">
<item name="android:backgroundTint">@color/white</item>
<item name="android:textColor">@color/blue</item>
<item name="android:textSize">@dimen/16sp</item>
<item name="android:theme">@style/Theme.MaterialComponents.Light</item>
<item name="shapeAppearanceOverlay">@style/FwBayaAddToCartButtonShapeAppearance</item>
<style name="FwShoppingAddToCartButtonShapeAppearance">
<item name="cornerFamily">rounded</item>
<item name="cornerSizeTopLeft">6dp</item>
<item name="cornerSizeBottomLeft">6dp</item>
<item name="cornerSizeBottomRight">6dp</item>
<item name="cornerSizeTopRight">6dp</item>
Add to CTA Button styling in v6 is as follows
<resources xmlns:tools="">
<style name="FwCtaButtonStyle" parent="FwCtaButtonParentStyle">
<item name="android:backgroundTint">@color/fw_cta_bg_bluelake</item>
<item name="android:textColor">@color/white</item>
<item name="android:fontFamily">sans-serif</item>
<item name="shapeAppearanceOverlay">@style/FwCtaButtonShapeAppearance</item>
<style name="FwCtaButtonShapeAppearance">
<item name="cornerFamily">rounded</item>
<item name="cornerSize">@dimen/fw_cta__button_size_half</item>

7. CTA Click Handling

If CTA click handler is not implemented by the host application, the default behaviour in v6 is to open the link in the default browser of the device, while in v5 it will open in a webview within the app.
Refer this page for implementation of CTA click handler in v6.
If you have implemented CTA click handling in v5, you can remove the below handler
//Return true if you have handled the event and do not want SDK to handle it and false when you want SDK to handle the ctaClicked event.
FwSDK.ctaClickHandler = object : FwSDK.CtaClickHandler {
override fun ctaClicked(label: String, actionUrl: String?): Boolean {
return true
and instead, add the below handler and copy the custom navigation logic within this. There is more information provided as part of the feedElementAnalyticsData returned in v6. Refer to below code.
// Make sure to call this after init phase
FireworkSdk.setCtaButtonClickHandler { label, actionUrl, feedElementAnalyticsData ->
// feedElementAnalyticsData has these values
// val autoplay: Boolean,
// val badge: String,
// val caption: String,
// val duration: Long,
// val hashtags: List<String>,
// val hasCta: Boolean,
// val height: Int,
// val width: Int,
// val videoId: String,
// val progress: Int,
// val playlistId: String,
// val channelId: String,
// val feedType: String,
startActivity(context, ProductActivity:class)
Log.i("XXXX-cta", "$label $actionUrl $feedElementAnalyticsData")

8. Analytics - Event Listener Updates

We have improved analytics events coverage in v6 though there are differences in the way it is implemented. Refer the analytics page below for detailed information.
v5 Event
v6 Equivalent
No separate event for this, but can be recorded based on other events like OnPlayingChanged or OnPrepared or OnProgress
First **** trigger of OnProgress
First **** trigger of OnProgress with isAd boolean true in event data
OnEnded event with isAd = true in event data
This can be logged in CtaButtonClickHandler **** as all the required data is provided along with feedElementAnalyticsData
This can be logged in ShareButtonClickListener **** as all the required data is provided along with feedElementAnalyticsData
OnError with isAd = true
The event data is different from v5 and it provides the following values as part of Playback Lifecycle Observer
  • id: String
  • videoDuration: Long
  • variant: String
  • externalVastConfigFileUrl: String
  • uri: String
  • title: String
  • triggers: List
  • subtitles: List
  • clip: Clip
  • adTagUri: String
  • isAd: Boolean
  • isImaAd: Boolean
Below are the missing information in event data on v6
  • hashtags
  • has_cta
  • height
  • width
  • playlistId
  • channelId
  • feedType
Progress is not part of event data in v6, but triggered as a separate event every 1000 milliseconds

9. Updating Shopping Interfaces

Shopping Interfaces in v6 are much more advanced and you can customize the Shopping cart behaviour too. If you have currently implemented Shopping interfaces in v5, you can go ahead and remove the Baya.cartInterface and Baya.productInterface implementations first while saving the product hydration or cart update logic for your app. This will be needed for adding to the new interfaces provided in v6.
Refer to the below page for detailed implementation information on Shoppable videos on v6