From cd2400f457b405a2b364e0411fc8d82a5c637cd3 Mon Sep 17 00:00:00 2001 From: Valentin Petrovych <72038591+ValentinPostindustria@users.noreply.github.com> Date: Wed, 2 Mar 2022 15:53:25 +0200 Subject: [PATCH] Corrections in Internal test app (#369) * fix: correct mistakes in delegates #361 * fix: fix MoPub rewarded video adapter and feed example #361 * fix: small fixes in banner and interstitial examples #361 * feat: add security config for Kotlin app --- .../src/main/AndroidManifest.xml | 3 +- .../main/res/xml/network_security_config.xml | 11 +++ ...ment.kt => AdMobBannerFlexibleFragment.kt} | 4 +- ...agment.kt => AdMobBannerRandomFragment.kt} | 2 +- .../admob/AdMobInterstitialFragment.kt | 4 +- .../bidding/admob/AdMobNativeFragment.kt | 34 +++++---- .../bidding/base/BaseBidRewardedFragment.kt | 71 ++++++++++--------- .../plugplay/bidding/gam/GamNativeFragment.kt | 32 +++++---- .../bidding/gam/GamRewardedVideoFragment.kt | 3 +- .../bidding/mopub/MoPubNativeFeedFragment.kt | 3 + .../mopub/MoPubRewardedVideoFragment.kt | 4 +- .../mopub/MopubInterstitialFragment.kt | 11 +-- .../bidding/mopub/MopubNativeFragment.kt | 27 ++++++- .../bidding/ppm/PpmRewardedVideoFragment.kt | 4 +- .../utils/DemoItemProvider.kt | 4 +- .../utils/adapters/MoPubNativeFeedAdapter.kt | 64 +++++++++++++++-- .../main/res/layout/events_admob_native.xml | 58 +++++++++++++++ .../main/res/layout/fragment_admob_native.xml | 57 +++++++++++++++ .../main/res/layout/lyt_native_ad_events.xml | 31 -------- .../main/res/layout/lyt_native_gam_events.xml | 11 +-- .../res/navigation/bidding_navigation.xml | 8 +-- .../src/main/res/values/strings.xml | 2 +- .../mobile/admob/PrebidBannerAdapter.java | 1 + .../mobile/admob/PrebidNativeAdMapper.java | 21 ++++-- .../mobile/admob/PrebidNativeAdapter.java | 4 +- .../src/main/java/org/prebid/mobile/Util.java | 4 +- .../MoPubRewardedVideoMediationUtils.java | 13 +++- .../mobileads/PrebidRewardedVideoAdapter.java | 23 +++--- .../nativeads/PrebidNativeAdRenderer.java | 16 +++-- .../nativeads/PrebidNativeAdWrapper.java | 14 ++++ .../mopub/nativeads/PrebidNativeAdapter.java | 2 + 31 files changed, 393 insertions(+), 153 deletions(-) create mode 100644 Example/PrebidDemoKotlin/src/main/res/xml/network_security_config.xml rename Example/PrebidInternalTestApp/src/main/java/org/prebid/mobile/renderingtestapp/plugplay/bidding/admob/{FlexibleAdMobBannerFragment.kt => AdMobBannerFlexibleFragment.kt} (93%) rename Example/PrebidInternalTestApp/src/main/java/org/prebid/mobile/renderingtestapp/plugplay/bidding/admob/{RandomAdMobBannerFragment.kt => AdMobBannerRandomFragment.kt} (94%) create mode 100644 Example/PrebidInternalTestApp/src/main/res/layout/events_admob_native.xml create mode 100644 Example/PrebidInternalTestApp/src/main/res/layout/fragment_admob_native.xml delete mode 100644 Example/PrebidInternalTestApp/src/main/res/layout/lyt_native_ad_events.xml diff --git a/Example/PrebidDemoKotlin/src/main/AndroidManifest.xml b/Example/PrebidDemoKotlin/src/main/AndroidManifest.xml index 87ba66054..22614a32d 100644 --- a/Example/PrebidDemoKotlin/src/main/AndroidManifest.xml +++ b/Example/PrebidDemoKotlin/src/main/AndroidManifest.xml @@ -20,7 +20,8 @@ android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" - android:theme="@style/AppTheme"> + android:networkSecurityConfig="@xml/network_security_config" + android:theme="@style/AppTheme"> + + + + + + + + + + diff --git a/Example/PrebidInternalTestApp/src/main/java/org/prebid/mobile/renderingtestapp/plugplay/bidding/admob/FlexibleAdMobBannerFragment.kt b/Example/PrebidInternalTestApp/src/main/java/org/prebid/mobile/renderingtestapp/plugplay/bidding/admob/AdMobBannerFlexibleFragment.kt similarity index 93% rename from Example/PrebidInternalTestApp/src/main/java/org/prebid/mobile/renderingtestapp/plugplay/bidding/admob/FlexibleAdMobBannerFragment.kt rename to Example/PrebidInternalTestApp/src/main/java/org/prebid/mobile/renderingtestapp/plugplay/bidding/admob/AdMobBannerFlexibleFragment.kt index 8addf6eb7..55ba30ae6 100644 --- a/Example/PrebidInternalTestApp/src/main/java/org/prebid/mobile/renderingtestapp/plugplay/bidding/admob/FlexibleAdMobBannerFragment.kt +++ b/Example/PrebidInternalTestApp/src/main/java/org/prebid/mobile/renderingtestapp/plugplay/bidding/admob/AdMobBannerFlexibleFragment.kt @@ -13,7 +13,7 @@ import org.prebid.mobile.rendering.bidding.display.MediationBannerAdUnit import com.google.android.gms.ads.AdSize as GamAdSize -class FlexibleAdMobBannerFragment : AdMobBannerFragment() { +class AdMobBannerFlexibleFragment : AdMobBannerFragment() { companion object { private const val TAG = "FlexibleAdMobBanner" @@ -44,7 +44,7 @@ class FlexibleAdMobBannerFragment : AdMobBannerFragment() { AdSize(width, height), mediationUtils ) - adUnit?.addAdditionalSizes(AdSize(320, 50)) + adUnit?.addAdditionalSizes(AdSize(728, 90)) adUnit?.setRefreshInterval(refreshDelay) return adUnit } diff --git a/Example/PrebidInternalTestApp/src/main/java/org/prebid/mobile/renderingtestapp/plugplay/bidding/admob/RandomAdMobBannerFragment.kt b/Example/PrebidInternalTestApp/src/main/java/org/prebid/mobile/renderingtestapp/plugplay/bidding/admob/AdMobBannerRandomFragment.kt similarity index 94% rename from Example/PrebidInternalTestApp/src/main/java/org/prebid/mobile/renderingtestapp/plugplay/bidding/admob/RandomAdMobBannerFragment.kt rename to Example/PrebidInternalTestApp/src/main/java/org/prebid/mobile/renderingtestapp/plugplay/bidding/admob/AdMobBannerRandomFragment.kt index 00b0ec947..05ad503ad 100644 --- a/Example/PrebidInternalTestApp/src/main/java/org/prebid/mobile/renderingtestapp/plugplay/bidding/admob/RandomAdMobBannerFragment.kt +++ b/Example/PrebidInternalTestApp/src/main/java/org/prebid/mobile/renderingtestapp/plugplay/bidding/admob/AdMobBannerRandomFragment.kt @@ -5,7 +5,7 @@ import org.prebid.mobile.admob.PrebidBannerAdapter import org.prebid.mobile.rendering.bidding.display.BidResponseCache import kotlin.random.Random -class RandomAdMobBannerFragment : AdMobBannerFragment() { +class AdMobBannerRandomFragment : AdMobBannerFragment() { private val random = Random.Default diff --git a/Example/PrebidInternalTestApp/src/main/java/org/prebid/mobile/renderingtestapp/plugplay/bidding/admob/AdMobInterstitialFragment.kt b/Example/PrebidInternalTestApp/src/main/java/org/prebid/mobile/renderingtestapp/plugplay/bidding/admob/AdMobInterstitialFragment.kt index 9b8c597f3..84872052e 100644 --- a/Example/PrebidInternalTestApp/src/main/java/org/prebid/mobile/renderingtestapp/plugplay/bidding/admob/AdMobInterstitialFragment.kt +++ b/Example/PrebidInternalTestApp/src/main/java/org/prebid/mobile/renderingtestapp/plugplay/bidding/admob/AdMobInterstitialFragment.kt @@ -50,7 +50,9 @@ open class AdMobInterstitialFragment : AdFragment() { var adUnitFormat = AdUnitFormat.DISPLAY if (isVideo) adUnitFormat = AdUnitFormat.VIDEO adUnit = MediationInterstitialAdUnit(activity, configId, adUnitFormat, mediationUtils) - adUnit?.setMinSizePercentage(30, 30) + if (!isVideo) { + adUnit?.setMinSizePercentage(30, 30) + } return adUnit } diff --git a/Example/PrebidInternalTestApp/src/main/java/org/prebid/mobile/renderingtestapp/plugplay/bidding/admob/AdMobNativeFragment.kt b/Example/PrebidInternalTestApp/src/main/java/org/prebid/mobile/renderingtestapp/plugplay/bidding/admob/AdMobNativeFragment.kt index b173ca021..5cc21245d 100644 --- a/Example/PrebidInternalTestApp/src/main/java/org/prebid/mobile/renderingtestapp/plugplay/bidding/admob/AdMobNativeFragment.kt +++ b/Example/PrebidInternalTestApp/src/main/java/org/prebid/mobile/renderingtestapp/plugplay/bidding/admob/AdMobNativeFragment.kt @@ -9,13 +9,10 @@ import android.view.ViewGroup import com.google.android.gms.ads.* import com.google.android.gms.ads.nativead.NativeAd import com.google.android.gms.ads.nativead.NativeAdOptions -import kotlinx.android.synthetic.main.events_admob_rewarded.* +import kotlinx.android.synthetic.main.events_admob_native.* import kotlinx.android.synthetic.main.fragment_bidding_banner.* -import org.prebid.mobile.Host -import org.prebid.mobile.PrebidMobile import org.prebid.mobile.admob.PrebidNativeAdapter import org.prebid.mobile.rendering.bidding.display.MediationNativeAdUnit -import org.prebid.mobile.rendering.sdk.PrebidRenderingSettings import org.prebid.mobile.renderingtestapp.AdFragment import org.prebid.mobile.renderingtestapp.R import org.prebid.mobile.renderingtestapp.databinding.ViewNativeAdBinding @@ -32,7 +29,7 @@ class AdMobNativeFragment : AdFragment() { protected var adUnit: MediationNativeAdUnit? = null protected var adLoader: AdLoader? = null - override val layoutRes = R.layout.fragment_admob_rewarded + override val layoutRes = R.layout.fragment_admob_native override fun initUi(view: View, savedInstanceState: Bundle?) { super.initUi(view, savedInstanceState) @@ -46,14 +43,7 @@ class AdMobNativeFragment : AdFragment() { } override fun initAd(): Any? { - val hostUrl = PrebidRenderingSettings.getBidServerHost().hostUrl - val accountId = PrebidRenderingSettings.getAccountId() - - val host = Host.CUSTOM - host.hostUrl = hostUrl - PrebidMobile.setPrebidServerHost(host) - PrebidMobile.setPrebidServerAccountId(accountId) - PrebidMobile.setApplicationContext(requireContext()) + configureOriginalPrebid() val nativeAdOptions = NativeAdOptions .Builder() @@ -62,16 +52,32 @@ class AdMobNativeFragment : AdFragment() { .Builder(requireContext(), adUnitId) .forNativeAd { ad: NativeAd -> btnAdLoaded?.isEnabled = true + btnLoad?.isEnabled = true nativeAd = ad viewContainer?.let { createCustomView(it, nativeAd!!) } } .withAdListener(object : AdListener() { + + override fun onAdImpression() { + btnAdShowed?.isEnabled = true + } + + override fun onAdOpened() { + btnAdOpened?.isEnabled = true + } + + override fun onAdClicked() { + btnAdClicked?.isEnabled = true + } + override fun onAdFailedToLoad(adError: LoadAdError) { btnAdFailed?.isEnabled = true + btnLoad?.isEnabled = true Log.e(TAG, "Error: ${adError.message}") } + }) .withNativeAdOptions(nativeAdOptions) .build() @@ -106,6 +112,8 @@ class AdMobNativeFragment : AdFragment() { private fun resetAdEvents() { btnAdLoaded?.isEnabled = false btnAdFailed?.isEnabled = false + btnAdClicked?.isEnabled = false + btnAdShowed?.isEnabled = false } private fun createCustomView(wrapper: ViewGroup, nativeAd: NativeAd) { diff --git a/Example/PrebidInternalTestApp/src/main/java/org/prebid/mobile/renderingtestapp/plugplay/bidding/base/BaseBidRewardedFragment.kt b/Example/PrebidInternalTestApp/src/main/java/org/prebid/mobile/renderingtestapp/plugplay/bidding/base/BaseBidRewardedFragment.kt index 485853a32..9315722e4 100644 --- a/Example/PrebidInternalTestApp/src/main/java/org/prebid/mobile/renderingtestapp/plugplay/bidding/base/BaseBidRewardedFragment.kt +++ b/Example/PrebidInternalTestApp/src/main/java/org/prebid/mobile/renderingtestapp/plugplay/bidding/base/BaseBidRewardedFragment.kt @@ -28,7 +28,8 @@ import org.prebid.mobile.renderingtestapp.AdFragment import org.prebid.mobile.renderingtestapp.R import org.prebid.mobile.renderingtestapp.plugplay.config.AdConfiguratorDialogFragment -abstract class BaseBidRewardedFragment : AdFragment(), RewardedAdUnitListener { +abstract class BaseBidRewardedFragment : AdFragment() { + private val TAG = BaseBidRewardedFragment::class.java.simpleName override val layoutRes = R.layout.fragment_bidding_interstitial @@ -61,38 +62,6 @@ abstract class BaseBidRewardedFragment : AdFragment(), RewardedAdUnitListener { rewardedAdUnit?.destroy() } - override fun onAdFailed(rewardedAdUnit: RewardedAdUnit?, exception: AdException?) { - Log.d(TAG, "onAdFailed() called with: rewardedAdUnit = [$rewardedAdUnit], exception = [$exception]") - btnAdFailed?.isEnabled = true - btnLoad?.isEnabled = true - } - - override fun onAdDisplayed(rewardedAdUnit: RewardedAdUnit?) { - Log.d(TAG, "onAdDisplayed() called with: rewardedAdUnit = [$rewardedAdUnit]") - btnAdDisplayed?.isEnabled = true - } - - override fun onAdClosed(rewardedAdUnit: RewardedAdUnit?) { - Log.d(TAG, "onAdClosed() called with: rewardedAdUnit = [$rewardedAdUnit]") - btnAdClosed?.isEnabled = true - } - - override fun onAdClicked(rewardedAdUnit: RewardedAdUnit?) { - Log.d(TAG, "onAdClicked() called with: rewardedAdUnit = [$rewardedAdUnit]") - btnAdClicked?.isEnabled = true - } - - override fun onAdLoaded(rewardedAdUnit: RewardedAdUnit?) { - Log.d(TAG, "onAdLoaded() called with: reward = [${rewardedAdUnit?.userReward}]") - btnAdLoaded?.isEnabled = true - btnLoad?.setText(R.string.text_show) - btnLoad?.isEnabled = true - } - - override fun onUserEarnedReward(rewardedAdUnit: RewardedAdUnit?) { - Log.d(TAG, "onUserEarnedReward() called with: reward = [${rewardedAdUnit?.userReward}]") - } - private fun handleLoadInterstitialClick() { when (btnLoad?.text) { getString(R.string.text_load) -> { @@ -106,4 +75,40 @@ abstract class BaseBidRewardedFragment : AdFragment(), RewardedAdUnitListener { } } } + + protected fun createRewardedAdUnitListener() = object : RewardedAdUnitListener { + + override fun onAdLoaded(rewardedAdUnit: RewardedAdUnit?) { + Log.d(TAG, "onAdLoaded() called with: reward = [${rewardedAdUnit?.userReward}]") + btnAdLoaded?.isEnabled = true + btnLoad?.setText(R.string.text_show) + btnLoad?.isEnabled = true + } + + override fun onAdDisplayed(rewardedAdUnit: RewardedAdUnit?) { + Log.d(TAG, "onAdDisplayed() called with: rewardedAdUnit = [$rewardedAdUnit]") + btnAdDisplayed?.isEnabled = true + } + + override fun onAdFailed(rewardedAdUnit: RewardedAdUnit?, exception: AdException?) { + Log.d(TAG, "onAdFailed() called with: rewardedAdUnit = [$rewardedAdUnit], exception = [$exception]") + btnAdFailed?.isEnabled = true + btnLoad?.isEnabled = true + } + + override fun onAdClicked(rewardedAdUnit: RewardedAdUnit?) { + Log.d(TAG, "onAdClicked() called with: rewardedAdUnit = [$rewardedAdUnit]") + btnAdClicked?.isEnabled = true + } + + override fun onAdClosed(rewardedAdUnit: RewardedAdUnit?) { + Log.d(TAG, "onAdClosed() called with: rewardedAdUnit = [$rewardedAdUnit]") + btnAdClosed?.isEnabled = true + } + + override fun onUserEarnedReward(rewardedAdUnit: RewardedAdUnit?) { + Log.d(TAG, "onUserEarnedReward() called with: reward = [${rewardedAdUnit?.userReward}]") + } + + } } \ No newline at end of file diff --git a/Example/PrebidInternalTestApp/src/main/java/org/prebid/mobile/renderingtestapp/plugplay/bidding/gam/GamNativeFragment.kt b/Example/PrebidInternalTestApp/src/main/java/org/prebid/mobile/renderingtestapp/plugplay/bidding/gam/GamNativeFragment.kt index f8de7cb4b..546fe6140 100644 --- a/Example/PrebidInternalTestApp/src/main/java/org/prebid/mobile/renderingtestapp/plugplay/bidding/gam/GamNativeFragment.kt +++ b/Example/PrebidInternalTestApp/src/main/java/org/prebid/mobile/renderingtestapp/plugplay/bidding/gam/GamNativeFragment.kt @@ -103,15 +103,7 @@ class GamNativeFragment( btnUnifiedRequestSuccess?.isEnabled = true handleNativeAd(unifiedAd) } - .withAdListener(object : AdListener() { - override fun onAdFailedToLoad(p0: LoadAdError) { - btnPrimaryAdRequestFailure?.isEnabled = true - } - - override fun onAdClicked() { - btnAdClicked?.isEnabled = true - } - }) + .withAdListener(getGamAdListener()) .build() private fun createCustomFormatAdLoader() = AdLoader @@ -124,11 +116,7 @@ class GamNativeFragment( }, null ) - .withAdListener(object : AdListener() { - override fun onAdFailedToLoad(p0: LoadAdError) { - btnPrimaryAdRequestFailure?.isEnabled = true - } - }) + .withAdListener(getGamAdListener()) .build() private fun handleNativeAd(nativeAd: NativeAd?) { @@ -182,6 +170,8 @@ class GamNativeFragment( customFormatAd.performClick("cta") btnAdClicked?.isEnabled = true } + + customFormatAd.recordImpression() } private fun inflateNativeAd(nativeAd: NativeAd?) { @@ -247,4 +237,18 @@ class GamNativeFragment( private fun isCustomFormatExample() = !TextUtils.isEmpty(customFormatId) + private fun getGamAdListener() = object : AdListener() { + override fun onAdFailedToLoad(p0: LoadAdError) { + btnPrimaryAdRequestFailure?.isEnabled = true + } + + override fun onAdClicked() { + btnAdClicked?.isEnabled = true + } + + override fun onAdImpression() { + btnAdImpression?.isEnabled = true + } + } + } \ No newline at end of file diff --git a/Example/PrebidInternalTestApp/src/main/java/org/prebid/mobile/renderingtestapp/plugplay/bidding/gam/GamRewardedVideoFragment.kt b/Example/PrebidInternalTestApp/src/main/java/org/prebid/mobile/renderingtestapp/plugplay/bidding/gam/GamRewardedVideoFragment.kt index 1b71e59ea..186ffca6f 100644 --- a/Example/PrebidInternalTestApp/src/main/java/org/prebid/mobile/renderingtestapp/plugplay/bidding/gam/GamRewardedVideoFragment.kt +++ b/Example/PrebidInternalTestApp/src/main/java/org/prebid/mobile/renderingtestapp/plugplay/bidding/gam/GamRewardedVideoFragment.kt @@ -25,6 +25,7 @@ class GamRewardedVideoFragment : BaseBidRewardedFragment() { override fun initRewardedAd(adUnitId: String?, configId: String?) { val eventHandler = GamRewardedEventHandler(activity, adUnitId) rewardedAdUnit = RewardedAdUnit(context, configId, eventHandler) - rewardedAdUnit?.setRewardedAdUnitListener(this) + rewardedAdUnit?.setRewardedAdUnitListener(createRewardedAdUnitListener()) } + } \ No newline at end of file diff --git a/Example/PrebidInternalTestApp/src/main/java/org/prebid/mobile/renderingtestapp/plugplay/bidding/mopub/MoPubNativeFeedFragment.kt b/Example/PrebidInternalTestApp/src/main/java/org/prebid/mobile/renderingtestapp/plugplay/bidding/mopub/MoPubNativeFeedFragment.kt index ceb7dc15c..b5ca88255 100644 --- a/Example/PrebidInternalTestApp/src/main/java/org/prebid/mobile/renderingtestapp/plugplay/bidding/mopub/MoPubNativeFeedFragment.kt +++ b/Example/PrebidInternalTestApp/src/main/java/org/prebid/mobile/renderingtestapp/plugplay/bidding/mopub/MoPubNativeFeedFragment.kt @@ -21,7 +21,10 @@ import org.prebid.mobile.renderingtestapp.utils.adapters.BaseFeedAdapter import org.prebid.mobile.renderingtestapp.utils.adapters.MoPubNativeFeedAdapter class MoPubNativeFeedFragment : BaseFeedFragment() { + override fun initFeedAdapter(): BaseFeedAdapter { + configureOriginalPrebid() return MoPubNativeFeedAdapter(requireContext(), configId, adUnitId) } + } \ No newline at end of file diff --git a/Example/PrebidInternalTestApp/src/main/java/org/prebid/mobile/renderingtestapp/plugplay/bidding/mopub/MoPubRewardedVideoFragment.kt b/Example/PrebidInternalTestApp/src/main/java/org/prebid/mobile/renderingtestapp/plugplay/bidding/mopub/MoPubRewardedVideoFragment.kt index 81714018d..65a6db3ce 100644 --- a/Example/PrebidInternalTestApp/src/main/java/org/prebid/mobile/renderingtestapp/plugplay/bidding/mopub/MoPubRewardedVideoFragment.kt +++ b/Example/PrebidInternalTestApp/src/main/java/org/prebid/mobile/renderingtestapp/plugplay/bidding/mopub/MoPubRewardedVideoFragment.kt @@ -102,9 +102,7 @@ class MoPubRewardedVideoFragment: AdFragment() { } } - override fun configuratorMode(): AdConfiguratorDialogFragment.AdConfiguratorMode? { - return AdConfiguratorDialogFragment.AdConfiguratorMode.INTERSTITIAL - } + override fun configuratorMode() = AdConfiguratorDialogFragment.AdConfiguratorMode.INTERSTITIAL override fun onDestroyView() { super.onDestroyView() diff --git a/Example/PrebidInternalTestApp/src/main/java/org/prebid/mobile/renderingtestapp/plugplay/bidding/mopub/MopubInterstitialFragment.kt b/Example/PrebidInternalTestApp/src/main/java/org/prebid/mobile/renderingtestapp/plugplay/bidding/mopub/MopubInterstitialFragment.kt index 734422392..7ed957ddd 100644 --- a/Example/PrebidInternalTestApp/src/main/java/org/prebid/mobile/renderingtestapp/plugplay/bidding/mopub/MopubInterstitialFragment.kt +++ b/Example/PrebidInternalTestApp/src/main/java/org/prebid/mobile/renderingtestapp/plugplay/bidding/mopub/MopubInterstitialFragment.kt @@ -73,7 +73,7 @@ class MopubInterstitialFragment : AdFragment() { } override fun initAd(): Any? { - initInterstitialView(adUnitId, configId, width, height, getTitle()) + initInterstitialView(adUnitId, configId, getTitle()) return mopubInterstitialAdUnit } @@ -95,7 +95,7 @@ class MopubInterstitialFragment : AdFragment() { moPubInterstitial.destroy() } - private fun initInterstitialView(adUnitId: String, configId: String, minWidthPerc: Int, minHeightPerc: Int, title: String) { + private fun initInterstitialView(adUnitId: String, configId: String, title: String) { moPubInterstitial = MoPubInterstitial(requireActivity(), adUnitId) moPubInterstitial.interstitialAdListener = mListener @@ -108,8 +108,7 @@ class MopubInterstitialFragment : AdFragment() { AdUnitFormat.VIDEO, mediationUtils ) - } - else { + } else { MediationInterstitialAdUnit( requireContext(), configId, @@ -117,7 +116,9 @@ class MopubInterstitialFragment : AdFragment() { mediationUtils ) } - mopubInterstitialAdUnit.setMinSizePercentage(30, 30) + if (!isVideo) { + mopubInterstitialAdUnit.setMinSizePercentage(width, height) + } } private fun handleLoadButtonClick() { diff --git a/Example/PrebidInternalTestApp/src/main/java/org/prebid/mobile/renderingtestapp/plugplay/bidding/mopub/MopubNativeFragment.kt b/Example/PrebidInternalTestApp/src/main/java/org/prebid/mobile/renderingtestapp/plugplay/bidding/mopub/MopubNativeFragment.kt index 341266e13..9380e3f8a 100644 --- a/Example/PrebidInternalTestApp/src/main/java/org/prebid/mobile/renderingtestapp/plugplay/bidding/mopub/MopubNativeFragment.kt +++ b/Example/PrebidInternalTestApp/src/main/java/org/prebid/mobile/renderingtestapp/plugplay/bidding/mopub/MopubNativeFragment.kt @@ -17,6 +17,8 @@ package org.prebid.mobile.renderingtestapp.plugplay.bidding.mopub import android.os.Bundle +import android.os.Handler +import android.os.Looper import android.util.Log import android.view.LayoutInflater import android.view.View @@ -65,6 +67,7 @@ open class MopubNativeFragment : AdFragment() { } protected val nativeEventListener = object : NativeAd.MoPubNativeEventListener { + override fun onImpression(view: View?) { btnAdEventImpression?.isEnabled = true } @@ -104,7 +107,8 @@ open class MopubNativeFragment : AdFragment() { .iconImageId(R.id.ivNativeIcon) .callToActionId(R.id.btnNativeAction) .build() - mopubNative?.registerAdRenderer(PrebidNativeAdRenderer(viewBinder, null)) + + mopubNative?.registerAdRenderer(PrebidNativeAdRenderer(viewBinder, createPrebidListener())) mopubNative?.registerAdRenderer(MoPubStaticNativeAdRenderer(viewBinder)) requestParametersBuilder = RequestParameters.Builder() @@ -157,6 +161,22 @@ open class MopubNativeFragment : AdFragment() { return result.toString() } + private fun createPrebidListener() = object : PrebidNativeAdEventListener { + + override fun onAdClicked() { + btnAdClicked?.isEnabled = true + } + + override fun onAdImpression() { + doInMainThread { + btnAdEventImpression?.isEnabled = true + } + } + + override fun onAdExpired() {} + + } + private fun configureNativeAdUnit() { mopubNativeAdUnit?.apply { setContextType(NativeAdUnit.CONTEXT_TYPE.SOCIAL_CENTRIC) @@ -207,4 +227,9 @@ open class MopubNativeFragment : AdFragment() { } } + private fun doInMainThread(function: () -> Unit) { + val handler = Handler(Looper.getMainLooper()) + handler.postAtFrontOfQueue(function) + } + } \ No newline at end of file diff --git a/Example/PrebidInternalTestApp/src/main/java/org/prebid/mobile/renderingtestapp/plugplay/bidding/ppm/PpmRewardedVideoFragment.kt b/Example/PrebidInternalTestApp/src/main/java/org/prebid/mobile/renderingtestapp/plugplay/bidding/ppm/PpmRewardedVideoFragment.kt index 2403811bf..5067685a3 100644 --- a/Example/PrebidInternalTestApp/src/main/java/org/prebid/mobile/renderingtestapp/plugplay/bidding/ppm/PpmRewardedVideoFragment.kt +++ b/Example/PrebidInternalTestApp/src/main/java/org/prebid/mobile/renderingtestapp/plugplay/bidding/ppm/PpmRewardedVideoFragment.kt @@ -20,8 +20,10 @@ import org.prebid.mobile.rendering.bidding.parallel.RewardedAdUnit import org.prebid.mobile.renderingtestapp.plugplay.bidding.base.BaseBidRewardedFragment class PpmRewardedVideoFragment : BaseBidRewardedFragment() { + override fun initRewardedAd(adUnitId: String?, configId: String?) { rewardedAdUnit = RewardedAdUnit(context, configId) - rewardedAdUnit?.setRewardedAdUnitListener(this) + rewardedAdUnit?.setRewardedAdUnitListener(createRewardedAdUnitListener()) } + } \ No newline at end of file diff --git a/Example/PrebidInternalTestApp/src/main/java/org/prebid/mobile/renderingtestapp/utils/DemoItemProvider.kt b/Example/PrebidInternalTestApp/src/main/java/org/prebid/mobile/renderingtestapp/utils/DemoItemProvider.kt index 0e13f4b2e..5dddfc8d8 100644 --- a/Example/PrebidInternalTestApp/src/main/java/org/prebid/mobile/renderingtestapp/utils/DemoItemProvider.kt +++ b/Example/PrebidInternalTestApp/src/main/java/org/prebid/mobile/renderingtestapp/utils/DemoItemProvider.kt @@ -1058,9 +1058,9 @@ class DemoItemProvider private constructor() { adMobFlexibleBannerAction, adMobBannerTagList, createBannerBundle( - R.string.mock_config_id_banner_728x90, + R.string.mock_config_id_banner_320x50, R.string.admob_banner_bidding_ad_unit_id_adapter, - 728, 90 + 320, 50 ) ) ) diff --git a/Example/PrebidInternalTestApp/src/main/java/org/prebid/mobile/renderingtestapp/utils/adapters/MoPubNativeFeedAdapter.kt b/Example/PrebidInternalTestApp/src/main/java/org/prebid/mobile/renderingtestapp/utils/adapters/MoPubNativeFeedAdapter.kt index a89c81d64..f10d1b7d8 100644 --- a/Example/PrebidInternalTestApp/src/main/java/org/prebid/mobile/renderingtestapp/utils/adapters/MoPubNativeFeedAdapter.kt +++ b/Example/PrebidInternalTestApp/src/main/java/org/prebid/mobile/renderingtestapp/utils/adapters/MoPubNativeFeedAdapter.kt @@ -24,6 +24,7 @@ import com.mopub.common.MoPub import com.mopub.common.SdkConfiguration import com.mopub.mediation.MoPubNativeMediationUtils import com.mopub.nativeads.* +import org.prebid.mobile.* import org.prebid.mobile.rendering.bidding.display.MediationNativeAdUnit import org.prebid.mobile.renderingtestapp.R @@ -32,9 +33,9 @@ class MoPubNativeFeedAdapter( private val configId: String, private val adUnitId: String ) : BaseFeedAdapter(context) { + private var mopubNative: MoPubNative? = null private var mopubNativeAdUnit: MediationNativeAdUnit? = null - private var keywordsContainer = HashMap() override fun destroy() { mopubNative?.destroy() @@ -43,9 +44,9 @@ class MoPubNativeFeedAdapter( override fun initAndLoadAdView(parent: ViewGroup?, container: FrameLayout): View? { val context = container.context + val adapterHelper = AdapterHelper(context, 0, 3) mopubNative = MoPubNative(context, adUnitId, object : MoPubNative.MoPubNativeNetworkListener { override fun onNativeLoad(nativeAd: NativeAd?) { - val adapterHelper = AdapterHelper(context, 0, 3) val view = adapterHelper.getAdView(null, parent, nativeAd) container.addView(view) } @@ -63,17 +64,18 @@ class MoPubNativeFeedAdapter( mopubNative?.registerAdRenderer(PrebidNativeAdRenderer(viewBinder, null)) mopubNative?.registerAdRenderer(MoPubStaticNativeAdRenderer(viewBinder)) - val mediationUtils = - MoPubNativeMediationUtils(keywordsContainer, mopubNative) + val keywords = HashMap() + val mediationUtils = MoPubNativeMediationUtils(keywords, mopubNative) mopubNativeAdUnit = MediationNativeAdUnit( configId, mediationUtils ) + configureNativeAdUnit() MoPub.initializeSdk(context, SdkConfiguration.Builder(adUnitId).build()) { mopubNativeAdUnit?.fetchDemand { val requestParameters = RequestParameters.Builder() - .keywords(convertMapToMoPubKeywords(keywordsContainer)) + .keywords(convertMapToMoPubKeywords(keywords)) .build() mopubNative?.makeRequest(requestParameters) } @@ -92,4 +94,56 @@ class MoPubNativeFeedAdapter( } return result.toString() } + + + private fun configureNativeAdUnit() { + mopubNativeAdUnit?.apply { + setContextType(NativeAdUnit.CONTEXT_TYPE.SOCIAL_CENTRIC) + setContextSubType(NativeAdUnit.CONTEXTSUBTYPE.GENERAL_SOCIAL) + setPlacementType(NativeAdUnit.PLACEMENTTYPE.CONTENT_FEED) + + val methods = arrayListOf( + NativeEventTracker.EVENT_TRACKING_METHOD.IMAGE, + NativeEventTracker.EVENT_TRACKING_METHOD.JS + ) + val eventTracker = NativeEventTracker(NativeEventTracker.EVENT_TYPE.IMPRESSION, methods) + addEventTracker(eventTracker) + + val assetTitle = NativeTitleAsset() + assetTitle.setLength(90) + assetTitle.isRequired = true + addAsset(assetTitle) + + val assetIcon = NativeImageAsset() + assetIcon.imageType = NativeImageAsset.IMAGE_TYPE.ICON + assetIcon.wMin = 20 + assetIcon.hMin = 20 + assetIcon.isRequired = true + addAsset(assetIcon) + + val image = NativeImageAsset() + image.imageType = NativeImageAsset.IMAGE_TYPE.MAIN + image.hMin = 200 + image.wMin = 200 + image.isRequired = true + addAsset(image) + + val data = NativeDataAsset() + data.len = 90 + data.dataType = NativeDataAsset.DATA_TYPE.SPONSORED + data.isRequired = true + addAsset(data) + + val body = NativeDataAsset() + body.isRequired = true + body.dataType = NativeDataAsset.DATA_TYPE.DESC + addAsset(body) + + val cta = NativeDataAsset() + cta.isRequired = true + cta.dataType = NativeDataAsset.DATA_TYPE.CTATEXT + addAsset(cta) + } + } + } \ No newline at end of file diff --git a/Example/PrebidInternalTestApp/src/main/res/layout/events_admob_native.xml b/Example/PrebidInternalTestApp/src/main/res/layout/events_admob_native.xml new file mode 100644 index 000000000..fae29849f --- /dev/null +++ b/Example/PrebidInternalTestApp/src/main/res/layout/events_admob_native.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Example/PrebidInternalTestApp/src/main/res/layout/fragment_admob_native.xml b/Example/PrebidInternalTestApp/src/main/res/layout/fragment_admob_native.xml new file mode 100644 index 000000000..7ea740b38 --- /dev/null +++ b/Example/PrebidInternalTestApp/src/main/res/layout/fragment_admob_native.xml @@ -0,0 +1,57 @@ + + + + + + + + + +