diff --git a/Example/PrebidDemoJava/build.gradle b/Example/PrebidDemoJava/build.gradle index d4e3c0c06..5d553bf4d 100644 --- a/Example/PrebidDemoJava/build.gradle +++ b/Example/PrebidDemoJava/build.gradle @@ -84,7 +84,7 @@ dependencies { implementation 'com.google.android.exoplayer:exoplayer-core:2.11.1' implementation 'com.google.android.exoplayer:exoplayer-ui:2.11.1' implementation 'com.google.android.exoplayer:extension-ima:2.11.1' - implementation 'com.android.support:multidex:1.0.3' + implementation 'androidx.multidex:multidex:2.0.0' implementation('com.mopub:mopub-sdk:5.8.0@aar') { transitive = true @@ -92,12 +92,12 @@ dependencies { exclude module: 'moat-mobile-app-kit' // To exclude Moat } - androidTestImplementation 'junit:junit:4.12' - androidTestImplementation 'androidx.test.ext:junit:1.1.0' - androidTestImplementation 'androidx.test:rules:1.1.1' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1' - androidTestImplementation 'androidx.test.espresso:espresso-intents:3.1.1' - androidTestImplementation 'androidx.test.espresso:espresso-web:3.1.1' + androidTestImplementation 'junit:junit:4.13.2' + androidTestImplementation 'androidx.test.ext:junit:1.1.3' + androidTestImplementation 'androidx.test:rules:1.4.0' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' + androidTestImplementation 'androidx.test.espresso:espresso-intents:3.4.0' + androidTestImplementation 'androidx.test.espresso:espresso-web:3.4.0' androidTestImplementation 'com.squareup.okhttp3:mockwebserver:3.2.0' - androidTestImplementation 'org.mockito:mockito-android:2.24.0' + androidTestImplementation 'org.mockito:mockito-android:4.0.0' } diff --git a/Example/PrebidDemoKotlin/build.gradle b/Example/PrebidDemoKotlin/build.gradle index dd658128e..ec0f46665 100644 --- a/Example/PrebidDemoKotlin/build.gradle +++ b/Example/PrebidDemoKotlin/build.gradle @@ -5,12 +5,12 @@ apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' android { - compileSdkVersion 28 - buildToolsVersion "29.0.0" + compileSdkVersion 30 + buildToolsVersion "29.0.2" defaultConfig { applicationId "org.prebid.mobile.prebidkotlindemo" - minSdkVersion 16 - targetSdkVersion 28 + minSdkVersion 19 + targetSdkVersion 30 versionCode 1 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" @@ -22,25 +22,37 @@ android { proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + buildFeatures { + dataBinding true + } } dependencies { - - implementation 'com.android.support:multidex:1.0.3' - implementation project(':PrebidMobile') - implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation project(':PrebidMobile-gamEventHandlers') + implementation project(':PrebidMobile-mopubAdapters') + // Standard libraries implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" - implementation 'androidx.appcompat:appcompat:1.0.0' - implementation 'com.google.android.gms:play-services-ads:20.0.0' - implementation('com.mopub:mopub-sdk:5.4.1@aar') { - transitive = true + implementation 'androidx.appcompat:appcompat:1.3.1' + implementation 'androidx.preference:preference-ktx:1.1.1' + // Advertisement + implementation 'com.google.android.gms:play-services-ads:20.4.0' + implementation('com.mopub:mopub-sdk:5.17.0@aar') { + transitive = true exclude module: 'libAvid-mopub' // To exclude AVID exclude module: 'moat-mobile-app-kit' // To exclude Moat } + // Multidex + implementation 'androidx.multidex:multidex:2.0.0' + + // Tests testImplementation 'junit:junit:4.12' androidTestImplementation 'androidx.test.ext:junit:1.1.1' androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0' diff --git a/Example/PrebidDemoKotlin/src/androidTest/java/org/prebid/mobile/prebidkotlindemo/ExampleInstrumentedTest.kt b/Example/PrebidDemoKotlin/src/androidTest/java/org/prebid/mobile/prebidkotlindemo/ExampleInstrumentedTest.kt index a271e2614..56392f567 100644 --- a/Example/PrebidDemoKotlin/src/androidTest/java/org/prebid/mobile/prebidkotlindemo/ExampleInstrumentedTest.kt +++ b/Example/PrebidDemoKotlin/src/androidTest/java/org/prebid/mobile/prebidkotlindemo/ExampleInstrumentedTest.kt @@ -1,24 +1,16 @@ package org.prebid.mobile.prebidkotlindemo -import androidx.test.platform.app.InstrumentationRegistry -import androidx.test.ext.junit.runners.AndroidJUnit4 - +import android.content.Context +import androidx.test.core.app.ApplicationProvider +import org.junit.Assert.assertEquals import org.junit.Test import org.junit.runner.RunWith -import org.junit.Assert.* - -/** - * Instrumented test, which will execute on an Android device. - * - * See [testing documentation](http://d.android.com/tools/testing). - */ @RunWith(androidx.test.ext.junit.runners.AndroidJUnit4::class) class ExampleInstrumentedTest { @Test fun useAppContext() { - // Context of the app under test. - val appContext = androidx.test.platform.app.InstrumentationRegistry.getTargetContext() - assertEquals("org.prebid.mobile.prebidkotlindemo", appContext.packageName) + val context = ApplicationProvider.getApplicationContext() + assertEquals("org.prebid.mobile.prebidkotlindemo", context.packageName) } } diff --git a/Example/PrebidDemoKotlin/src/main/AndroidManifest.xml b/Example/PrebidDemoKotlin/src/main/AndroidManifest.xml index 58d060126..55ef45319 100644 --- a/Example/PrebidDemoKotlin/src/main/AndroidManifest.xml +++ b/Example/PrebidDemoKotlin/src/main/AndroidManifest.xml @@ -3,14 +3,16 @@ package="org.prebid.mobile.prebidkotlindemo"> - - + + + - + + + - + - + - + + + android:configChanges="keyboardHidden|orientation|screenSize"/> + android:configChanges="keyboardHidden|orientation|screenSize"/> + android:configChanges="keyboardHidden|orientation|screenSize"/> + android:configChanges="keyboardHidden|orientation|screenSize"/> + android:configChanges="keyboardHidden|orientation|screenSize"/> + \ No newline at end of file diff --git a/Example/PrebidDemoKotlin/src/main/java/org/prebid/mobile/prebidkotlindemo/AdType.kt b/Example/PrebidDemoKotlin/src/main/java/org/prebid/mobile/prebidkotlindemo/AdType.kt new file mode 100644 index 000000000..41eff21a1 --- /dev/null +++ b/Example/PrebidDemoKotlin/src/main/java/org/prebid/mobile/prebidkotlindemo/AdType.kt @@ -0,0 +1,10 @@ +package org.prebid.mobile.prebidkotlindemo + +import android.app.Activity +import android.view.ViewGroup + +data class AdType( + var name: String, + var onCreate: (activity: Activity, wrapper: ViewGroup, autoRefreshTime: Int) -> Unit, + var onDestroy: (() -> Unit)? = null +) diff --git a/Example/PrebidDemoKotlin/src/main/java/org/prebid/mobile/prebidkotlindemo/AdTypesRepository.kt b/Example/PrebidDemoKotlin/src/main/java/org/prebid/mobile/prebidkotlindemo/AdTypesRepository.kt new file mode 100644 index 000000000..7fe446540 --- /dev/null +++ b/Example/PrebidDemoKotlin/src/main/java/org/prebid/mobile/prebidkotlindemo/AdTypesRepository.kt @@ -0,0 +1,266 @@ +package org.prebid.mobile.prebidkotlindemo + +import com.mopub.mobileads.MoPubView +import org.prebid.mobile.prebidkotlindemo.ads.GamBanner +import org.prebid.mobile.prebidkotlindemo.ads.GamInterstitial +import org.prebid.mobile.prebidkotlindemo.ads.MoPubBanner +import org.prebid.mobile.prebidkotlindemo.ads.MoPubInterstitial +import org.prebid.mobile.prebidkotlindemo.ads.inapp.* +import org.prebid.mobile.prebidkotlindemo.ads.inappgam.* +import org.prebid.mobile.prebidkotlindemo.ads.inappmopub.InAppMoPubBanner +import org.prebid.mobile.prebidkotlindemo.ads.inappmopub.InAppMoPubInterstitial +import org.prebid.mobile.prebidkotlindemo.ads.inappmopub.InAppMoPubRewardedInterstitial +import org.prebid.mobile.prebidkotlindemo.ads.inappmopub.InAppMoPubVideoInterstitial + +object AdTypesRepository { + + fun get() = mapOf( + "Google Ad Manager" to listOf( + AdType( + "Banner 320x50", + onCreate = { _, wrapper, autoRefreshTime -> + GamBanner.create( + wrapper, autoRefreshTime, + 320, 50, + // TODO: Problem with ids + "/5300653/pavliuchyk_test_adunit_1x1_puc", + "625c6125-f19e-4d5b-95c5-55501526b2a4" + ) + }, + onDestroy = { GamBanner.destroy() } + ), + AdType( + "Banner 300x250", + onCreate = { _, wrapper, autoRefreshTime -> + GamBanner.create( + wrapper, autoRefreshTime, + 300, 250, + "/5300653/pavliuchyk_test_adunit_1x1_puc", + "6ace8c7d-88c0-4623-8117-75bc3f0a2e45" + ) + }, + onDestroy = { GamBanner.destroy() } + ), + AdType( + "Interstitial", + onCreate = { activity, _, autoRefreshTime -> + GamInterstitial.create( + activity, autoRefreshTime, + // TODO: Problem with ids + "/5300653/pavliuchyk_test_adunit_1x1_puc", + "625c6125-f19e-4d5b-95c5-55501526b2a4" + ) + }, + onDestroy = { GamInterstitial.destroy() } + ) + ), + + "MoPub" to listOf( + AdType( + "Banner 320x50", + onCreate = { _, wrapper, autoRefreshTime -> + MoPubBanner.create( + wrapper, autoRefreshTime, + 320, 50, MoPubView.MoPubAdSize.HEIGHT_50, + "42b99af979cd474ea32f497c044b5d71", + "625c6125-f19e-4d5b-95c5-55501526b2a4" + ) + }, + onDestroy = { MoPubBanner.destroy() } + ), + AdType( + "Banner 300x250", + onCreate = { _, wrapper, autoRefreshTime -> + MoPubBanner.create( + wrapper, autoRefreshTime, + 300, 250, MoPubView.MoPubAdSize.HEIGHT_250, + // TODO: Problem with ids + "a935eac11acd416f92640411234fbba6", + "6ace8c7d-88c0-4623-8117-75bc3f0a2e45" + ) + }, + onDestroy = { MoPubBanner.destroy() } + ), + AdType( + "Interstitial", + onCreate = { activity, _, autoRefreshTime -> + MoPubInterstitial.create( + activity, autoRefreshTime, + // TODO: Problem with ids + "2829868d308643edbec0795977f17437", + "625c6125-f19e-4d5b-95c5-55501526b2a4" + ) + }, + onDestroy = { MoPubInterstitial.destroy() } + ) + ), + + "In-App" to listOf( + AdType( + "Banner 320x50", + onCreate = { _, wrapper, autoRefreshTime -> + InAppBanner.create( + wrapper, autoRefreshTime, + 320, 50, + "50699c03-0910-477c-b4a4-911dbe2b9d42" + ) + }, + onDestroy = { InAppBanner.destroy() } + ), + AdType( + "Interstitial", + onCreate = { context, _, _ -> + InAppInterstitial.create( + context, + 30, 30, + "5a4b8dcf-f984-4b04-9448-6529908d6cb6" + ) + }, + onDestroy = { InAppInterstitial.destroy() } + ), + AdType( + "Video Banner", + onCreate = { _, wrapper, autoRefreshTime -> + InAppVideoBanner.create( + wrapper, autoRefreshTime, + 300, 250, + "9007b76d-c73c-49c6-b0a8-1c7890a84b33" + ) + }, + onDestroy = { InAppVideoBanner.destroy() } + ), + AdType( + "Video Interstitial", + onCreate = { context, _, _ -> + InAppVideoInterstitial.create( + context, + "12f58bc2-b664-4672-8d19-638bcc96fd5c" + ) + }, + onDestroy = { InAppVideoInterstitial.destroy() } + ), + AdType( + "Rewarded Interstitial", + onCreate = { context, _, _ -> + InAppRewardedInterstitial.create( + context, + "12f58bc2-b664-4672-8d19-638bcc96fd5c" + ) + }, + onDestroy = { InAppRewardedInterstitial.destroy() } + ) + ), + + "In-App + Google Ad Manager" to listOf( + AdType( + "Banner 320x50", + onCreate = { _, wrapper, autoRefreshTime -> + InAppGamBanner.create( + wrapper, autoRefreshTime, + 320, 50, + "/21808260008/prebid_oxb_320x50_banner", + "50699c03-0910-477c-b4a4-911dbe2b9d42" + ) + }, + onDestroy = { InAppGamBanner.destroy() } + ), + AdType( + "Interstitial", + onCreate = { context, _, _ -> + InAppGamInterstitial.create( + context, + 30, 30, + "/21808260008/prebid_oxb_html_interstitial", + "5a4b8dcf-f984-4b04-9448-6529908d6cb6" + ) + }, + onDestroy = { InAppGamInterstitial.destroy() } + ), + AdType( + "Video Banner", + onCreate = { _, wrapper, autoRefreshTime -> + InAppGamVideoBanner.create( + wrapper, autoRefreshTime, + 300, 250, + "/21808260008/prebid_oxb_300x250_banner", + "9007b76d-c73c-49c6-b0a8-1c7890a84b33" + ) + }, + onDestroy = { InAppGamVideoBanner.destroy() } + ), + AdType( + "Video Interstitial", + onCreate = { activity, _, _ -> + InAppGamVideoInterstitial.create( + activity, + "/21808260008/prebid_oxb_320x480_interstitial_video_static", + "28259226-68de-49f8-88d6-f0f2fab846e3" + ) + }, + onDestroy = { InAppGamVideoInterstitial.destroy() } + ), + AdType( + "Rewarded Interstitial", + onCreate = { activity, _, _ -> + InAppGamRewardedInterstitial.create( + activity, + "/21808260008/prebid_oxb_rewarded_video_test", + "12f58bc2-b664-4672-8d19-638bcc96fd5c" + ) + }, + onDestroy = { InAppGamRewardedInterstitial.destroy() } + ) + ), + + "In-App + MoPub" to listOf( + AdType( + "Banner 320x50", + onCreate = { _, wrapper, autoRefreshTime -> + InAppMoPubBanner.create( + wrapper, autoRefreshTime, + 320, 50, + "093eef131ec7455b9bda52b7eb456c51", + "50699c03-0910-477c-b4a4-911dbe2b9d42" + ) + }, + onDestroy = { InAppMoPubBanner.destroy() } + ), + AdType( + "Interstitial", + onCreate = { activity, _, _ -> + InAppMoPubInterstitial.create( + activity, + 30, 30, + "d6cc98e81ef44d648bd93c79d372c451", + "5a4b8dcf-f984-4b04-9448-6529908d6cb6" + ) + }, + onDestroy = { InAppMoPubInterstitial.destroy() } + ), + AdType( + "Video Interstitial", + onCreate = { activity, _, _ -> + InAppMoPubVideoInterstitial.create( + activity, + "062a5be1c0764e84b45244ecd58b237f", + "28259226-68de-49f8-88d6-f0f2fab846e3" + ) + }, + onDestroy = { InAppMoPubVideoInterstitial.destroy() } + ), + AdType( + "Rewarded Interstitial", + onCreate = { activity, _, _ -> + InAppMoPubRewardedInterstitial.create( + activity, + "7c8fe21705a948c8a89dc6b496e8ad35", + "12f58bc2-b664-4672-8d19-638bcc96fd5c", + hashMapOf() + ) + }, + onDestroy = { InAppMoPubRewardedInterstitial.destroy() } + ) + ) + ) + +} \ No newline at end of file diff --git a/Example/PrebidDemoKotlin/src/main/java/org/prebid/mobile/prebidkotlindemo/Constants.kt b/Example/PrebidDemoKotlin/src/main/java/org/prebid/mobile/prebidkotlindemo/Constants.kt deleted file mode 100644 index 711d4dd29..000000000 --- a/Example/PrebidDemoKotlin/src/main/java/org/prebid/mobile/prebidkotlindemo/Constants.kt +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright 2018-2019 Prebid.org, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.prebid.mobile.prebidkotlindemo - -object Constants { - - internal val AD_TYPE_NAME = "adType" - internal val AD_SERVER_NAME = "adServer" - internal val AD_SIZE_NAME = "adSize" - internal val AUTO_REFRESH_NAME = "autoRefresh" - - //AppNexus - // Prebid server config ids - internal val PBS_ACCOUNT_ID_APPNEXUS = "bfa84af2-bd16-4d35-96ad-31c6bb888df0" - internal val PBS_CONFIG_ID_300x250_APPNEXUS = "6ace8c7d-88c0-4623-8117-75bc3f0a2e45" - internal val PBS_CONFIG_ID_320x50_APPNEXUS = "625c6125-f19e-4d5b-95c5-55501526b2a4" - internal val PBS_CONFIG_ID_INTERSTITIAL_APPNEXUS = "625c6125-f19e-4d5b-95c5-55501526b2a4" - // MoPub ad unit ids - internal val MOPUB_BANNER_ADUNIT_ID_300x250_APPNEXUS = "a935eac11acd416f92640411234fbba6" - internal val MOPUB_BANNER_ADUNIT_ID_320x50_APPNEXUS = "9dbccb87ab4d4a178450c0bc986b4571" - internal val MOPUB_INTERSTITIAL_ADUNIT_ID_APPNEXUS = "2829868d308643edbec0795977f17437" - // DFP ad unit ids - internal val DFP_BANNER_ADUNIT_ID_300x250_APPNEXUS = "/19968336/PriceCheck_300x250" - internal val DFP_BANNER_ADUNIT_ID_ALL_SIZES_APPNEXUS = "/19968336/PrebidMobileValidator_Banner_All_Sizes" - internal val DFP_INTERSTITIAL_ADUNIT_ID_APPNEXUS = "/19968336/PriceCheck_Interstitial" - - //RubiconProject - // Prebid server config ids - internal val PBS_ACCOUNT_ID_RUBICON = "1001" - internal val PBS_CONFIG_ID_300x250_RUBICON = "1001-1" - internal val PBS_CONFIG_ID_INTERSTITIAL_RUBICON = "" - // MoPub ad unit ids - internal val MOPUB_BANNER_ADUNIT_ID_300x250_RUBICON = "a108b8dd5ebc472098167e6f1c118120" - internal val MOPUB_INTERSTITIAL_ADUNIT_ID_RUBICON = "" - // DFP ad unit ids - internal val DFP_BANNER_ADUNIT_ID_300x250_RUBICON = - "/5300653/test_adunit_pavliuchyk_300x250_prebid-server.rubiconproject.com_puc" - internal val DFP_INTERSTITIAL_ADUNIT_ID_RUBICON = "" - - internal var PBS_ACCOUNT_ID = PBS_ACCOUNT_ID_APPNEXUS - internal var PBS_CONFIG_ID_300x250 = PBS_CONFIG_ID_300x250_APPNEXUS - internal var PBS_CONFIG_ID_320x50 = PBS_CONFIG_ID_320x50_APPNEXUS - internal var PBS_CONFIG_ID_INTERSTITIAL = PBS_CONFIG_ID_INTERSTITIAL_APPNEXUS - // MoPub ad unit ids - internal var MOPUB_BANNER_ADUNIT_ID_300x250 = MOPUB_BANNER_ADUNIT_ID_300x250_APPNEXUS - internal var MOPUB_BANNER_ADUNIT_ID_320x50 = MOPUB_BANNER_ADUNIT_ID_320x50_APPNEXUS - internal var MOPUB_INTERSTITIAL_ADUNIT_ID = MOPUB_INTERSTITIAL_ADUNIT_ID_APPNEXUS - // DFP ad unit ids - internal var DFP_BANNER_ADUNIT_ID_300x250 = DFP_BANNER_ADUNIT_ID_300x250_APPNEXUS - internal var DFP_BANNER_ADUNIT_ID_ALL_SIZES = DFP_BANNER_ADUNIT_ID_ALL_SIZES_APPNEXUS - internal var DFP_INTERSTITIAL_ADUNIT_ID = DFP_INTERSTITIAL_ADUNIT_ID_APPNEXUS - -} diff --git a/Example/PrebidDemoKotlin/src/main/java/org/prebid/mobile/prebidkotlindemo/CustomApplication.kt b/Example/PrebidDemoKotlin/src/main/java/org/prebid/mobile/prebidkotlindemo/CustomApplication.kt index 9310baca7..072b4984d 100644 --- a/Example/PrebidDemoKotlin/src/main/java/org/prebid/mobile/prebidkotlindemo/CustomApplication.kt +++ b/Example/PrebidDemoKotlin/src/main/java/org/prebid/mobile/prebidkotlindemo/CustomApplication.kt @@ -19,62 +19,68 @@ package org.prebid.mobile.prebidkotlindemo import android.app.Activity import android.app.Application import android.content.Intent +import android.os.Build import android.os.Bundle -import android.view.WindowManager.LayoutParams.* +import android.util.Log +import android.view.WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON +import android.webkit.WebView +import com.google.android.gms.ads.MobileAds import com.mopub.common.MoPub import com.mopub.common.SdkConfiguration +import com.mopub.common.SdkInitializationListener +import com.mopub.common.logging.MoPubLog import org.prebid.mobile.Host import org.prebid.mobile.PrebidMobile -import java.util.* +import org.prebid.mobile.rendering.sdk.PrebidRenderingSettings class CustomApplication : Application() { + override fun onCreate() { super.onCreate() - //init MoPub SDK - val networksToInit = ArrayList() - networksToInit.add("com.mopub.mobileads.VungleRewardedVideo") - val sdkConfiguration = SdkConfiguration.Builder("a935eac11acd416f92640411234fbba6") - .withNetworksToInit(networksToInit) - .build() - MoPub.initializeSdk(this, sdkConfiguration, null) - //set Prebid Mobile global Settings - //region PrebidMobile API - PrebidMobile.setPrebidServerAccountId(Constants.PBS_ACCOUNT_ID) - PrebidMobile.setPrebidServerHost(Host.APPNEXUS) - PrebidMobile.setShareGeoLocation(true) - PrebidMobile.setApplicationContext(applicationContext) - //endregion + initMopubSDK() + initPrebidSDK() if (BuildConfig.DEBUG) { - sendBroadcast(Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)) - this.registerActivityLifecycleCallbacks(object : Application.ActivityLifecycleCallbacks { - override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) { - activity.window.addFlags(FLAG_KEEP_SCREEN_ON) - } - - override fun onActivityStarted(activity: Activity) { - - } - - override fun onActivityResumed(activity: Activity) { - - } - - override fun onActivityPaused(activity: Activity) { - - } - - override fun onActivityStopped(activity: Activity) { + activateKeepScreenOnFlag() + } + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { + WebView.setWebContentsDebuggingEnabled(true) + } + } - } + private fun initMopubSDK() { + val sdkConfiguration = SdkConfiguration.Builder("42b99af979cd474ea32f497c044b5d71") + sdkConfiguration.withLogLevel(MoPubLog.LogLevel.DEBUG) + MoPub.initializeSdk(this, sdkConfiguration.build()) { + Log.d("MoPub", "Initialized successfully!") + } + } - override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle) { + private fun initPrebidSDK() { + PrebidMobile.setPrebidServerAccountId("bfa84af2-bd16-4d35-96ad-31c6bb888df0") + PrebidMobile.setPrebidServerHost(Host.APPNEXUS) + PrebidMobile.setShareGeoLocation(true) + PrebidMobile.setApplicationContext(applicationContext) - } + val host = org.prebid.mobile.rendering.bidding.enums.Host.CUSTOM + host.hostUrl = "https://prebid.openx.net/openrtb2/auction" + PrebidRenderingSettings.setBidServerHost(host) + PrebidRenderingSettings.setAccountId("0689a263-318d-448b-a3d4-b02e8a709d9d") + } - override fun onActivityDestroyed(activity: Activity) { + private fun activateKeepScreenOnFlag() { + sendBroadcast(Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)) + this.registerActivityLifecycleCallbacks(object : ActivityLifecycleCallbacks { + override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) { + activity.window.addFlags(FLAG_KEEP_SCREEN_ON) + } - } - }) - } + override fun onActivityStarted(activity: Activity) {} + override fun onActivityResumed(activity: Activity) {} + override fun onActivityPaused(activity: Activity) {} + override fun onActivityStopped(activity: Activity) {} + override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle) {} + override fun onActivityDestroyed(activity: Activity) {} + }) } + } diff --git a/Example/PrebidDemoKotlin/src/main/java/org/prebid/mobile/prebidkotlindemo/DemoActivity.kt b/Example/PrebidDemoKotlin/src/main/java/org/prebid/mobile/prebidkotlindemo/DemoActivity.kt index 972a51d45..68685b3ee 100644 --- a/Example/PrebidDemoKotlin/src/main/java/org/prebid/mobile/prebidkotlindemo/DemoActivity.kt +++ b/Example/PrebidDemoKotlin/src/main/java/org/prebid/mobile/prebidkotlindemo/DemoActivity.kt @@ -15,238 +15,86 @@ */ package org.prebid.mobile.prebidkotlindemo -import android.os.Build +import android.content.Context +import android.content.Intent import android.os.Bundle -import android.util.Log -import android.widget.FrameLayout -import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AppCompatActivity -import com.google.android.gms.ads.AdListener -import com.google.android.gms.ads.AdSize -import com.google.android.gms.ads.LoadAdError -import com.google.android.gms.ads.admanager.AdManagerAdRequest -import com.google.android.gms.ads.admanager.AdManagerAdView -import com.google.android.gms.ads.admanager.AdManagerInterstitialAd -import com.google.android.gms.ads.admanager.AdManagerInterstitialAdLoadCallback -import com.mopub.mobileads.MoPubErrorCode -import com.mopub.mobileads.MoPubInterstitial -import com.mopub.mobileads.MoPubView -import org.prebid.mobile.* -import org.prebid.mobile.addendum.AdViewUtils -import org.prebid.mobile.addendum.PbFindSizeError -import org.prebid.mobile.prebidkotlindemo.Constants.MOPUB_BANNER_ADUNIT_ID_300x250 -import org.prebid.mobile.prebidkotlindemo.Constants.MOPUB_BANNER_ADUNIT_ID_320x50 +import androidx.databinding.DataBindingUtil +import androidx.preference.PreferenceManager +import org.prebid.mobile.prebidkotlindemo.databinding.ActivityDemoBinding class DemoActivity : AppCompatActivity() { - internal var refreshCount: Int = 0 - internal var adUnit: AdUnit? = null - lateinit var resultCode: ResultCode - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - refreshCount = 0 - setContentView(R.layout.activity_demo) - val intent = intent - if ("DFP" == intent.getStringExtra(Constants.AD_SERVER_NAME) && "Banner" == intent.getStringExtra(Constants.AD_TYPE_NAME)) { - createDFPBanner(intent.getStringExtra(Constants.AD_SIZE_NAME)) - } else if ("DFP" == intent.getStringExtra(Constants.AD_SERVER_NAME) && "Interstitial" == intent.getStringExtra( - Constants.AD_TYPE_NAME - ) - ) { - createDFPInterstitial() - } else if ("MoPub" == intent.getStringExtra(Constants.AD_SERVER_NAME) && "Banner" == intent.getStringExtra( - Constants.AD_TYPE_NAME - ) - ) { - createMoPubBanner(intent.getStringExtra(Constants.AD_SIZE_NAME)) - } else if ("MoPub" == intent.getStringExtra(Constants.AD_SERVER_NAME) && "Interstitial" == intent.getStringExtra( - Constants.AD_TYPE_NAME - ) - ) { - createMoPubInterstitial() + companion object { + private const val ARGS_AD_SERVER_NAME = "adServer" + private const val ARGS_AD_TYPE_NAME = "adType" + private const val ARGS_AD_REFRESH_TIME = "autoRefresh" + + fun getIntent( + context: Context, + adPrimaryServerName: String, + adTypeName: String, + adAutoRefreshTime: Int + ): Intent { + return Intent(context, DemoActivity::class.java).apply { + putExtra(ARGS_AD_SERVER_NAME, adPrimaryServerName) + putExtra(ARGS_AD_TYPE_NAME, adTypeName) + putExtra(ARGS_AD_REFRESH_TIME, adAutoRefreshTime) + } } } - internal fun createDFPBanner(size: String) { - val adFrame = findViewById(R.id.adFrame) as FrameLayout - adFrame.removeAllViews() - val dfpAdView = AdManagerAdView(this) - val wAndH = size.split("x".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray() - val width = Integer.valueOf(wAndH[0]) - val height = Integer.valueOf(wAndH[1]) - if (width == 300 && height == 250) { - dfpAdView.setAdUnitId(Constants.DFP_BANNER_ADUNIT_ID_ALL_SIZES) - adUnit = BannerAdUnit(Constants.PBS_CONFIG_ID_300x250, width, height) - } else if (width == 320 && height == 50) { - dfpAdView.setAdUnitId(Constants.DFP_BANNER_ADUNIT_ID_ALL_SIZES) - adUnit = BannerAdUnit(Constants.PBS_CONFIG_ID_320x50, width, height) - } else { - dfpAdView.setAdUnitId(Constants.DFP_BANNER_ADUNIT_ID_ALL_SIZES) - adUnit = BannerAdUnit(Constants.PBS_CONFIG_ID_320x50, width, height) - } - - dfpAdView.setAdListener(object : AdListener() { - override fun onAdLoaded() { - super.onAdLoaded() + private var adPrimaryServerName = "" + private var adTypeName = "" + private var adAutoRefreshTime = 0 - AdViewUtils.findPrebidCreativeSize(dfpAdView, object : AdViewUtils.PbFindSizeListener { - override fun success(width: Int, height: Int) { - dfpAdView.setAdSizes(AdSize(width, height)) + private lateinit var binding: ActivityDemoBinding + private lateinit var currentAdType: AdType - } - - override fun failure(error: PbFindSizeError) { - Log.d("MyTag", "error: $error") - } - }) - - } - }) - - dfpAdView.setAdSizes(AdSize(width, height)) - adFrame.addView(dfpAdView) - val builder = AdManagerAdRequest.Builder() + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + binding = DataBindingUtil.setContentView(this, R.layout.activity_demo) - //region PrebidMobile Mobile API 1.0 usage - val millis = intent.getIntExtra(Constants.AUTO_REFRESH_NAME, 0) - adUnit!!.setAutoRefreshPeriodMillis(millis) - adUnit!!.fetchDemand(builder, object : OnCompleteListener { - override fun onComplete(resultCode: ResultCode) { - this@DemoActivity.resultCode = resultCode - dfpAdView.loadAd(builder.build()) - refreshCount++ - } - }) - //endregion + useFakeGDPR() + parseArguments() + initViews() + createBanner() } - internal fun createDFPInterstitial() { - - adUnit = InterstitialAdUnit(Constants.PBS_CONFIG_ID_INTERSTITIAL) - val millis = intent.getIntExtra(Constants.AUTO_REFRESH_NAME, 0) - adUnit!!.setAutoRefreshPeriodMillis(millis) - val builder = AdManagerAdRequest.Builder() - val request = builder.build() - adUnit!!.fetchDemand(request, object : OnCompleteListener { - override fun onComplete(resultCode: ResultCode) { - this@DemoActivity.resultCode = resultCode - - AdManagerInterstitialAd.load( - this@DemoActivity, - "/5300653/pavliuchyk_test_adunit_1x1_puc", - request, - object : AdManagerInterstitialAdLoadCallback() { - override fun onAdLoaded(adManagerInterstitialAd: AdManagerInterstitialAd) { - super.onAdLoaded(adManagerInterstitialAd) - adManagerInterstitialAd.show(this@DemoActivity) - } - - override fun onAdFailedToLoad(loadAdError: LoadAdError) { - super.onAdFailedToLoad(loadAdError) - - val builder: AlertDialog.Builder - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - builder = AlertDialog.Builder(this@DemoActivity, android.R.style.Theme_Material_Dialog_Alert) - } else { - builder = AlertDialog.Builder(this@DemoActivity) - } - builder.setTitle("Failed to load DFP interstitial ad") - .setMessage("Error: $loadAdError") - .setIcon(android.R.drawable.ic_dialog_alert) - .show() - } - } - ) - - refreshCount++ - } - }) - + override fun onDestroy() { + super.onDestroy() + currentAdType.onDestroy?.let { it() } } - internal fun createMoPubBanner(size: String) { - val adFrame = findViewById(R.id.adFrame) as FrameLayout - adFrame.removeAllViews() - val wAndH = size.split("x".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray() - val width = Integer.valueOf(wAndH[0]) - val height = Integer.valueOf(wAndH[1]) - val adView = MoPubView(this) - if (width == 300 && height == 250) { - adView.setAdUnitId(MOPUB_BANNER_ADUNIT_ID_300x250) - adUnit = BannerAdUnit(Constants.PBS_CONFIG_ID_300x250, 300, 250) - } else { - adView.setAdUnitId(MOPUB_BANNER_ADUNIT_ID_320x50) - adUnit = BannerAdUnit(Constants.PBS_CONFIG_ID_320x50, 320, 50) + private fun parseArguments() { + intent.apply { + adPrimaryServerName = getStringExtra(ARGS_AD_SERVER_NAME) ?: "" + adTypeName = getStringExtra(ARGS_AD_TYPE_NAME) ?: "" + adAutoRefreshTime = getIntExtra(ARGS_AD_REFRESH_TIME, 0) } - adView.setMinimumWidth(width) - adView.setMinimumHeight(height) - adFrame.addView(adView) - - adUnit!!.setAutoRefreshPeriodMillis(intent.getIntExtra(Constants.AUTO_REFRESH_NAME, 0)) - adUnit!!.fetchDemand(adView, object : OnCompleteListener { - override fun onComplete(resultCode: ResultCode) { - this@DemoActivity.resultCode = resultCode - adView.loadAd() - refreshCount++ - } - }) } - internal fun createMoPubInterstitial() { - val interstitial = MoPubInterstitial(this, Constants.MOPUB_INTERSTITIAL_ADUNIT_ID) - interstitial.setInterstitialAdListener(object : MoPubInterstitial.InterstitialAdListener { - override fun onInterstitialLoaded(interstitial: MoPubInterstitial) { - interstitial.show() - } - - override fun onInterstitialFailed(interstitial: MoPubInterstitial, errorCode: MoPubErrorCode) { - val builder: AlertDialog.Builder - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - builder = AlertDialog.Builder(this@DemoActivity, android.R.style.Theme_Material_Dialog_Alert) - } else { - builder = AlertDialog.Builder(this@DemoActivity) - } - builder.setTitle("Failed to load MoPub interstitial ad") - .setMessage("Error code: " + errorCode.toString()) - .setIcon(android.R.drawable.ic_dialog_alert) - .show() - } - - override fun onInterstitialShown(interstitial: MoPubInterstitial) { - - } - - override fun onInterstitialClicked(interstitial: MoPubInterstitial) { - - } + private fun initViews() { + binding.tvPrimaryAdServer.text = adPrimaryServerName + binding.tvAdType.text = adTypeName + } - override fun onInterstitialDismissed(interstitial: MoPubInterstitial) { + private fun createBanner() { + binding.frameAdWrapper.removeAllViews() - } - }) - adUnit = InterstitialAdUnit(Constants.PBS_CONFIG_ID_INTERSTITIAL) - val millis = intent.getIntExtra(Constants.AUTO_REFRESH_NAME, 0) - adUnit!!.setAutoRefreshPeriodMillis(millis) - adUnit!!.fetchDemand(interstitial, object : OnCompleteListener { - override fun onComplete(resultCode: ResultCode) { - this@DemoActivity.resultCode = resultCode - interstitial.load() - refreshCount++ - } - }) + val allAdTypes = AdTypesRepository.get() + val currentPrimaryAdServerTypes = allAdTypes[adPrimaryServerName]!! + currentAdType = currentPrimaryAdServerTypes.find { it.name == adTypeName }!! + currentAdType.onCreate(this, binding.frameAdWrapper, adAutoRefreshTime) } - override fun onDestroy() { - super.onDestroy() - if (adUnit != null) { - adUnit!!.stopAutoRefresh() - adUnit = null + private fun useFakeGDPR() { + // Only for test cases!!! + PreferenceManager.getDefaultSharedPreferences(this).edit().apply { + putInt("IABTCF_gdprApplies", 0) + putInt("IABTCF_CmpSdkID", 123) + apply() } } - internal fun stopAutoRefresh() { - if (adUnit != null) { - adUnit!!.stopAutoRefresh() - } - } } diff --git a/Example/PrebidDemoKotlin/src/main/java/org/prebid/mobile/prebidkotlindemo/MainActivity.kt b/Example/PrebidDemoKotlin/src/main/java/org/prebid/mobile/prebidkotlindemo/MainActivity.kt index 0d667b049..da537df07 100644 --- a/Example/PrebidDemoKotlin/src/main/java/org/prebid/mobile/prebidkotlindemo/MainActivity.kt +++ b/Example/PrebidDemoKotlin/src/main/java/org/prebid/mobile/prebidkotlindemo/MainActivity.kt @@ -16,115 +16,71 @@ package org.prebid.mobile.prebidkotlindemo -import android.content.Intent -import android.os.Build import android.os.Bundle -import androidx.appcompat.app.AppCompatActivity -import android.text.TextUtils import android.view.View -import android.webkit.WebView -import android.widget.* -import java.util.* +import android.widget.AdapterView +import android.widget.ArrayAdapter +import androidx.appcompat.app.AppCompatActivity +import androidx.databinding.DataBindingUtil +import org.prebid.mobile.prebidkotlindemo.databinding.ActivityMainBinding class MainActivity : AppCompatActivity() { - // Default values - private var adType = "Banner" - private var adServer = "DFP" - private var adSize = "300x250" + private var adType = "" + private var adServer = "" + + private lateinit var binding: ActivityMainBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setContentView(R.layout.activity_main) - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { - WebView.setWebContentsDebuggingEnabled(true) - } - // Get all the components - val adTypeSpinner = findViewById(R.id.adTypeSpinner) as Spinner - // Ad Type Spinner set up - val adTypeAdapter = ArrayAdapter.createFromResource( - this, R.array.adTypeArray, - android.R.layout.simple_spinner_item - ) - adTypeAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item) - adTypeSpinner.adapter = adTypeAdapter - adTypeSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { - internal var adTypes = Arrays.asList(*resources.getStringArray(R.array.adTypeArray)) + binding = DataBindingUtil.setContentView(this, R.layout.activity_main) + binding.btnShowAd.setOnClickListener { showAd() } + initAdServerSpinner() + } - override fun onItemSelected(adapterView: AdapterView<*>, view: View, pos: Int, l: Long) { - if (pos > adTypes.size) { - return - } - adType = adTypes[pos] - if (adType == "Banner") { - // show size and refresh millis - val adSizeRow = findViewById(R.id.adSizeRow) as LinearLayout - adSizeRow.visibility = View.VISIBLE - } else { - // hide size selection and refresh millis - val adSizeRow = findViewById(R.id.adSizeRow) as LinearLayout - adSizeRow.visibility = View.GONE - } - } + private fun showAd() { + val refreshTime = getRefreshTime() + val intent = DemoActivity.getIntent(this, adServer, adType, refreshTime) + startActivity(intent) + } - override fun onNothingSelected(adapterView: AdapterView<*>) {} + private fun getRefreshTime(): Int { + val refreshTimeString = binding.etAutoRefreshTime.text.toString() + return try { + Integer.valueOf(refreshTimeString) + } catch (exception: Exception) { + 0 } - // Ad Server Spinner - val adServerSpinner = findViewById(R.id.adServerSpinner) as Spinner - val adServerAdapter = ArrayAdapter.createFromResource( - this, R.array.adServerArray, - android.R.layout.simple_spinner_item - ) - adServerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item) - adServerSpinner.adapter = adServerAdapter - adServerSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { - internal var adServers = Arrays.asList(*resources.getStringArray(R.array.adServerArray)) + } + private fun initAdServerSpinner() { + val primaryAdServers = ArrayList(AdTypesRepository.get().keys) + val spinner = binding.spinnerAdServer + spinner.adapter = ArrayAdapter(this, android.R.layout.simple_spinner_dropdown_item, primaryAdServers) + spinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { override fun onItemSelected(adapterView: AdapterView<*>, view: View, pos: Int, l: Long) { - if (pos > adServers.size) { - return - } - adServer = adServers[pos] + adServer = primaryAdServers[pos] + val types = AdTypesRepository.get()[adServer]?.map { it.name } ?: listOf() + binding.btnShowAd.isEnabled = types.isNotEmpty() + initAdTypeSpinner(ArrayList(types)) } override fun onNothingSelected(adapterView: AdapterView<*>) {} } - // Ad Size Spinner - val adSizeSpinner = findViewById(R.id.adSizeSpinner) as Spinner - val adSizeAdapter = ArrayAdapter.createFromResource( - this, R.array.adSizeArray, - android.R.layout.simple_spinner_item - ) - adSizeAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item) - adSizeSpinner.adapter = adSizeAdapter - adSizeSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { - internal var adSizes = Arrays.asList(*resources.getStringArray(R.array.adSizeArray)) + } + private fun initAdTypeSpinner(list: ArrayList) { + val spinner = binding.spinnerAdType + spinner.adapter = ArrayAdapter(this, android.R.layout.simple_spinner_dropdown_item, list) + spinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { override fun onItemSelected(adapterView: AdapterView<*>, view: View, pos: Int, l: Long) { - if (pos > adSizes.size) { - return - } - adSize = adSizes[pos] + binding.btnShowAd.isEnabled = true + adType = list[pos] } override fun onNothingSelected(adapterView: AdapterView<*>) {} } } - fun showAd(view: View) { - val demoActivityIntent = Intent(this, DemoActivity::class.java) - demoActivityIntent.putExtra(Constants.AD_SERVER_NAME, adServer) - demoActivityIntent.putExtra(Constants.AD_TYPE_NAME, adType) - if (adType == "Banner") { - demoActivityIntent.putExtra(Constants.AD_SIZE_NAME, adSize) - } - val autoRefreshMillis = findViewById(R.id.autoRefreshInput) as EditText - val refreshMillisString = autoRefreshMillis.text.toString() - if (!TextUtils.isEmpty(refreshMillisString)) { - val refreshMillis = Integer.valueOf(refreshMillisString) - demoActivityIntent.putExtra(Constants.AUTO_REFRESH_NAME, refreshMillis) - } - startActivity(demoActivityIntent) - } } diff --git a/Example/PrebidDemoKotlin/src/main/java/org/prebid/mobile/prebidkotlindemo/ads/GamBanner.kt b/Example/PrebidDemoKotlin/src/main/java/org/prebid/mobile/prebidkotlindemo/ads/GamBanner.kt new file mode 100644 index 000000000..cb61bf174 --- /dev/null +++ b/Example/PrebidDemoKotlin/src/main/java/org/prebid/mobile/prebidkotlindemo/ads/GamBanner.kt @@ -0,0 +1,66 @@ +package org.prebid.mobile.prebidkotlindemo.ads + +import android.util.Log +import android.view.ViewGroup +import com.google.android.gms.ads.AdListener +import com.google.android.gms.ads.AdSize +import com.google.android.gms.ads.MobileAds +import com.google.android.gms.ads.RequestConfiguration +import com.google.android.gms.ads.admanager.AdManagerAdRequest +import com.google.android.gms.ads.admanager.AdManagerAdView +import org.prebid.mobile.AdUnit +import org.prebid.mobile.BannerAdUnit +import org.prebid.mobile.addendum.AdViewUtils +import org.prebid.mobile.addendum.PbFindSizeError + +object GamBanner { + + private const val TAG = "GamBanner" + + private var adUnit: AdUnit? = null + + fun create( + wrapper: ViewGroup, + autoRefreshTime: Int, + width: Int, + height: Int, + adUnitId: String, + configId: String + ) { + val adView = AdManagerAdView(wrapper.context) + adView.adUnitId = adUnitId + + adView.adListener = object : AdListener() { + override fun onAdLoaded() { + super.onAdLoaded() + Log.d(TAG, "Banner loaded!") + + AdViewUtils.findPrebidCreativeSize(adView, object : AdViewUtils.PbFindSizeListener { + override fun success(width: Int, height: Int) { + adView.setAdSizes(AdSize(width, height)) + } + + override fun failure(error: PbFindSizeError) {} + }) + + } + } + adView.setAdSizes(AdSize(width, height)) + + wrapper.addView(adView) + + val request = AdManagerAdRequest.Builder().build() + adUnit = BannerAdUnit(configId, width, height) + adUnit?.setAutoRefreshPeriodMillis(autoRefreshTime) + adUnit?.fetchDemand(request) { resultCode -> + Log.d(TAG, "Result code: $resultCode") + adView.loadAd(request) + } + } + + fun destroy() { + adUnit?.stopAutoRefresh() + adUnit = null + } + +} \ No newline at end of file diff --git a/Example/PrebidDemoKotlin/src/main/java/org/prebid/mobile/prebidkotlindemo/ads/GamInterstitial.kt b/Example/PrebidDemoKotlin/src/main/java/org/prebid/mobile/prebidkotlindemo/ads/GamInterstitial.kt new file mode 100644 index 000000000..9f6ea1d6e --- /dev/null +++ b/Example/PrebidDemoKotlin/src/main/java/org/prebid/mobile/prebidkotlindemo/ads/GamInterstitial.kt @@ -0,0 +1,62 @@ +package org.prebid.mobile.prebidkotlindemo.ads + +import android.app.Activity +import android.os.Build +import android.util.Log +import androidx.appcompat.app.AlertDialog +import com.google.android.gms.ads.LoadAdError +import com.google.android.gms.ads.admanager.AdManagerAdRequest +import com.google.android.gms.ads.admanager.AdManagerInterstitialAd +import com.google.android.gms.ads.admanager.AdManagerInterstitialAdLoadCallback +import org.prebid.mobile.AdUnit +import org.prebid.mobile.InterstitialAdUnit + +object GamInterstitial { + + private const val TAG = "GamInterstitial" + + private var adUnit: AdUnit? = null + + fun create(activity: Activity, autoRefreshTime: Int, adUnitId: String, configId: String) { + val requestBuilder = AdManagerAdRequest.Builder() + val request = requestBuilder.build() + adUnit = InterstitialAdUnit(configId) + adUnit?.setAutoRefreshPeriodMillis(autoRefreshTime) + adUnit?.fetchDemand(request) { resultCode -> + Log.d(TAG, "Result code: $resultCode") + + val adLoadCallback = object : AdManagerInterstitialAdLoadCallback() { + override fun onAdLoaded(adManagerInterstitialAd: AdManagerInterstitialAd) { + super.onAdLoaded(adManagerInterstitialAd) + adManagerInterstitialAd.show(activity) + } + + override fun onAdFailedToLoad(loadAdError: LoadAdError) { + super.onAdFailedToLoad(loadAdError) + + val builder = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + AlertDialog.Builder(activity, android.R.style.Theme_Material_Dialog_Alert) + } else { + AlertDialog.Builder(activity) + } + builder.setTitle("Failed to load DFP interstitial ad") + .setMessage("Error: $loadAdError") + .setIcon(android.R.drawable.ic_dialog_alert) + .show() + } + } + AdManagerInterstitialAd.load( + activity, + adUnitId, + request, + adLoadCallback + ) + } + } + + fun destroy() { + adUnit?.stopAutoRefresh() + adUnit = null + } + +} \ No newline at end of file diff --git a/Example/PrebidDemoKotlin/src/main/java/org/prebid/mobile/prebidkotlindemo/ads/MoPubBanner.kt b/Example/PrebidDemoKotlin/src/main/java/org/prebid/mobile/prebidkotlindemo/ads/MoPubBanner.kt new file mode 100644 index 000000000..ab146f01d --- /dev/null +++ b/Example/PrebidDemoKotlin/src/main/java/org/prebid/mobile/prebidkotlindemo/ads/MoPubBanner.kt @@ -0,0 +1,45 @@ +package org.prebid.mobile.prebidkotlindemo.ads + +import android.util.Log +import android.view.ViewGroup +import com.mopub.mobileads.MoPubView +import org.prebid.mobile.AdUnit +import org.prebid.mobile.BannerAdUnit + +object MoPubBanner { + + private const val TAG = "MoPubBanner" + + private var adUnit: AdUnit? = null + + fun create( + wrapper: ViewGroup, + autoRefreshTime: Int, + width: Int, + height: Int, + moPubViewAdSize: MoPubView.MoPubAdSize, + adUnitId: String, + configId: String + ) { + val adView = MoPubView(wrapper.context) + + adView.setAdUnitId(adUnitId) + adView.minimumWidth = width + adView.minimumHeight = height + adView.adSize = moPubViewAdSize + wrapper.addView(adView) + + adUnit = BannerAdUnit(configId, width, height) + adUnit?.setAutoRefreshPeriodMillis(autoRefreshTime) + adUnit?.fetchDemand(adView) { resultCode -> + Log.d(TAG, "Result code: $resultCode") + adView.loadAd() + } + } + + fun destroy() { + adUnit?.stopAutoRefresh() + adUnit = null + } + +} \ No newline at end of file diff --git a/Example/PrebidDemoKotlin/src/main/java/org/prebid/mobile/prebidkotlindemo/ads/MoPubInterstitial.kt b/Example/PrebidDemoKotlin/src/main/java/org/prebid/mobile/prebidkotlindemo/ads/MoPubInterstitial.kt new file mode 100644 index 000000000..21302c787 --- /dev/null +++ b/Example/PrebidDemoKotlin/src/main/java/org/prebid/mobile/prebidkotlindemo/ads/MoPubInterstitial.kt @@ -0,0 +1,54 @@ +package org.prebid.mobile.prebidkotlindemo.ads + +import android.app.Activity +import android.os.Build +import android.util.Log +import androidx.appcompat.app.AlertDialog +import com.mopub.mobileads.MoPubErrorCode +import com.mopub.mobileads.MoPubInterstitial +import org.prebid.mobile.AdUnit +import org.prebid.mobile.InterstitialAdUnit + +object MoPubInterstitial { + + private const val TAG = "MoPubInterstitial" + + private var adUnit: AdUnit? = null + + fun create(activity: Activity, autoRefreshTime: Int, adUnitId: String, configId: String) { + val interstitial = MoPubInterstitial(activity, adUnitId) + interstitial.interstitialAdListener = object : MoPubInterstitial.InterstitialAdListener { + override fun onInterstitialLoaded(interstitial: MoPubInterstitial) { + interstitial.show() + } + + override fun onInterstitialFailed(interstitial: MoPubInterstitial, errorCode: MoPubErrorCode) { + val builder: AlertDialog.Builder = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + AlertDialog.Builder(activity, android.R.style.Theme_Material_Dialog_Alert) + } else { + AlertDialog.Builder(activity) + } + builder.setTitle("Failed to load MoPub interstitial ad") + .setMessage("Error code: $errorCode") + .setIcon(android.R.drawable.ic_dialog_alert) + .show() + } + + override fun onInterstitialShown(interstitial: MoPubInterstitial) {} + override fun onInterstitialClicked(interstitial: MoPubInterstitial) {} + override fun onInterstitialDismissed(interstitial: MoPubInterstitial) {} + } + adUnit = InterstitialAdUnit(configId) + adUnit?.setAutoRefreshPeriodMillis(autoRefreshTime) + adUnit?.fetchDemand(interstitial) { resultCode -> + Log.d(TAG, "Result code: $resultCode") + interstitial.load() + } + } + + fun destroy() { + adUnit?.stopAutoRefresh() + adUnit = null + } + +} \ No newline at end of file diff --git a/Example/PrebidDemoKotlin/src/main/java/org/prebid/mobile/prebidkotlindemo/ads/inapp/InAppBanner.kt b/Example/PrebidDemoKotlin/src/main/java/org/prebid/mobile/prebidkotlindemo/ads/inapp/InAppBanner.kt new file mode 100644 index 000000000..eadbf6798 --- /dev/null +++ b/Example/PrebidDemoKotlin/src/main/java/org/prebid/mobile/prebidkotlindemo/ads/inapp/InAppBanner.kt @@ -0,0 +1,28 @@ +package org.prebid.mobile.prebidkotlindemo.ads.inapp + +import android.view.ViewGroup +import org.prebid.mobile.rendering.bidding.data.AdSize +import org.prebid.mobile.rendering.bidding.parallel.BannerView + +object InAppBanner { + + private var adView: BannerView? = null + + fun create(wrapper: ViewGroup, autoRefreshTime: Int, width: Int, height: Int, configId: String) { + adView = BannerView( + wrapper.context, + configId, + AdSize(width, height) + ) + wrapper.addView(adView) + + adView?.setAutoRefreshDelay(autoRefreshTime) + adView?.loadAd() + } + + fun destroy() { + adView?.destroy() + adView = null + } + +} \ No newline at end of file diff --git a/Example/PrebidDemoKotlin/src/main/java/org/prebid/mobile/prebidkotlindemo/ads/inapp/InAppInterstitial.kt b/Example/PrebidDemoKotlin/src/main/java/org/prebid/mobile/prebidkotlindemo/ads/inapp/InAppInterstitial.kt new file mode 100644 index 000000000..3bb8c5982 --- /dev/null +++ b/Example/PrebidDemoKotlin/src/main/java/org/prebid/mobile/prebidkotlindemo/ads/inapp/InAppInterstitial.kt @@ -0,0 +1,33 @@ +package org.prebid.mobile.prebidkotlindemo.ads.inapp + +import android.content.Context +import org.prebid.mobile.rendering.bidding.data.AdSize +import org.prebid.mobile.rendering.bidding.listeners.InterstitialAdUnitListener +import org.prebid.mobile.rendering.bidding.parallel.InterstitialAdUnit +import org.prebid.mobile.rendering.errors.AdException + +object InAppInterstitial { + + private var adUnit: InterstitialAdUnit? = null + + fun create(context: Context, minPercentageWidth: Int, minPercentageHeight: Int, configId: String) { + adUnit = InterstitialAdUnit(context, configId, AdSize(minPercentageWidth, minPercentageHeight)) + adUnit?.setInterstitialAdUnitListener(object : InterstitialAdUnitListener { + override fun onAdLoaded(interstitialAdUnit: InterstitialAdUnit?) { + adUnit?.show() + } + + override fun onAdDisplayed(interstitialAdUnit: InterstitialAdUnit?) {} + override fun onAdFailed(interstitialAdUnit: InterstitialAdUnit?, exception: AdException?) {} + override fun onAdClicked(interstitialAdUnit: InterstitialAdUnit?) {} + override fun onAdClosed(interstitialAdUnit: InterstitialAdUnit?) {} + }) + adUnit?.loadAd() + } + + fun destroy() { + adUnit?.destroy() + adUnit = null + } + +} \ No newline at end of file diff --git a/Example/PrebidDemoKotlin/src/main/java/org/prebid/mobile/prebidkotlindemo/ads/inapp/InAppRewardedInterstitial.kt b/Example/PrebidDemoKotlin/src/main/java/org/prebid/mobile/prebidkotlindemo/ads/inapp/InAppRewardedInterstitial.kt new file mode 100644 index 000000000..65ffa67c3 --- /dev/null +++ b/Example/PrebidDemoKotlin/src/main/java/org/prebid/mobile/prebidkotlindemo/ads/inapp/InAppRewardedInterstitial.kt @@ -0,0 +1,33 @@ +package org.prebid.mobile.prebidkotlindemo.ads.inapp + +import android.content.Context +import org.prebid.mobile.rendering.bidding.listeners.RewardedAdUnitListener +import org.prebid.mobile.rendering.bidding.parallel.RewardedAdUnit +import org.prebid.mobile.rendering.errors.AdException + +object InAppRewardedInterstitial { + + private var adUnit: RewardedAdUnit? = null + + fun create(context: Context, configId: String) { + adUnit = RewardedAdUnit(context, configId) + adUnit?.setRewardedAdUnitListener(object : RewardedAdUnitListener { + override fun onAdLoaded(rewardedAdUnit: RewardedAdUnit?) { + adUnit?.show() + } + + override fun onAdDisplayed(rewardedAdUnit: RewardedAdUnit?) {} + override fun onAdFailed(rewardedAdUnit: RewardedAdUnit?, exception: AdException?) {} + override fun onAdClicked(rewardedAdUnit: RewardedAdUnit?) {} + override fun onAdClosed(rewardedAdUnit: RewardedAdUnit?) {} + override fun onUserEarnedReward(rewardedAdUnit: RewardedAdUnit?) {} + }) + adUnit?.loadAd() + } + + fun destroy() { + adUnit?.destroy() + adUnit = null + } + +} \ No newline at end of file diff --git a/Example/PrebidDemoKotlin/src/main/java/org/prebid/mobile/prebidkotlindemo/ads/inapp/InAppVideoBanner.kt b/Example/PrebidDemoKotlin/src/main/java/org/prebid/mobile/prebidkotlindemo/ads/inapp/InAppVideoBanner.kt new file mode 100644 index 000000000..aba161006 --- /dev/null +++ b/Example/PrebidDemoKotlin/src/main/java/org/prebid/mobile/prebidkotlindemo/ads/inapp/InAppVideoBanner.kt @@ -0,0 +1,26 @@ +package org.prebid.mobile.prebidkotlindemo.ads.inapp + +import android.view.ViewGroup +import org.prebid.mobile.rendering.bidding.data.AdSize +import org.prebid.mobile.rendering.bidding.enums.VideoPlacementType +import org.prebid.mobile.rendering.bidding.parallel.BannerView + +object InAppVideoBanner { + + private var bannerView: BannerView? = null + + fun create(wrapper: ViewGroup, autoRefreshTime: Int, width: Int, height: Int, configId: String) { + bannerView = BannerView(wrapper.context, configId, AdSize(width, height)) + wrapper.addView(bannerView) + + bannerView?.videoPlacementType = VideoPlacementType.IN_BANNER + bannerView?.setAutoRefreshDelay(autoRefreshTime) + bannerView?.loadAd() + } + + fun destroy() { + bannerView?.destroy() + bannerView = null + } + +} \ No newline at end of file diff --git a/Example/PrebidDemoKotlin/src/main/java/org/prebid/mobile/prebidkotlindemo/ads/inapp/InAppVideoInterstitial.kt b/Example/PrebidDemoKotlin/src/main/java/org/prebid/mobile/prebidkotlindemo/ads/inapp/InAppVideoInterstitial.kt new file mode 100644 index 000000000..bd534dcec --- /dev/null +++ b/Example/PrebidDemoKotlin/src/main/java/org/prebid/mobile/prebidkotlindemo/ads/inapp/InAppVideoInterstitial.kt @@ -0,0 +1,33 @@ +package org.prebid.mobile.prebidkotlindemo.ads.inapp + +import android.content.Context +import org.prebid.mobile.rendering.bidding.enums.AdUnitFormat +import org.prebid.mobile.rendering.bidding.listeners.InterstitialAdUnitListener +import org.prebid.mobile.rendering.bidding.parallel.InterstitialAdUnit +import org.prebid.mobile.rendering.errors.AdException + +object InAppVideoInterstitial { + + private var adUnit: InterstitialAdUnit? = null + + fun create(context: Context, configId: String) { + adUnit = InterstitialAdUnit(context, configId, AdUnitFormat.VIDEO) + adUnit?.setInterstitialAdUnitListener(object : InterstitialAdUnitListener { + override fun onAdLoaded(interstitialAdUnit: InterstitialAdUnit?) { + adUnit?.show() + } + + override fun onAdDisplayed(interstitialAdUnit: InterstitialAdUnit?) {} + override fun onAdFailed(interstitialAdUnit: InterstitialAdUnit?, exception: AdException?) {} + override fun onAdClicked(interstitialAdUnit: InterstitialAdUnit?) {} + override fun onAdClosed(interstitialAdUnit: InterstitialAdUnit?) {} + }) + adUnit?.loadAd() + } + + fun destroy() { + adUnit?.destroy() + adUnit = null + } + +} \ No newline at end of file diff --git a/Example/PrebidDemoKotlin/src/main/java/org/prebid/mobile/prebidkotlindemo/ads/inappgam/InAppGamBanner.kt b/Example/PrebidDemoKotlin/src/main/java/org/prebid/mobile/prebidkotlindemo/ads/inappgam/InAppGamBanner.kt new file mode 100644 index 000000000..f3114514f --- /dev/null +++ b/Example/PrebidDemoKotlin/src/main/java/org/prebid/mobile/prebidkotlindemo/ads/inappgam/InAppGamBanner.kt @@ -0,0 +1,26 @@ +package org.prebid.mobile.prebidkotlindemo.ads.inappgam + +import android.view.ViewGroup +import org.prebid.mobile.eventhandlers.GamBannerEventHandler +import org.prebid.mobile.rendering.bidding.data.AdSize +import org.prebid.mobile.rendering.bidding.parallel.BannerView + +object InAppGamBanner { + + private var adView: BannerView? = null + + fun create(wrapper: ViewGroup, autoRefreshTime: Int, width: Int, height: Int, adUnitId: String, configId: String) { + val eventHandler = GamBannerEventHandler(wrapper.context, adUnitId, AdSize(width, height)) + adView = BannerView(wrapper.context, configId, eventHandler) + wrapper.addView(adView) + + adView?.setAutoRefreshDelay(autoRefreshTime) + adView?.loadAd() + } + + fun destroy() { + adView?.destroy() + adView = null + } + +} \ No newline at end of file diff --git a/Example/PrebidDemoKotlin/src/main/java/org/prebid/mobile/prebidkotlindemo/ads/inappgam/InAppGamInterstitial.kt b/Example/PrebidDemoKotlin/src/main/java/org/prebid/mobile/prebidkotlindemo/ads/inappgam/InAppGamInterstitial.kt new file mode 100644 index 000000000..5b733ef8e --- /dev/null +++ b/Example/PrebidDemoKotlin/src/main/java/org/prebid/mobile/prebidkotlindemo/ads/inappgam/InAppGamInterstitial.kt @@ -0,0 +1,41 @@ +package org.prebid.mobile.prebidkotlindemo.ads.inappgam + +import android.app.Activity +import org.prebid.mobile.eventhandlers.GamInterstitialEventHandler +import org.prebid.mobile.rendering.bidding.data.AdSize +import org.prebid.mobile.rendering.bidding.listeners.InterstitialAdUnitListener +import org.prebid.mobile.rendering.bidding.parallel.InterstitialAdUnit +import org.prebid.mobile.rendering.errors.AdException + +object InAppGamInterstitial { + + private var adUnit: InterstitialAdUnit? = null + + fun create( + activity: Activity, + minPercentageWidth: Int, + minPercentageHeight: Int, + adUnitId: String, + configId: String + ) { + val eventHandler = GamInterstitialEventHandler(activity, adUnitId) + adUnit = InterstitialAdUnit(activity, configId, AdSize(minPercentageWidth, minPercentageHeight), eventHandler) + adUnit?.setInterstitialAdUnitListener(object : InterstitialAdUnitListener { + override fun onAdLoaded(interstitialAdUnit: InterstitialAdUnit?) { + adUnit?.show() + } + + override fun onAdDisplayed(interstitialAdUnit: InterstitialAdUnit?) {} + override fun onAdFailed(interstitialAdUnit: InterstitialAdUnit?, exception: AdException?) {} + override fun onAdClicked(interstitialAdUnit: InterstitialAdUnit?) {} + override fun onAdClosed(interstitialAdUnit: InterstitialAdUnit?) {} + }) + adUnit?.loadAd() + } + + fun destroy() { + adUnit?.destroy() + adUnit = null + } + +} \ No newline at end of file diff --git a/Example/PrebidDemoKotlin/src/main/java/org/prebid/mobile/prebidkotlindemo/ads/inappgam/InAppGamRewardedInterstitial.kt b/Example/PrebidDemoKotlin/src/main/java/org/prebid/mobile/prebidkotlindemo/ads/inappgam/InAppGamRewardedInterstitial.kt new file mode 100644 index 000000000..5605a622e --- /dev/null +++ b/Example/PrebidDemoKotlin/src/main/java/org/prebid/mobile/prebidkotlindemo/ads/inappgam/InAppGamRewardedInterstitial.kt @@ -0,0 +1,35 @@ +package org.prebid.mobile.prebidkotlindemo.ads.inappgam + +import android.app.Activity +import org.prebid.mobile.eventhandlers.GamRewardedEventHandler +import org.prebid.mobile.rendering.bidding.listeners.RewardedAdUnitListener +import org.prebid.mobile.rendering.bidding.parallel.RewardedAdUnit +import org.prebid.mobile.rendering.errors.AdException + +object InAppGamRewardedInterstitial { + + private var adUnit: RewardedAdUnit? = null + + fun create(activity: Activity, adUnitId: String, configId: String) { + val eventHandler = GamRewardedEventHandler(activity, adUnitId) + adUnit = RewardedAdUnit(activity, configId, eventHandler) + adUnit?.setRewardedAdUnitListener(object : RewardedAdUnitListener { + override fun onAdLoaded(rewardedAdUnit: RewardedAdUnit?) { + adUnit?.show() + } + + override fun onAdDisplayed(rewardedAdUnit: RewardedAdUnit?) {} + override fun onAdFailed(rewardedAdUnit: RewardedAdUnit?, exception: AdException?) {} + override fun onAdClicked(rewardedAdUnit: RewardedAdUnit?) {} + override fun onAdClosed(rewardedAdUnit: RewardedAdUnit?) {} + override fun onUserEarnedReward(rewardedAdUnit: RewardedAdUnit?) {} + }) + adUnit?.loadAd() + } + + fun destroy() { + adUnit?.destroy() + adUnit = null + } + +} \ No newline at end of file diff --git a/Example/PrebidDemoKotlin/src/main/java/org/prebid/mobile/prebidkotlindemo/ads/inappgam/InAppGamVideoBanner.kt b/Example/PrebidDemoKotlin/src/main/java/org/prebid/mobile/prebidkotlindemo/ads/inappgam/InAppGamVideoBanner.kt new file mode 100644 index 000000000..b245face3 --- /dev/null +++ b/Example/PrebidDemoKotlin/src/main/java/org/prebid/mobile/prebidkotlindemo/ads/inappgam/InAppGamVideoBanner.kt @@ -0,0 +1,36 @@ +package org.prebid.mobile.prebidkotlindemo.ads.inappgam + +import android.view.ViewGroup +import org.prebid.mobile.eventhandlers.GamBannerEventHandler +import org.prebid.mobile.rendering.bidding.data.AdSize +import org.prebid.mobile.rendering.bidding.enums.VideoPlacementType +import org.prebid.mobile.rendering.bidding.parallel.BannerView + +object InAppGamVideoBanner { + + private var bannerView: BannerView? = null + + fun create( + wrapper: ViewGroup, + autoRefreshTime: Int, + width: Int, + height: Int, + adUnitId: String, + configId: String + ) { + val eventHandler = GamBannerEventHandler(wrapper.context, adUnitId, AdSize(width, height)) + + bannerView = BannerView(wrapper.context, configId, eventHandler) + bannerView?.videoPlacementType = VideoPlacementType.IN_BANNER + bannerView?.setAutoRefreshDelay(autoRefreshTime) + wrapper.addView(bannerView) + + bannerView?.loadAd() + } + + fun destroy() { + bannerView?.destroy() + bannerView = null + } + +} \ No newline at end of file diff --git a/Example/PrebidDemoKotlin/src/main/java/org/prebid/mobile/prebidkotlindemo/ads/inappgam/InAppGamVideoInterstitial.kt b/Example/PrebidDemoKotlin/src/main/java/org/prebid/mobile/prebidkotlindemo/ads/inappgam/InAppGamVideoInterstitial.kt new file mode 100644 index 000000000..484a2b936 --- /dev/null +++ b/Example/PrebidDemoKotlin/src/main/java/org/prebid/mobile/prebidkotlindemo/ads/inappgam/InAppGamVideoInterstitial.kt @@ -0,0 +1,35 @@ +package org.prebid.mobile.prebidkotlindemo.ads.inappgam + +import android.app.Activity +import org.prebid.mobile.eventhandlers.GamInterstitialEventHandler +import org.prebid.mobile.rendering.bidding.enums.AdUnitFormat +import org.prebid.mobile.rendering.bidding.listeners.InterstitialAdUnitListener +import org.prebid.mobile.rendering.bidding.parallel.InterstitialAdUnit +import org.prebid.mobile.rendering.errors.AdException + +object InAppGamVideoInterstitial { + + private var adUnit: InterstitialAdUnit? = null + + fun create(activity: Activity, adUnitId: String, configId: String) { + val eventHandler = GamInterstitialEventHandler(activity, adUnitId) + adUnit = InterstitialAdUnit(activity, configId, AdUnitFormat.VIDEO, eventHandler) + adUnit?.setInterstitialAdUnitListener(object : InterstitialAdUnitListener { + override fun onAdLoaded(interstitialAdUnit: InterstitialAdUnit?) { + adUnit?.show() + } + + override fun onAdDisplayed(interstitialAdUnit: InterstitialAdUnit?) {} + override fun onAdFailed(interstitialAdUnit: InterstitialAdUnit?, exception: AdException?) {} + override fun onAdClicked(interstitialAdUnit: InterstitialAdUnit?) {} + override fun onAdClosed(interstitialAdUnit: InterstitialAdUnit?) {} + }) + adUnit?.loadAd() + } + + fun destroy() { + adUnit?.destroy() + adUnit = null + } + +} \ No newline at end of file diff --git a/Example/PrebidDemoKotlin/src/main/java/org/prebid/mobile/prebidkotlindemo/ads/inappmopub/InAppMoPubBanner.kt b/Example/PrebidDemoKotlin/src/main/java/org/prebid/mobile/prebidkotlindemo/ads/inappmopub/InAppMoPubBanner.kt new file mode 100644 index 000000000..8a5609a91 --- /dev/null +++ b/Example/PrebidDemoKotlin/src/main/java/org/prebid/mobile/prebidkotlindemo/ads/inappmopub/InAppMoPubBanner.kt @@ -0,0 +1,53 @@ +package org.prebid.mobile.prebidkotlindemo.ads.inappmopub + +import android.annotation.SuppressLint +import android.view.ViewGroup +import com.mopub.common.MoPub +import com.mopub.common.SdkConfiguration +import com.mopub.mediation.MoPubMediationUtils +import com.mopub.mobileads.MoPubView +import org.prebid.mobile.rendering.bidding.data.AdSize +import org.prebid.mobile.rendering.bidding.display.MediationBannerAdUnit + +object InAppMoPubBanner { + + @SuppressLint("StaticFieldLeak") + private var bannerView: MoPubView? = null + private var adUnit: MediationBannerAdUnit? = null + + fun create( + wrapper: ViewGroup, + autoRefreshTime: Int, + width: Int, + height: Int, + adUnitId: String, + configId: String + ) { + adUnit = MediationBannerAdUnit( + wrapper.context, + configId, + AdSize(width, height), + MoPubMediationUtils() + ) + adUnit?.setRefreshInterval(autoRefreshTime) + bannerView = MoPubView(wrapper.context) + bannerView?.setAdUnitId(adUnitId) + + wrapper.addView(bannerView) + + MoPub.initializeSdk(wrapper.context, SdkConfiguration.Builder(adUnitId).build()) { + adUnit?.fetchDemand(bannerView) { + bannerView?.loadAd() + } + } + } + + fun destroy() { + bannerView?.destroy() + bannerView = null + + adUnit?.destroy() + adUnit = null + } + +} \ No newline at end of file diff --git a/Example/PrebidDemoKotlin/src/main/java/org/prebid/mobile/prebidkotlindemo/ads/inappmopub/InAppMoPubInterstitial.kt b/Example/PrebidDemoKotlin/src/main/java/org/prebid/mobile/prebidkotlindemo/ads/inappmopub/InAppMoPubInterstitial.kt new file mode 100644 index 000000000..33a6a44d4 --- /dev/null +++ b/Example/PrebidDemoKotlin/src/main/java/org/prebid/mobile/prebidkotlindemo/ads/inappmopub/InAppMoPubInterstitial.kt @@ -0,0 +1,59 @@ +package org.prebid.mobile.prebidkotlindemo.ads.inappmopub + +import android.annotation.SuppressLint +import android.app.Activity +import com.mopub.common.MoPub +import com.mopub.common.SdkConfiguration +import com.mopub.mediation.MoPubMediationUtils +import com.mopub.mobileads.MoPubErrorCode +import com.mopub.mobileads.MoPubInterstitial +import org.prebid.mobile.rendering.bidding.data.AdSize +import org.prebid.mobile.rendering.bidding.display.MediationInterstitialAdUnit + +object InAppMoPubInterstitial { + + @SuppressLint("StaticFieldLeak") + private var moPubInterstitial: MoPubInterstitial? = null + private var adUnit: MediationInterstitialAdUnit? = null + + fun create( + activity: Activity, + minPercentageWidth: Int, + minPercentageHeight: Int, + adUnitId: String, + configId: String + ) { + moPubInterstitial = MoPubInterstitial(activity, adUnitId) + moPubInterstitial?.interstitialAdListener = object : MoPubInterstitial.InterstitialAdListener { + override fun onInterstitialLoaded(p0: MoPubInterstitial?) { + moPubInterstitial?.show() + } + + override fun onInterstitialFailed(p0: MoPubInterstitial?, p1: MoPubErrorCode?) {} + override fun onInterstitialShown(p0: MoPubInterstitial?) {} + override fun onInterstitialClicked(p0: MoPubInterstitial?) {} + override fun onInterstitialDismissed(p0: MoPubInterstitial?) {} + } + adUnit = MediationInterstitialAdUnit( + activity, + configId, + AdSize(minPercentageWidth, minPercentageHeight), + MoPubMediationUtils() + ) + + MoPub.initializeSdk(activity, SdkConfiguration.Builder(adUnitId).build()) { + adUnit?.fetchDemand(moPubInterstitial) { + moPubInterstitial?.load() + } + } + } + + fun destroy() { + moPubInterstitial?.destroy() + moPubInterstitial = null + + adUnit?.destroy() + adUnit = null + } + +} \ No newline at end of file diff --git a/Example/PrebidDemoKotlin/src/main/java/org/prebid/mobile/prebidkotlindemo/ads/inappmopub/InAppMoPubRewardedInterstitial.kt b/Example/PrebidDemoKotlin/src/main/java/org/prebid/mobile/prebidkotlindemo/ads/inappmopub/InAppMoPubRewardedInterstitial.kt new file mode 100644 index 000000000..2ec030494 --- /dev/null +++ b/Example/PrebidDemoKotlin/src/main/java/org/prebid/mobile/prebidkotlindemo/ads/inappmopub/InAppMoPubRewardedInterstitial.kt @@ -0,0 +1,67 @@ +package org.prebid.mobile.prebidkotlindemo.ads.inappmopub + +import android.app.Activity +import com.mopub.common.MoPub +import com.mopub.common.MoPubReward +import com.mopub.common.SdkConfiguration +import com.mopub.mediation.MoPubMediationUtils +import com.mopub.mobileads.MoPubErrorCode +import com.mopub.mobileads.MoPubRewardedAdListener +import com.mopub.mobileads.MoPubRewardedAdManager +import com.mopub.mobileads.MoPubRewardedAds +import org.prebid.mobile.rendering.bidding.display.MediationRewardedVideoAdUnit + +object InAppMoPubRewardedInterstitial { + + private var adUnit: MediationRewardedVideoAdUnit? = null + + fun create(activity: Activity, adUnitId: String, configId: String, keywordsMap: HashMap) { + val builder = SdkConfiguration.Builder(adUnitId) + MoPubRewardedAdManager.init(activity) + MoPubRewardedAdManager.updateActivity(activity) + MoPubRewardedAds.setRewardedAdListener(object : MoPubRewardedAdListener { + override fun onRewardedAdLoadSuccess(adUnitId: String) { + MoPubRewardedAds.showRewardedAd(adUnitId) + } + + override fun onRewardedAdClicked(adUnitId: String) {} + override fun onRewardedAdClosed(adUnitId: String) {} + override fun onRewardedAdCompleted(adUnitIds: Set, reward: MoPubReward) {} + override fun onRewardedAdLoadFailure(adUnitId: String, errorCode: MoPubErrorCode) {} + override fun onRewardedAdShowError(adUnitId: String, errorCode: MoPubErrorCode) {} + override fun onRewardedAdStarted(adUnitId: String) {} + }) + + adUnit = MediationRewardedVideoAdUnit( + activity, + adUnitId, + configId, + MoPubMediationUtils() + ) + MoPub.initializeSdk(activity, builder.build()) { + adUnit?.fetchDemand(keywordsMap) { + val keywordsString = convertMapToMoPubKeywords(keywordsMap) + val params = MoPubRewardedAdManager.RequestParameters(keywordsString) + + MoPubRewardedAds.loadRewardedAd(adUnitId, params, null) + } + } + } + + fun destroy() { + adUnit?.destroy() + adUnit = null + } + + private fun convertMapToMoPubKeywords(keywordMap: Map): String? { + val result = StringBuilder() + for (key in keywordMap.keys) { + result.append(key).append(":").append(keywordMap[key]).append(",") + } + if (result.isNotEmpty()) { + result.delete(result.length - 1, result.length) + } + return result.toString() + } + +} \ No newline at end of file diff --git a/Example/PrebidDemoKotlin/src/main/java/org/prebid/mobile/prebidkotlindemo/ads/inappmopub/InAppMoPubVideoInterstitial.kt b/Example/PrebidDemoKotlin/src/main/java/org/prebid/mobile/prebidkotlindemo/ads/inappmopub/InAppMoPubVideoInterstitial.kt new file mode 100644 index 000000000..60ff5222e --- /dev/null +++ b/Example/PrebidDemoKotlin/src/main/java/org/prebid/mobile/prebidkotlindemo/ads/inappmopub/InAppMoPubVideoInterstitial.kt @@ -0,0 +1,53 @@ +package org.prebid.mobile.prebidkotlindemo.ads.inappmopub + +import android.annotation.SuppressLint +import android.app.Activity +import com.mopub.common.MoPub +import com.mopub.common.SdkConfiguration +import com.mopub.mediation.MoPubMediationUtils +import com.mopub.mobileads.MoPubErrorCode +import com.mopub.mobileads.MoPubInterstitial +import org.prebid.mobile.rendering.bidding.display.MediationInterstitialAdUnit +import org.prebid.mobile.rendering.bidding.enums.AdUnitFormat + +object InAppMoPubVideoInterstitial { + + @SuppressLint("StaticFieldLeak") + private var moPubInterstitial: MoPubInterstitial? = null + private var adUnit: MediationInterstitialAdUnit? = null + + fun create(activity: Activity, adUnitId: String, configId: String) { + moPubInterstitial = MoPubInterstitial(activity, adUnitId) + moPubInterstitial?.interstitialAdListener = object : MoPubInterstitial.InterstitialAdListener { + override fun onInterstitialLoaded(p0: MoPubInterstitial?) { + moPubInterstitial?.show() + } + + override fun onInterstitialFailed(p0: MoPubInterstitial?, p1: MoPubErrorCode?) {} + override fun onInterstitialShown(p0: MoPubInterstitial?) {} + override fun onInterstitialClicked(p0: MoPubInterstitial?) {} + override fun onInterstitialDismissed(p0: MoPubInterstitial?) {} + } + adUnit = MediationInterstitialAdUnit( + activity, + configId, + AdUnitFormat.VIDEO, + MoPubMediationUtils() + ) + + MoPub.initializeSdk(activity, SdkConfiguration.Builder(adUnitId).build()) { + adUnit?.fetchDemand(moPubInterstitial) { + moPubInterstitial?.load() + } + } + } + + fun destroy() { + moPubInterstitial?.destroy() + moPubInterstitial = null + + adUnit?.destroy() + adUnit = null + } + +} \ No newline at end of file diff --git a/Example/PrebidDemoKotlin/src/main/res/layout/activity_demo.xml b/Example/PrebidDemoKotlin/src/main/res/layout/activity_demo.xml index abc5150e3..c13ae69f7 100644 --- a/Example/PrebidDemoKotlin/src/main/res/layout/activity_demo.xml +++ b/Example/PrebidDemoKotlin/src/main/res/layout/activity_demo.xml @@ -1,12 +1,33 @@ - + - + - \ No newline at end of file + + + + + + + + + \ No newline at end of file diff --git a/Example/PrebidDemoKotlin/src/main/res/layout/activity_main.xml b/Example/PrebidDemoKotlin/src/main/res/layout/activity_main.xml index 121e000e0..a407d2a6d 100644 --- a/Example/PrebidDemoKotlin/src/main/res/layout/activity_main.xml +++ b/Example/PrebidDemoKotlin/src/main/res/layout/activity_main.xml @@ -1,125 +1,103 @@ - + + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="vertical" + tools:context="org.prebid.mobile.prebidkotlindemo.MainActivity"> - + - - - + - + + + - - - + - + + - - + - + - + + + +