Ad tag testing for PlayerActivity.

Added ads in new screen as following:

Shop, MyListFragment.

Updated ad unit for every screen.

Added logic to show or not show the google ads in all new and existing screens.
This commit is contained in:
2024-09-25 20:51:00 +05:30
parent 898dfdf42f
commit 2aab254faf
16 changed files with 183 additions and 63 deletions

View File

@@ -1,5 +1,11 @@
package com.woka.googleads
// splash fragment
const val SPLASH = "ca-app-pub-5699008063638916/6110095586"
// Home2Fragment
const val MORE_ACTIVITY = "ca-app-pub-5699008063638916/6110095586"
// Home2Fragment
const val HOME_THEME_2_BANNER_AD = "ca-app-pub-5699008063638916/6110095586"
@@ -18,4 +24,19 @@ const val AUDIO_BOOKS_BANNER_AD = "ca-app-pub-5699008063638916/6110095586"
// GAME
const val GAME_TRAILER_AD = "ca-app-pub-5699008063638916/6110095586"
const val GAME_BANNER_AD = "ca-app-pub-5699008063638916/6110095586"
const val GAME_INTERSTITIAL_AD = "ca-app-pub-5699008063638916/6300144761"
const val GAME_INTERSTITIAL_AD = "ca-app-pub-5699008063638916/6300144761"
// FM
const val FM = "ca-app-pub-5699008063638916/6110095586"
// karaoke player
const val KARAOKE_PLAYER = "ca-app-pub-5699008063638916/6110095586"
// shop
const val SHOP = "ca-app-pub-5699008063638916/6110095586"
// game player
const val GAME_PLAYER = "ca-app-pub-5699008063638916/6110095586"
// my list
const val MY_LIST = "ca-app-pub-5699008063638916/6110095586"

View File

@@ -17,7 +17,7 @@ private const val TAG = "aditya_loading_interstitial"
class InterstitialAds(private val context: Context) {
companion object{
private const val AD_TIME_INTERVAL_MILLIS = 30_60_000L // 30 mins
private const val AD_TIME_INTERVAL_MILLIS = 30 * 60_000L // 30 mins
}
private var interstitialAd: InterstitialAd? = null
@@ -53,7 +53,7 @@ class InterstitialAds(private val context: Context) {
fun showNewAd(activity: Activity, callBack: (() -> Unit)){
if (shallShowAd().not()){
Log.d(TAG, "showNewAd: ${60 - ((System.currentTimeMillis() - lastTimeAdShown)/1000)} seconds left for next ad")
Log.d(TAG, "showNewAd: ${(AD_TIME_INTERVAL_MILLIS - (System.currentTimeMillis() - lastTimeAdShown))/1000} seconds left for next ad")
callBack()
return

View File

@@ -21,15 +21,21 @@ import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.SimpleItemAnimator
import com.google.android.gms.ads.AdRequest
import com.google.android.gms.ads.AdSize
import com.google.android.gms.ads.AdView
import com.jwplayer.pub.api.media.playlists.PlaylistItem
import com.woka.R
import com.woka.WokaApp.Companion.userPrefs
import com.woka.advertisements.AdsRepository
import com.woka.advertisements.models.ForPage
import com.woka.audiobooks.AudioBookRepository
import com.woka.audiobooks.models.audiodata.AudioBookData
import com.woka.database.helpers.ClicksHelper
import com.woka.database.models.ContentType
import com.woka.databinding.DialogModuleShowerBinding
import com.woka.databinding.FragmentMyListBinding
import com.woka.googleads.FM
import com.woka.home.mylist.MyListRepository
import com.woka.home.mylist.adapters.FavAudioAdapter
import com.woka.home.mylist.adapters.FavGamesAdapter
@@ -137,6 +143,7 @@ class MyListFragment : Fragment() {
if (userPrefs?.userType != UserType.GUEST) {
loadFavoriteList()
loadGoogleAds()
} else {
binding.noSignInView.show()
}
@@ -319,6 +326,32 @@ class MyListFragment : Fragment() {
}
}
private fun loadGoogleAds() {
lifecycleScope.launch {
AdsRepository.getADs()?.let { ads ->
val fmAds = ads.filter { it.slug == ForPage.FM.value }
if (fmAds.isNotEmpty()){
fmAds.first().google_ad?.let {
val adView = AdView(requireContext())
adView.adUnitId = FM
adView.setAdSize(AdSize(AdSize.FULL_WIDTH, 60))
binding.adsContainer.removeAllViews()
binding.adsContainer.addView(adView)
adView.loadAd(
AdRequest.Builder()
.build()
)
}
}
}
}
}
private fun loadFavoriteList() {
lifecycleScope.launch {
binding.apply {

View File

@@ -21,7 +21,7 @@ import com.woka.advertisements.models.ForPage
import com.woka.database.helpers.ClicksHelper
import com.woka.database.models.ContentType
import com.woka.databinding.ActivityFmactivityBinding
import com.woka.googleads.GAME_BANNER_AD
import com.woka.googleads.FM
import com.woka.userdata.UserRepository
import com.woka.userdata.userDataModels.VideoViewRequestData
import com.woka.utils.TAG
@@ -217,7 +217,7 @@ class FMActivity : WokaBaseActivity() {
fmAds.first().google_ad?.let {
val adView = AdView(this@FMActivity)
adView.adUnitId = GAME_BANNER_AD
adView.adUnitId = FM
adView.setAdSize(AdSize(AdSize.FULL_WIDTH, 60))
binding.adsContainer.removeAllViews()

View File

@@ -7,7 +7,6 @@ import android.graphics.drawable.ColorDrawable
import android.graphics.drawable.InsetDrawable
import android.os.Bundle
import android.text.Html
import android.transition.Fade
import android.view.WindowManager
import androidx.activity.enableEdgeToEdge
import androidx.core.view.ViewCompat
@@ -24,7 +23,7 @@ import com.woka.database.helpers.ClicksHelper
import com.woka.database.models.ContentType
import com.woka.databinding.ActivityMoreHomeBinding
import com.woka.databinding.DialogBlogsBinding
import com.woka.googleads.HOME_THEME_2_BANNER_AD
import com.woka.googleads.MORE_ACTIVITY
import com.woka.modules.blogs.BlogsAdapter
import com.woka.modules.blogs.BlogsRepository
import com.woka.modules.blogs.models.Blog
@@ -95,7 +94,7 @@ class MoreHomeActivity : WokaBaseActivity() {
private fun loadGoogleAds() {
// ad container 1
val adView1 = AdView(this)
adView1.adUnitId = HOME_THEME_2_BANNER_AD
adView1.adUnitId = MORE_ACTIVITY
adView1.setAdSize(AdSize(AdSize.FULL_WIDTH, 200))
binding.adsContainer.removeAllViews()

View File

@@ -41,7 +41,7 @@ import com.woka.advertisements.models.ForPage
import com.woka.database.helpers.ClicksHelper
import com.woka.database.models.ContentType
import com.woka.databinding.ActivityKaraokePlayerrBinding
import com.woka.googleads.GAME_BANNER_AD
import com.woka.googleads.KARAOKE_PLAYER
import com.woka.players.models.PlayBackState
import com.woka.userdata.UserRepository
import com.woka.userdata.userDataModels.VideoViewRequestData
@@ -496,7 +496,7 @@ class KaraokePlayerActivity : WokaBaseActivity() {
fmAds.first().google_ad?.let {
val adView = AdView(this@KaraokePlayerActivity)
adView.adUnitId = GAME_BANNER_AD
adView.adUnitId = KARAOKE_PLAYER
adView.setAdSize(AdSize(AdSize.FULL_WIDTH, 100))
binding.adsContainer.removeAllViews()

View File

@@ -3,7 +3,6 @@ package com.woka.onboard.fragments
import android.content.Intent
import android.media.MediaPlayer
import android.os.Bundle
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
@@ -14,16 +13,14 @@ import androidx.lifecycle.Observer
import androidx.lifecycle.lifecycleScope
import androidx.navigation.fragment.FragmentNavigatorExtras
import androidx.navigation.fragment.findNavController
import com.google.android.gms.ads.AdListener
import com.google.android.gms.ads.AdRequest
import com.google.android.gms.ads.AdSize
import com.google.android.gms.ads.AdView
import com.google.android.gms.ads.LoadAdError
import com.woka.BuildConfig
import com.woka.R
import com.woka.WokaApp.Companion.userPrefs
import com.woka.databinding.FragmentSplashBinding
import com.woka.googleads.HOME_THEME_2_BANNER_AD
import com.woka.googleads.SPLASH
import com.woka.home.views.HomeActivity
import com.woka.networking.ApiResult
import com.woka.onboard.models.appupdate.VersionHistoryResponseData
@@ -92,7 +89,7 @@ class SplashFragment : Fragment(), Observer<ApiResult<UserDataResponse>?> {
private fun loadGoogleAds() {
// ad container 1
val adView1 = AdView(requireContext())
adView1.adUnitId = HOME_THEME_2_BANNER_AD
adView1.adUnitId = SPLASH
adView1.setAdSize(AdSize(AdSize.FULL_WIDTH, 100))
binding.adsContainer1.removeAllViews()
@@ -105,7 +102,7 @@ class SplashFragment : Fragment(), Observer<ApiResult<UserDataResponse>?> {
// ad container 2
val adView2 = AdView(requireContext())
adView2.adUnitId = HOME_THEME_2_BANNER_AD
adView2.adUnitId = SPLASH
adView2.setAdSize(AdSize(AdSize.FULL_WIDTH, 100))
binding.adsContainer2.removeAllViews()

View File

@@ -38,7 +38,7 @@ private const val TAG = "PlayerActivity_TAG"
class PlayerActivity : WokaBaseActivity(), FullscreenHandler {
companion object{
companion object {
const val EXTRA_PLAY_LIST = "player_play_list"
const val EXTRA_PLAY_INDEX = "playing_index"
}
@@ -79,11 +79,11 @@ class PlayerActivity : WokaBaseActivity(), FullscreenHandler {
videoPlayList = intent.getParcelableExtra(EXTRA_PLAY_LIST)
playingIndex = intent.getIntExtra(EXTRA_PLAY_INDEX, 0)
networkCallback = object : ConnectivityManager.NetworkCallback(){
networkCallback = object : ConnectivityManager.NetworkCallback() {
override fun onAvailable(network: Network) {
super.onAvailable(network)
runOnUiThread {
if (playbackState == PlayBackState.STOPPED){
if (playbackState == PlayBackState.STOPPED) {
binding.playerView.show()
binding.errorView.hide()
configAndPlay()
@@ -121,10 +121,10 @@ class PlayerActivity : WokaBaseActivity(), FullscreenHandler {
uploadVideoView()
}
private fun uploadVideoView(){
videoPlayList?.videoViewRequestDataList?.let {playlistData ->
if (playingIndex >= 0 && playingIndex < playlistData.size){
with(playlistData[playingIndex]){
private fun uploadVideoView() {
videoPlayList?.videoViewRequestDataList?.let { playlistData ->
if (playingIndex >= 0 && playingIndex < playlistData.size) {
with(playlistData[playingIndex]) {
// user video view
if (playbackStartTime > 0) {
@@ -133,9 +133,9 @@ class PlayerActivity : WokaBaseActivity(), FullscreenHandler {
playbackStartTime = 0
}
val playingDurationInSecs = Math.round(totalPlaybackDuration/1000.0)
val playingDurationInSecs = Math.round(totalPlaybackDuration / 1000.0)
id?.let {id ->
id?.let { id ->
if (id > 0 && playingDurationInSecs > 0) {
UserRepository.userVideoView(
VideoViewRequestData(
@@ -154,7 +154,7 @@ class PlayerActivity : WokaBaseActivity(), FullscreenHandler {
}
}
private fun clickEvents(){
private fun clickEvents() {
binding.apply {
retryBtn.setOnClickListener {
binding.playerView.show()
@@ -170,23 +170,24 @@ class PlayerActivity : WokaBaseActivity(), FullscreenHandler {
}
}
private fun setUpPlayer(){
private fun setUpPlayer() {
player = binding.playerView.getPlayer(this)
val adSchedule = mutableListOf<AdBreak>()
val adBreak1 = AdBreak.Builder()
.tag("https://pubads.g.doubleclick.net/gampad/ads?iu=/23204950200/VideoAd&description_url=https%3A%2F%2Fwokaland.com%2F&tfcd=1&npa=0&sz=480x320%7C640x480&ciu_szs=480x320&min_ad_duration=10000&max_ad_duration=15000&gdfp_req=1&unviewed_position_start=1&output=vast&env=vp&impl=s&correlator=")
.offset("pre")
.build()
adSchedule.add(
AdBreak.Builder()
.tag("https://pubads.g.doubleclick.net/gampad/ads?iu=/23204950200/VideoAd&description_url=https%3A%2F%2Fwokaland.com%2F&tfcd=0&npa=0&ad_type=audio_video&sz=640x480%7C1280x720&gdfp_req=1&unviewed_position_start=1&output=vast&env=vp&impl=s&correlator=")
.offset("pre")
.build()
)
val adBreak2 = AdBreak.Builder()
.tag("https://pubads.g.doubleclick.net/gampad/ads?iu=/23204950200/VideoAd&description_url=https%3A%2F%2Fwokaland.com%2F&tfcd=1&npa=0&sz=480x320%7C640x480&ciu_szs=480x320&min_ad_duration=10000&max_ad_duration=15000&gdfp_req=1&unviewed_position_start=1&output=vast&env=vp&impl=s&correlator=")
.offset("25%")
.build()
adSchedule.add(adBreak1)
adSchedule.add(adBreak2)
adSchedule.add(
AdBreak.Builder()
.tag("https://pubads.g.doubleclick.net/gampad/live/ads?iu=/23204950200/VideoAd&description_url=https%3A%2F%2Fwokaland.com%2F&tfcd=0&npa=0&ad_type=audio_video&sz=640x480%7C1280x720&gdfp_req=1&unviewed_position_start=1&output=vast&env=vp&impl=s&correlator=&nofb=1")
.offset("25%")
.build()
)
val imaAdvertising = ImaAdvertisingConfig.Builder()
.schedule(adSchedule)
@@ -210,9 +211,9 @@ class PlayerActivity : WokaBaseActivity(), FullscreenHandler {
player.playlistItem(playingIndex)
}
private fun addListeners(){
private fun addListeners() {
player.addListener(EventType.PLAY, VideoPlayerEvents.OnPlayListener {
if (seekPosition > 0){
if (seekPosition > 0) {
player.seek(seekPosition)
}
seekPosition = 0.0
@@ -220,10 +221,10 @@ class PlayerActivity : WokaBaseActivity(), FullscreenHandler {
binding.playerView.show()
binding.errorView.hide()
if (it.playReason == PlayReason.INTERACTION){
videoPlayList?.videoViewRequestDataList?.let {playlistData ->
if (playingIndex >= 0 && playingIndex < playlistData.size){
with(playlistData[playingIndex]){
if (it.playReason == PlayReason.INTERACTION) {
videoPlayList?.videoViewRequestDataList?.let { playlistData ->
if (playingIndex >= 0 && playingIndex < playlistData.size) {
with(playlistData[playingIndex]) {
ClicksHelper.upsertClickEvent(
contentType,
id,
@@ -240,10 +241,10 @@ class PlayerActivity : WokaBaseActivity(), FullscreenHandler {
player.addListener(EventType.PAUSE, VideoPlayerEvents.OnPauseListener {
playbackState = PlayBackState.PAUSED
if (it.pauseReason == PauseReason.INTERACTION){
videoPlayList?.videoViewRequestDataList?.let {playlistData ->
if (playingIndex >= 0 && playingIndex < playlistData.size){
with(playlistData[playingIndex]){
if (it.pauseReason == PauseReason.INTERACTION) {
videoPlayList?.videoViewRequestDataList?.let { playlistData ->
if (playingIndex >= 0 && playingIndex < playlistData.size) {
with(playlistData[playingIndex]) {
ClicksHelper.upsertClickEvent(
contentType,
id,
@@ -260,10 +261,10 @@ class PlayerActivity : WokaBaseActivity(), FullscreenHandler {
playbackStartTime = 0
}
Log.d(TAG, "addListeners: PAUSE ${Math.round(totalPlaybackDuration/1000.0)}")
Log.d(TAG, "addListeners: PAUSE ${Math.round(totalPlaybackDuration / 1000.0)}")
})
player.addListener(EventType.ERROR, VideoPlayerEvents.OnErrorListener {
if (player.position != 0.0){
if (player.position != 0.0) {
seekPosition = player.position
}
playbackState = PlayBackState.STOPPED
@@ -278,10 +279,10 @@ class PlayerActivity : WokaBaseActivity(), FullscreenHandler {
})
player.addListener(EventType.PLAYLIST_ITEM, VideoPlayerEvents.OnPlaylistItemListener {
if (playingIndex != it.index){
videoPlayList?.videoViewRequestDataList?.let {playlistData ->
if (playingIndex >= 0 && playingIndex < playlistData.size){
with(playlistData[playingIndex]){
if (playingIndex != it.index) {
videoPlayList?.videoViewRequestDataList?.let { playlistData ->
if (playingIndex >= 0 && playingIndex < playlistData.size) {
with(playlistData[playingIndex]) {
// user video view
if (playbackStartTime > 0) {
@@ -290,9 +291,9 @@ class PlayerActivity : WokaBaseActivity(), FullscreenHandler {
playbackStartTime = 0
}
val playingDurationInSecs = Math.round(totalPlaybackDuration/1000.0)
val playingDurationInSecs = Math.round(totalPlaybackDuration / 1000.0)
id?.let {id ->
id?.let { id ->
if (id > 0 && playingDurationInSecs > 0) {
UserRepository.userVideoView(
VideoViewRequestData(

View File

@@ -16,6 +16,7 @@ import kotlinx.coroutines.launch
class ShopViewModel: ViewModel() {
var onTitleChange: ((String) -> Unit)? = null
var onShowGoogleAd: (() -> Unit)? = null
var singleItemBehaviorDone = false

View File

@@ -8,11 +8,18 @@ import androidx.activity.result.contract.ActivityResultContracts
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.lifecycleScope
import com.google.android.gms.ads.AdRequest
import com.google.android.gms.ads.AdSize
import com.google.android.gms.ads.AdView
import com.woka.R
import com.woka.WokaApp.Companion.userPrefs
import com.woka.advertisements.AdsRepository
import com.woka.advertisements.models.ForPage
import com.woka.database.helpers.ClicksHelper
import com.woka.database.models.ContentType
import com.woka.databinding.ActivityShopBinding
import com.woka.googleads.FM
import com.woka.shop.viewmodels.ShopViewModel
import com.woka.shop.views.CartActivity.Companion.EXTRA_CURRENT_PRODUCT
import com.woka.userPreference.UserType
@@ -20,6 +27,7 @@ import com.woka.utils.NoSignInDialog
import com.woka.utils.WokaBaseActivity
import com.woka.utils.lightStatusBar
import com.woka.utils.setVisibility
import kotlinx.coroutines.launch
class ShopActivity : WokaBaseActivity() {
@@ -110,5 +118,34 @@ class ShopActivity : WokaBaseActivity() {
title.text = it
}
}
viewModel.onShowGoogleAd = {
loadGoogleAds()
}
}
private fun loadGoogleAds() {
lifecycleScope.launch {
AdsRepository.getADs()?.let { ads ->
val fmAds = ads.filter { it.slug == ForPage.FM.value }
if (fmAds.isNotEmpty()){
fmAds.first().google_ad?.let {
val adView = AdView(this@ShopActivity)
adView.adUnitId = FM
adView.setAdSize(AdSize(AdSize.FULL_WIDTH, 60))
binding.adsContainer.removeAllViews()
binding.adsContainer.addView(adView)
adView.loadAd(
AdRequest.Builder()
.build()
)
}
}
}
}
}
}

View File

@@ -155,6 +155,12 @@ class ShopFragment1 : Fragment() {
adLink = adDetails.ad_link
adapter.notifyItemInserted(0)
return@launch
}
superShopAds.first().google_ad?.let {
viewModel.onShowGoogleAd?.invoke()
}
}
}

View File

@@ -20,7 +20,7 @@ import com.woka.advertisements.models.ForPage
import com.woka.database.helpers.ClicksHelper
import com.woka.database.models.ContentType
import com.woka.databinding.ActivityGamePlayerBinding
import com.woka.googleads.GAME_BANNER_AD
import com.woka.googleads.GAME_PLAYER
import com.woka.userdata.UserRepository
import com.woka.userdata.userDataModels.VideoViewRequestData
import com.woka.utils.DecisionDialog
@@ -184,7 +184,7 @@ class GamePlayerActivity : WokaBaseActivity() {
fmAds.first().google_ad?.let {
val adView = AdView(this@GamePlayerActivity)
adView.adUnitId = GAME_BANNER_AD
adView.adUnitId = GAME_PLAYER
adView.setAdSize(AdSize(AdSize.FULL_WIDTH, 60))
binding.adsContainer.removeAllViews()

View File

@@ -33,7 +33,6 @@ import com.woka.databinding.ActivityGamesBinding
import com.woka.databinding.DialogModuleShowerBinding
import com.woka.googleads.GAME_BANNER_AD
import com.woka.googleads.GAME_TRAILER_AD
import com.woka.googleads.HOME_THEME_2_BANNER_AD
import com.woka.networking.ApiResult
import com.woka.userPreference.UserType
import com.woka.utils.NoSignInDialog

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main"
@@ -10,6 +10,7 @@
tools:context=".shop.views.ShopActivity">
<RelativeLayout
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?actionBarSize"
android:background="@android:color/transparent"
@@ -103,10 +104,24 @@
<androidx.fragment.app.FragmentContainerView
android:id="@+id/fc_shop"
android:layout_below="@id/toolbar"
android:layout_above="@id/ads_container"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:defaultNavHost="true"
app:navGraph="@navigation/nav_graph_shop" />
</LinearLayout>
<LinearLayout
android:id="@+id/ads_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:gravity="center"
android:background="@color/orders_bg"
android:layout_alignParentBottom="true"
/>
</RelativeLayout>

View File

@@ -49,7 +49,7 @@
android:layout_height="0dp"
android:background="#D3EFF8"
app:layout_constraintTop_toBottomOf="@id/toolbar"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintBottom_toTopOf="@id/ads_container"
>
<androidx.constraintlayout.widget.Guideline
@@ -479,4 +479,15 @@
</androidx.constraintlayout.widget.ConstraintLayout>
<LinearLayout
android:id="@+id/ads_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:gravity="center"
android:layout_marginBottom="20dp"
app:layout_constraintBottom_toBottomOf="parent"
/>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -5,7 +5,7 @@ circleimageview = "3.1.0"
coreSplashscreen = "1.0.1"
glide = "4.16.0"
flexbox = "3.0.0"
interactivemedia = "3.35.0"
interactivemedia = "3.35.1"
jwPlayerVersion = "4.17.0"
kotlin = "2.0.0"
coreKtx = "1.12.0"