Research and integration of google ima ads sdk to play ads in PlayerActivity

This commit is contained in:
2024-09-12 20:36:16 +05:30
parent d4b0d3dd14
commit cbab2ee805
3 changed files with 96 additions and 31 deletions

View File

@@ -56,66 +56,66 @@ ext.jwPlayerVersion = '4.17.0'
ext.exoplayerVersion = '1.3.1'
dependencies {
implementation 'com.googlecode.libphonenumber:libphonenumber:8.12.32'
implementation libs.libphonenumber
implementation "com.facebook.shimmer:shimmer:0.5.0"
implementation libs.shimmer
implementation "com.airbnb.android:lottie:6.4.0"
implementation "androidx.core:core-splashscreen:1.0.1"
implementation libs.lottie
implementation libs.androidx.core.splashscreen
implementation 'com.google.android.flexbox:flexbox:3.0.0'
implementation libs.flexbox
implementation 'com.github.bumptech.glide:glide:4.16.0'
implementation libs.glide
// dynamics text sizes
implementation 'com.intuit.ssp:ssp-android:1.1.1'
implementation libs.ssp.android
// dynamic sizes
implementation 'com.intuit.sdp:sdp-android:1.1.1'
implementation libs.sdp.android
// retrofit
def retrofit_version = "2.11.0"
implementation "com.squareup.retrofit2:retrofit:$retrofit_version"
implementation "com.squareup.retrofit2:converter-gson:$retrofit_version"
implementation("com.squareup.okhttp3:logging-interceptor:4.12.0")
implementation libs.retrofit
implementation libs.converter.gson
implementation(libs.logging.interceptor)
def lifecycle_version = "2.7.0"
// ViewModel
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version"
implementation("androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version")
implementation libs.androidx.lifecycle.viewmodel.ktx
implementation(libs.androidx.lifecycle.livedata.ktx)
// circle image view
implementation 'de.hdodenhof:circleimageview:3.1.0'
implementation libs.circleimageview
// jwplayer
implementation "com.jwplayer:jwplayer-core:$jwPlayerVersion"
implementation "com.jwplayer:jwplayer-common:$jwPlayerVersion"
implementation libs.jwplayer.core
implementation libs.jwplayer.common
implementation libs.jwplayer.ima
implementation libs.interactivemedia
implementation libs.play.services.ads.identifier
// media player 3
def media3_version = "1.3.1"
implementation "androidx.media3:media3-exoplayer:$media3_version"
implementation libs.androidx.media3.exoplayer
// For DASH playback support with ExoPlayer
implementation "androidx.media3:media3-exoplayer-dash:$media3_version"
implementation libs.androidx.media3.exoplayer.dash
// For HLS playback support with ExoPlayer
implementation "androidx.media3:media3-exoplayer-hls:$media3_version"
implementation libs.androidx.media3.exoplayer.hls
// For SmoothStreaming playback support with ExoPlayer
implementation "androidx.media3:media3-exoplayer-smoothstreaming:$media3_version"
implementation libs.androidx.media3.exoplayer.smoothstreaming
// Common functionality for reading and writing media containers
implementation "androidx.media3:media3-container:$media3_version"
implementation libs.androidx.media3.container
// Common functionality for media database components
implementation "androidx.media3:media3-database:$media3_version"
implementation libs.androidx.media3.database
// Common functionality for media decoders
implementation "androidx.media3:media3-decoder:$media3_version"
implementation libs.androidx.media3.decoder
// Common functionality for loading data
implementation "androidx.media3:media3-datasource:$media3_version"
implementation libs.androidx.media3.datasource
// Common functionality used across multiple media libraries
implementation "androidx.media3:media3-common:$media3_version"
implementation libs.androidx.media3.common
// For extracting data from media containers
implementation "androidx.media3:media3-extractor:$media3_version"
implementation libs.androidx.media3.extractor
// For building media playback UIs
implementation "androidx.media3:media3-ui:$media3_version"
implementation libs.androidx.media3.ui
// audio mixer for karaoke
implementation("com.github.ZeroOneZeroR:android_audio_mixer:v1.1")
implementation(libs.android.audio.mixer)
// one-signal
implementation(libs.onesignal)

View File

@@ -15,9 +15,11 @@ import com.jwplayer.pub.api.JWPlayer
import com.jwplayer.pub.api.PauseReason
import com.jwplayer.pub.api.PlayReason
import com.jwplayer.pub.api.configuration.PlayerConfig
import com.jwplayer.pub.api.configuration.ads.ima.ImaAdvertisingConfig
import com.jwplayer.pub.api.events.EventType
import com.jwplayer.pub.api.events.listeners.VideoPlayerEvents
import com.jwplayer.pub.api.fullscreen.FullscreenHandler
import com.jwplayer.pub.api.media.ads.AdBreak
import com.woka.database.helpers.ClicksHelper
import com.woka.database.models.ContentType
import com.woka.databinding.ActivityPlayerBinding
@@ -30,6 +32,7 @@ import com.woka.utils.WokaBaseActivity
import com.woka.utils.hide
import com.woka.utils.show
private const val TAG = "PlayerActivity_TAG"
class PlayerActivity : WokaBaseActivity(), FullscreenHandler {
@@ -166,8 +169,22 @@ class PlayerActivity : WokaBaseActivity(), FullscreenHandler {
private fun setUpPlayer(){
player = binding.playerView.getPlayer(this)
val adSchedule = mutableListOf<AdBreak>()
val adBreak = AdBreak.Builder()
.tag("https://pubads.g.doubleclick.net/gampad/ads?iu=/21775744923/external/single_preroll_skippable&sz=640x480&ciu_szs=300x250%2C728x90&gdfp_req=1&output=vast&unviewed_position_start=1&env=vp&impl=s&correlator=")
.offset("25%")
.build()
adSchedule.add(adBreak)
val imaAdvertising = ImaAdvertisingConfig.Builder()
.schedule(adSchedule)
.build()
config = PlayerConfig.Builder()
.playlist(videoPlayList?.playlist)
.advertisingConfig(imaAdvertising)
.build()
// to keep up the screen om when video is being played

View File

@@ -1,19 +1,33 @@
[versions]
agp = "8.3.0"
android_audio_mixer = "v1.1"
circleimageview = "3.1.0"
coreSplashscreen = "1.0.1"
glide = "4.16.0"
flexbox = "3.0.0"
interactivemedia = "3.35.0"
jwPlayerVersion = "4.17.0"
kotlin = "2.0.0"
coreKtx = "1.12.0"
junit = "4.13.2"
junitVersion = "1.1.5"
espressoCore = "3.5.1"
appcompat = "1.6.1"
libphonenumber = "8.12.32"
lifecycleViewmodelKtx = "2.7.0"
loggingInterceptor = "4.12.0"
lottie = "6.4.0"
material = "1.11.0"
activity = "1.8.0"
constraintlayout = "2.1.4"
media3Exoplayer = "1.3.1"
navigationFragmentKtx = "2.7.7"
navigationUiKtx = "2.7.7"
navigationSafeArgs = "2.7.7"
onesignal = "5.1.20"
playServicesAds = "23.3.0"
playServicesAdsIdentifier = "18.1.0"
retrofit = "2.11.0"
roomKtx = "2.6.1"
roomRuntime = "2.6.1"
ksp = "2.0.0-1.0.24"
@@ -22,14 +36,43 @@ firebaseAnalytics = "22.0.2"
firebasePerf = "21.0.1"
gradle = "8.3.0"
perfPlugin = "1.4.2"
sdpAndroid = "1.1.1"
shimmer = "0.5.0"
sspAndroid = "1.1.1"
[libraries]
android_audio_mixer = { module = "com.github.ZeroOneZeroR:android_audio_mixer", version.ref = "android_audio_mixer" }
androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" }
androidx-core-splashscreen = { module = "androidx.core:core-splashscreen", version.ref = "coreSplashscreen" }
androidx-lifecycle-livedata-ktx = { module = "androidx.lifecycle:lifecycle-livedata-ktx", version.ref = "lifecycleViewmodelKtx" }
androidx-lifecycle-viewmodel-ktx = { module = "androidx.lifecycle:lifecycle-viewmodel-ktx", version.ref = "lifecycleViewmodelKtx" }
androidx-media3-common = { module = "androidx.media3:media3-common", version.ref = "media3Exoplayer" }
androidx-media3-container = { module = "androidx.media3:media3-container", version.ref = "media3Exoplayer" }
androidx-media3-decoder = { module = "androidx.media3:media3-decoder", version.ref = "media3Exoplayer" }
androidx-media3-database = { module = "androidx.media3:media3-database", version.ref = "media3Exoplayer" }
androidx-media3-datasource = { module = "androidx.media3:media3-datasource", version.ref = "media3Exoplayer" }
androidx-media3-exoplayer-dash = { module = "androidx.media3:media3-exoplayer-dash", version.ref = "media3Exoplayer" }
androidx-media3-exoplayer = { module = "androidx.media3:media3-exoplayer", version.ref = "media3Exoplayer" }
androidx-media3-exoplayer-hls = { module = "androidx.media3:media3-exoplayer-hls", version.ref = "media3Exoplayer" }
androidx-media3-exoplayer-smoothstreaming = { module = "androidx.media3:media3-exoplayer-smoothstreaming", version.ref = "media3Exoplayer" }
androidx-media3-extractor = { module = "androidx.media3:media3-extractor", version.ref = "media3Exoplayer" }
androidx-media3-ui = { module = "androidx.media3:media3-ui", version.ref = "media3Exoplayer" }
androidx-room-runtime = { module = "androidx.room:room-runtime", version.ref = "roomRuntime" }
circleimageview = { module = "de.hdodenhof:circleimageview", version.ref = "circleimageview" }
converter-gson = { module = "com.squareup.retrofit2:converter-gson", version.ref = "retrofit" }
glide = { module = "com.github.bumptech.glide:glide", version.ref = "glide" }
flexbox = { module = "com.google.android.flexbox:flexbox", version.ref = "flexbox" }
interactivemedia = { module = "com.google.ads.interactivemedia.v3:interactivemedia", version.ref = "interactivemedia" }
junit = { group = "junit", name = "junit", version.ref = "junit" }
androidx-junit = { group = "androidx.test.ext", name = "junit", version.ref = "junitVersion" }
androidx-espresso-core = { group = "androidx.test.espresso", name = "espresso-core", version.ref = "espressoCore" }
androidx-appcompat = { group = "androidx.appcompat", name = "appcompat", version.ref = "appcompat" }
jwplayer-common = { module = "com.jwplayer:jwplayer-common", version.ref = "jwPlayerVersion" }
jwplayer-core = { module = "com.jwplayer:jwplayer-core", version.ref = "jwPlayerVersion" }
jwplayer-ima = { module = "com.jwplayer:jwplayer-ima", version.ref = "jwPlayerVersion" }
libphonenumber = { module = "com.googlecode.libphonenumber:libphonenumber", version.ref = "libphonenumber" }
logging-interceptor = { module = "com.squareup.okhttp3:logging-interceptor", version.ref = "loggingInterceptor" }
lottie = { module = "com.airbnb.android:lottie", version.ref = "lottie" }
material = { group = "com.google.android.material", name = "material", version.ref = "material" }
androidx-activity = { group = "androidx.activity", name = "activity", version.ref = "activity" }
androidx-constraintlayout = { group = "androidx.constraintlayout", name = "constraintlayout", version.ref = "constraintlayout" }
@@ -37,12 +80,17 @@ androidx-navigation-fragment-ktx = { group = "androidx.navigation", name = "navi
androidx-navigation-ui-ktx = { group = "androidx.navigation", name = "navigation-ui-ktx", version.ref = "navigationUiKtx" }
onesignal = { module = "com.onesignal:OneSignal", version.ref = "onesignal" }
play-services-ads = { module = "com.google.android.gms:play-services-ads", version.ref = "playServicesAds" }
play-services-ads-identifier = { module = "com.google.android.gms:play-services-ads-identifier", version.ref = "playServicesAdsIdentifier" }
retrofit = { module = "com.squareup.retrofit2:retrofit", version.ref = "retrofit" }
room-ktx = { module = "androidx.room:room-ktx", version.ref = "roomKtx" }
google-services = { group = "com.google.gms", name = "google-services", version.ref = "googleServices" }
firebase-analytics = { group = "com.google.firebase", name = "firebase-analytics", version.ref = "firebaseAnalytics" }
firebase-perf = { group = "com.google.firebase", name = "firebase-perf", version.ref = "firebasePerf" }
gradle = { group = "com.android.tools.build", name = "gradle", version.ref = "gradle" }
perf-plugin = { group = "com.google.firebase", name = "perf-plugin", version.ref = "perfPlugin" }
sdp-android = { module = "com.intuit.sdp:sdp-android", version.ref = "sdpAndroid" }
shimmer = { module = "com.facebook.shimmer:shimmer", version.ref = "shimmer" }
ssp-android = { module = "com.intuit.ssp:ssp-android", version.ref = "sspAndroid" }
[plugins]
androidApplication = { id = "com.android.application", version.ref = "agp" }