Links

Getting Started

Prerequisites

  • Firework App Id
  • Flutter SDK >=1.20.0
  • Dart SDK >=2.12.0
  • iOS project
    • iOS 12 or greater.
    • Xcode 13 or greater.
    • Swift 5.3 or greater.
  • Android Project
    • JAVA_HOME 1.8 or greater
    • minSdkVersion 21 or greater
    • compileSdkVersion 30 or greater
    • targetSdkVersion 30 or greater

Installation

Installing Firework Flutter SDK requires the following step:
  1. 1.
    Install Flutter plugin package
  2. 2.
    Setup Native project

Install Flutter plugin Package

flutter pub add fw_flutter_sdk:1.5.2

Setup Native Project

iOS

No configuration is required.

Android

  • build.gradle
buildscript {
repositories {
...
jcenter()
maven { url "https://jitpack.io" }
}
dependencies {
// We don’t require Gradle plugin version. But we suggest using 4+.
classpath("com.android.tools.build:gradle:4.0.1")
...
}
}
allprojects {
repositories {
...
jcenter()
maven { url 'https://www.jitpack.io' }
}
}
  • gradle-wrapper.properties
...
# We don’t require Gradle version. But we suggest using 6+.
distributionUrl=https\://services.gradle.org/distributions/gradle-6.9-all.zip
...
  • app/src/.../MainActivity.kt
The MainActivity should extend FlutterFragmentActivity.
class MainActivity: FlutterFragmentActivity()
  • app/build.gradle
...
apply from: 'firework.gradle'
  • New file: app/firework.gradle
android {
dataBinding {
enabled = true
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
packagingOptions {
exclude 'META-INF/DEPENDENCIES'
exclude 'META-INF/LICENSE'
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/license.txt'
exclude 'META-INF/NOTICE'
exclude 'META-INF/NOTICE.txt'
exclude 'META-INF/notice.txt'
exclude 'META-INF/ASL2.0'
exclude("META-INF/*.kotlin_module")
}
}
dependencies {
// ads
implementation 'com.github.loopsocial:AndroidAdsService:v20.0.0'
// implementation 'com.github.loopsocial:AndroidAdsService:v19.5.0'
// will crash on Android 12 API 31 if your targetSdkVersion is 31 and the work-runtime-ktx version smaller than 2.7.0
// Please use the work-runtime-ktx version greater than or equal to 2.7.0 if your targetSdkVersion is 31
// implementation 'androidx.work:work-runtime-ktx:2.7.0'
}
// AAPT: error: resource android:attr/lStar not found
// solution 1: some library may dependent on 1.7.x, you can force it to 1.6.0
// solution 2: upgrade compileSdkVersion and targetSdkVersion to 31
configurations.all {
resolutionStrategy {
force 'androidx.core:core-ktx:1.6.0'
force 'androidx.core:core:1.6.0'
}
}
  • FAQ(frequently asked questions)
    • Gradle build daemon has been stopped: JVM garbage collector thrashing and after running out of JVM memory. Add the following configuration to the file: gradle.properties.
    ...
    org.gradle.jvmargs=-Xmx4g
    • If your Gradle plugin version is larger than com.android.tools.build:gradle:4.1.x. Please set the compileSdkVersion = 31 and targetSdkVersion = 31 . And add the following configuration to the file: src/main/AndroidManifest.xml .
    <manifest>
    ...
    <application>
    ...
    <activity
    android:name=".MainActivity"
    ...
    android:exported="true" // sdk version 31
    >
    ...
    </activity>
    </application>
    </manifest>
    • If you want to use JDK11 and Gradle 7.x. Please do:
      1. 1.
        JAVA_HOME = JDK11 (system env)
      2. 2.
        classpath("com.android.tools.build:gradle:7.x.x") (build.gradle)
      3. 3.
        distributionUrl=https://services.gradle.org/distributions/gradle-7.x-all.zip (gradle-wrapper.properties)
      4. 4.
        And change the following configuration in the file: app/firework.gradle .
    android {
    ...
    compileOptions {
    sourceCompatibility JavaVersion.VERSION_11
    targetCompatibility JavaVersion.VERSION_11
    }
    ...
    }
    • If you met the issue like below:
    > The minCompileSdk (31) specified in a
    dependency's AAR metadata (META-INF/com/android/build/gradle/aar-metadata.properties)
    is greater than this module's compileSdkVersion (android-30).
    Dependency: androidx.lifecycle:lifecycle-viewmodel-ktx:2.4.0.
    Please do:
    configurations.all {
    resolutionStrategy {
    ...
    force 'androidx.work:work-runtime-ktx:2.2.0'
    force 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0'
    }
    }
    Maybe your compileSdkVersion = 30 and targetSdkVersion = 30 , your Gradle is below 6.9-all and the Gradle plugin is com.android.tools.build:gradle:4.1.x .
    • Okhttp issue: If you met the issue like below:
    /data/app/com.thesouledstore-1b4KZ7kSaE_DlLmco_iLxQ==/base.apk!classes5.dex)
    2022-02-25 21:06:33.506 16304-18932/? E/com.newrelic.android: TransactionStateUtil: Attempting to convert network exception java.io.IOException to error code.
    2022-02-25 21:06:33.508 16304-18932/? E/AndroidRuntime: FATAL EXCEPTION: OkHttp Dispatcher
    Process: com.thesouledstore, PID: 16304
    java.lang.NoSuchMethodError: No static method delimiterOffset(Ljava/lang/String;IILjava/lang/String;)I in class Lokhttp3/internal/Util; or its super classes (declaration of 'okhttp3.internal.Util' appears in /data/app/com.thesouledstore-1b4KZ7kSaE_DlLmco_iLxQ==/base.apk!classes5.dex)
    Maybe your okhttp version is 3.x.x . Please do:
    Solution: force the version to your app/firework.gradle file, like below:
    configurations.all {
    resolutionStrategy {
    ...
    force 'com.squareup.okhttp3:okhttp:3.12.12'
    force 'com.squareup.okhttp3:logging-interceptor:3.12.12'
    force 'com.squareup.okhttp3:okhttp-urlconnection:3.12.12'
    }
    }

App Id Configuration

iOS

Include the app ID in your app Info.plist file using the key FireworkVideoAppID .
See the image below:

Android

Include the appid in your app AndroidManifest.xml file, like below:
<application
...
>
<activity .../>
...
// Include the app ID
<meta-data
android:name="Firework:Appid"
android:value="your firework appid" />
</application>

SDK Initialization

import 'package:fw_flutter_sdk/fw_flutter_sdk.dart';
/// Optional: set listener for SDK init
FireworkSDK.getInstance().onSDKInit = (event) {
};
/// It is recommended to call the init method when the application starts,
/// e.g. in the initState method of your AppState.
/// Init method has one optional parameter: userId.
FireworkSDK.getInstance().init();

Video Feed

If you want to integrate a video feed, please follow the instruction here.

Shopping

If you want to integrate video shopping, please follow the instruction here.

Sample Project

We provide a sample project on Github.