Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion app/.gitignore
Original file line number Diff line number Diff line change
@@ -1 +1 @@
/build
/build
4 changes: 4 additions & 0 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -73,4 +73,8 @@ dependencies {
implementation libs.yospace

implementation project(':connectors:uplynk')

implementation fileTree(dir: './libs/AdScriptApiClient_v1.0.10.aar', include: ['*.aar', '*.jar'], exclude: [])
implementation project(':connectors:analytics:adscript')

}
1 change: 1 addition & 0 deletions app/libs/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
*.aar
25 changes: 25 additions & 0 deletions app/src/main/java/com/theoplayer/android/connector/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import androidx.compose.ui.window.Dialog
import com.nad.adscriptapiclient.AdScriptDataObject
import com.theoplayer.android.api.THEOplayerConfig
import com.theoplayer.android.api.THEOplayerView
import com.theoplayer.android.api.ads.LinearAd
Expand All @@ -44,6 +45,8 @@ import com.theoplayer.android.api.event.ads.AdsEventTypes
import com.theoplayer.android.api.event.ads.SingleAdEvent
import com.theoplayer.android.api.source.PlaybackPipeline
import com.theoplayer.android.api.source.SourceDescription
import com.theoplayer.android.connector.analytics.adscript.AdscriptConfiguration
import com.theoplayer.android.connector.analytics.adscript.AdscriptConnector
import com.theoplayer.android.connector.analytics.comscore.ComscoreConfiguration
import com.theoplayer.android.connector.analytics.comscore.ComscoreConnector
import com.theoplayer.android.connector.analytics.comscore.ComscoreMediaType
Expand Down Expand Up @@ -73,6 +76,7 @@ class MainActivity : ComponentActivity() {
private lateinit var nielsenConnector: NielsenConnector
private lateinit var comscoreConnector: ComscoreConnector
private lateinit var yospaceConnector: YospaceConnector
private lateinit var adscriptConnector: AdscriptConnector
private lateinit var uplynkConnector: UplynkConnector

override fun onCreate(savedInstanceState: Bundle?) {
Expand All @@ -83,6 +87,7 @@ class MainActivity : ComponentActivity() {
setupConviva()
setupComscore()
setupNielsen()
setupAdscript()
setupYospace()
setupUplynk()
setupAdListeners()
Expand Down Expand Up @@ -189,6 +194,26 @@ class MainActivity : ComponentActivity() {
nielsenConnector = NielsenConnector(applicationContext, theoplayerView.player, appId, true)
}

private fun setupAdscript() {
val config = AdscriptConfiguration(implementationId = "exampleadscript", debug = true)
val metadata = AdScriptDataObject().apply {
set(AdScriptDataObject.FIELD_assetId, "bbb-example")
set(AdScriptDataObject.FIELD_type, AdScriptDataObject.OBJ_TYPE_content)
set(AdScriptDataObject.FIELD_program, "animation")
set(AdScriptDataObject.FIELD_title, "Big Buck Bunny")
set(AdScriptDataObject.FIELD_crossId, "1234")
set(AdScriptDataObject.FIELD_length, "596000")
set(AdScriptDataObject.FIELD_livestream, "0")
set(AdScriptDataObject.FIELD_attribute, AdScriptDataObject.ATTRIBUTE_RegularProgram)
}
adscriptConnector = AdscriptConnector(
activity = this,
playerView = theoplayerView,
configuration = config,
contentMetadata = metadata,
adProcessor = null)
}

private fun setupYospace() {
yospaceConnector = YospaceConnector(theoplayerView)
}
Expand Down
2 changes: 2 additions & 0 deletions connectors/analytics/adscript/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
/build
/libs
46 changes: 46 additions & 0 deletions connectors/analytics/adscript/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
# Adscript Connector

The Adscript connector provides a [Nielsen Adscript](https://adscript.admosphere.cz/) integration for
the THEOplayer Android SDK.

## Prerequisites

The Adscript connector requires downloading the private
[AdScript client library](https://adscript.admosphere.cz/download/AdScriptApiClient_v1.0.10.aar.gz)
into the app's `libs/` folder. Decompress it and pass the SDK location to the connector
by setting the `adscriptSdkDir` in your app's `gradle.properties` file:

```bash
# Location of the adscript SDK
adscriptSdkDir=./app/libs/
```

## Usage

Create config and metadata objects, and pass them when building the `AdscriptConnector` instance.

```kotlin
val config = AdscriptConfiguration(implementationId = "exampleadscript", debug = true)
val metadata = AdScriptDataObject().apply {
set(AdScriptDataObject.FIELD_assetId, "bbb-example")
set(AdScriptDataObject.FIELD_type, AdScriptDataObject.OBJ_TYPE_content)
set(AdScriptDataObject.FIELD_program, "animation")
set(AdScriptDataObject.FIELD_title, "Big Buck Bunny")
set(AdScriptDataObject.FIELD_crossId, "1234")
set(AdScriptDataObject.FIELD_length, "596000")
set(AdScriptDataObject.FIELD_livestream, "0")
set(AdScriptDataObject.FIELD_attribute, AdScriptDataObject.ATTRIBUTE_RegularProgram)
}
adscriptConnector = AdscriptConnector(
activity = this,
playerView = theoplayerView,
configuration = config,
contentMetadata = metadata,
adProcessor = null)
```

The session needs to be started every time the app resumes, so in `onResume` add:

```kotlin
adscriptConnector.sessionStart()
```
71 changes: 71 additions & 0 deletions connectors/analytics/adscript/build.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
import java.util.zip.GZIPInputStream

plugins {
alias(libs.plugins.android.library)
alias(libs.plugins.kotlin.android)
}

android {
namespace 'com.theoplayer.android.connector.analytics.adscript'
compileSdk 35

defaultConfig {
minSdk 21
targetSdk 35
versionCode 1
versionName "1.0"

}

buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_11
targetCompatibility JavaVersion.VERSION_11
}
kotlinOptions {
jvmTarget = '11'
}
}

// The adscript SDK location should be set by the app and passed in a adscriptSdkDir property.
def aarFileName = 'AdScriptApiClient_v1.0.10.aar'
def adscriptSdkDir = rootProject.properties['adscriptSdkDir']
if (!adscriptSdkDir) {
logger.warn("⚠️ WARNING: adscriptSdkDir not set.")
} else if (!rootProject.file(adscriptSdkDir).exists()) {
logger.warn("⚠️ WARNING: adscriptSdkDir does not exist at: ${adscriptSdkDir}")
} else {
def aarFile = new File(adscriptSdkDir, aarFileName)

// The Adscript aar file is typically provided as .gz, check if we still need to extract.
def gzFile = new File("${aarFile}.gz")
if (!aarFile.exists() && gzFile.exists()) {
new FileInputStream(gzFile).withCloseable { fis ->
new GZIPInputStream(fis).withCloseable { gis ->
new FileOutputStream(aarFile).withCloseable { fos ->
fos << gis
}
}
}
}
dependencies {
compileOnly fileTree(dir: "${rootProject.file(adscriptSdkDir)}/$aarFileName", include: ['*.aar', '*.jar'], exclude: [])
}
}

dependencies {
compileOnly "com.theoplayer.theoplayer-sdk-android:core:$sdkVersion"
compileOnly "com.theoplayer.theoplayer-sdk-android:integration-ads-ima:$sdkVersion"
implementation "com.google.android.gms:play-services-ads-identifier:17.0.1"
implementation libs.androidx.core.ktx
implementation libs.androidx.appcompat
implementation libs.androidx.lifecycle.process
testImplementation libs.junit
androidTestImplementation libs.androidx.test.ext.junit
androidTestImplementation libs.androidx.test.espresso.core
}
21 changes: 21 additions & 0 deletions connectors/analytics/adscript/proguard-rules.pro
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html

# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}

# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable

# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile
3 changes: 3 additions & 0 deletions connectors/analytics/adscript/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
</manifest>
Loading