Skip to content

Commit

Permalink
feat(AdMob): add AdMob banner examples to InternalTestApp #323
Browse files Browse the repository at this point in the history
Added 320x50, 300x250 and flexible examples.
  • Loading branch information
ValentinPostindustria committed Jan 13, 2022
1 parent d1cb443 commit 76dc9d4
Show file tree
Hide file tree
Showing 12 changed files with 1,837 additions and 286 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import android.os.Bundle
import android.util.Log
import android.view.ViewGroup
import com.google.android.gms.ads.*
import com.google.android.gms.ads.initialization.InitializationStatus
import org.prebid.mobile.admob.AdMobBannerMediationUtils
import org.prebid.mobile.admob.PrebidBannerAdapter
import org.prebid.mobile.rendering.bidding.display.MediationBannerAdUnit
Expand All @@ -26,16 +27,8 @@ object InAppAdMobBanner {
configId: String
) {
MobileAds.initialize(wrapper.context) { status ->
val statusMap = status.adapterStatusMap
for (adapterClass in statusMap.keys) {
val adapterStatus = statusMap[adapterClass]
val adapterDescription = adapterStatus?.description ?: ""
if (adapterDescription.isNotBlank()) {
Log.e("MobileAds", "Mediation adapter: $adapterClass $adapterDescription")
} else {
Log.d("MobileAds", "Mediation adapter: $adapterClass")
}
}
Log.d("MobileAds", "Initialization complete.")
logAdaptersInitializationStatus(status)
}

/** Google recommends put activity for mediation ad networks */
Expand Down Expand Up @@ -81,4 +74,17 @@ object InAppAdMobBanner {
adUnit = null
}

private fun logAdaptersInitializationStatus(status: InitializationStatus) {
val statusMap = status.adapterStatusMap
for (adapterClass in statusMap.keys) {
val adapterStatus = statusMap[adapterClass]
val adapterDescription = adapterStatus?.description ?: ""
if (adapterDescription.isNotBlank()) {
Log.e("MobileAds", "Mediation adapter: $adapterClass $adapterDescription")
} else {
Log.d("MobileAds", "Mediation adapter: $adapterClass")
}
}
}

}
19 changes: 13 additions & 6 deletions Example/PrebidInternalTestApp/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
package="org.prebid.mobile.renderingtestapp">

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>

<application
android:name=".InternalTestApplication"
Expand Down Expand Up @@ -57,15 +58,21 @@
android:configChanges="keyboardHidden|orientation|screenSize"/>

<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version"/>
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version"/>

<meta-data
android:name="com.google.android.gms.ads.AD_MANAGER_APP"
android:value="true"/>
android:name="com.google.android.gms.ads.AD_MANAGER_APP"
android:value="true"/>

<meta-data android:name="com.google.android.gms.ads.flag.NATIVE_AD_DEBUGGER_ENABLED"
android:value="false" />
<meta-data
android:name="com.google.android.gms.ads.flag.NATIVE_AD_DEBUGGER_ENABLED"
android:value="false"/>

<!--AdMob id-->
<meta-data
android:name="com.google.android.gms.ads.APPLICATION_ID"
android:value="ca-app-pub-1875909575462531~6255590079"/>

</application>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,9 +37,12 @@ import org.prebid.mobile.rendering.sdk.PrebidRenderingSettings
import org.prebid.mobile.renderingtestapp.plugplay.config.*
import org.prebid.mobile.renderingtestapp.utils.*

const val CONFIGURATOR_REQUEST_CODE = 0

abstract class AdFragment : BaseFragment() {

companion object {
const val CONFIGURATOR_REQUEST_CODE = 0
}

var idlingResource = CountingIdlingResource(AdFragment::class.java.simpleName)

protected var mockAssetName: String? = null
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ enum class Tag(val tagName: String) {
IN_APP("In-App"),
GAM("GAM"),
MOPUB("MoPub"),
ADMOB("AdMob"),

ALL("All")
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,141 @@
package org.prebid.mobile.renderingtestapp.plugplay.bidding.admob

import android.os.Bundle
import android.util.Log
import android.view.View
import com.google.android.gms.ads.*
import kotlinx.android.synthetic.main.events_admob.*
import kotlinx.android.synthetic.main.events_mopub_banner.*
import kotlinx.android.synthetic.main.events_mopub_banner.btnAdClicked
import kotlinx.android.synthetic.main.events_mopub_banner.btnAdFailed
import kotlinx.android.synthetic.main.fragment_bidding_banner.*
import org.prebid.mobile.admob.AdMobBannerMediationUtils
import org.prebid.mobile.admob.PrebidBannerAdapter
import org.prebid.mobile.rendering.bidding.data.AdSize
import org.prebid.mobile.rendering.bidding.display.MediationBannerAdUnit
import org.prebid.mobile.renderingtestapp.AdFragment
import org.prebid.mobile.renderingtestapp.R
import org.prebid.mobile.renderingtestapp.plugplay.config.AdConfiguratorDialogFragment

open class AdMobBannerFragment : AdFragment() {

companion object {
private const val TAG = "AdMobBannerFragment"
}

protected var adRequest: AdRequest? = null
protected var adUnit: MediationBannerAdUnit? = null
protected var bannerView: AdView? = null
protected var adRequestExtras: Bundle? = null

override fun initUi(view: View, savedInstanceState: Bundle?) {
super.initUi(view, savedInstanceState)

adIdLabel.text = getString(R.string.label_auid, configId)
btnLoad?.setOnClickListener {
resetAdEvents()
it.isEnabled = false
loadAd()
}

btnStopRefresh?.setOnClickListener {
adUnit?.stopRefresh()
resetEventButtons()
btnLoad?.isEnabled = true
}
}

override fun initAd(): Any? {
MobileAds.initialize(requireContext()) {
Log.d("MobileAds", "Initialization complete.")
}

bannerView = AdView(requireActivity())
bannerView?.adSize = com.google.android.gms.ads.AdSize(width, height)
bannerView?.adUnitId = adUnitId
bannerView?.adListener = getListener()
viewContainer.addView(bannerView)

adRequestExtras = Bundle()
adRequest = AdRequest
.Builder()
.addCustomEventExtrasBundle(PrebidBannerAdapter::class.java, adRequestExtras!!)
.build()
val mediationUtils = AdMobBannerMediationUtils(adRequestExtras)


adUnit = MediationBannerAdUnit(
requireContext(),
configId,
AdSize(width, height),
mediationUtils
)
adUnit?.setRefreshInterval(refreshDelay)
return adUnit
}

override fun loadAd() {
adUnit?.fetchDemand { result ->
Log.d("Prebid", "Fetch demand result: $result")
bannerView?.loadAd(adRequest!!)
}
}

override fun configuratorMode(): AdConfiguratorDialogFragment.AdConfiguratorMode? {
return AdConfiguratorDialogFragment.AdConfiguratorMode.BANNER
}

override val layoutRes = R.layout.fragment_bidding_banner_admob

private fun resetAdEvents() {
btnAdDidLoad?.isEnabled = false
btnAdFailed?.isEnabled = false
btnAdClicked?.isEnabled = false
btnAdExpanded?.isEnabled = false
btnAdCollapsed?.isEnabled = false
}

override fun onDestroyView() {
super.onDestroyView()
adUnit?.destroy()
bannerView?.destroy()
}

protected fun getListener() = object : AdListener() {
override fun onAdLoaded() {
Log.d(TAG, "onAdLoaded")
resetAdEvents()
btnLoad?.isEnabled = true
btnAdLoaded?.isEnabled = true
}

override fun onAdClicked() {
Log.d(TAG, "onAdClicked")
btnAdClicked?.isEnabled = true
}

override fun onAdOpened() {
Log.d(TAG, "onAdOpened")
btnAdOpened?.isEnabled = true
}

override fun onAdImpression() {
Log.d(TAG, "onAdImpression")
btnAdImpression?.isEnabled = true
}

override fun onAdClosed() {
Log.d(TAG, "onAdClosed")
btnAdClosed?.isEnabled = true
}

override fun onAdFailedToLoad(p0: LoadAdError) {
Log.d(TAG, "onAdFailedToLoad - ${p0.message}")
resetAdEvents()
btnLoad?.isEnabled = true
btnAdFailed?.isEnabled = true
}

}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package org.prebid.mobile.renderingtestapp.plugplay.bidding.admob

import android.os.Bundle
import android.util.Log
import com.google.android.gms.ads.AdRequest
import com.google.android.gms.ads.AdView
import com.google.android.gms.ads.MobileAds
import kotlinx.android.synthetic.main.fragment_bidding_banner.*
import org.prebid.mobile.admob.AdMobBannerMediationUtils
import org.prebid.mobile.admob.PrebidBannerAdapter
import org.prebid.mobile.rendering.bidding.data.AdSize
import org.prebid.mobile.rendering.bidding.display.MediationBannerAdUnit
import com.google.android.gms.ads.AdSize as GamAdSize


class FlexibleAdMobBannerFragment : AdMobBannerFragment() {

companion object {
private const val TAG = "FlexibleAdMobBanner"
}

override fun initAd(): Any? {
MobileAds.initialize(requireContext()) {
Log.d("MobileAds", "Initialization complete.")
}

bannerView = AdView(requireActivity())
bannerView?.adSize = GamAdSize.getLandscapeInlineAdaptiveBannerAdSize(requireContext(), GamAdSize.FULL_WIDTH)
bannerView?.adUnitId = adUnitId
bannerView?.adListener = getListener()
viewContainer.addView(bannerView)

adRequestExtras = Bundle()
adRequest = AdRequest
.Builder()
.addCustomEventExtrasBundle(PrebidBannerAdapter::class.java, adRequestExtras!!)
.build()
val mediationUtils = AdMobBannerMediationUtils(adRequestExtras)


adUnit = MediationBannerAdUnit(
requireContext(),
configId,
AdSize(width, height),
mediationUtils
)
adUnit?.setRefreshInterval(refreshDelay)
return adUnit
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package org.prebid.mobile.renderingtestapp.plugplay.bidding.admob

import android.util.Log
import org.prebid.mobile.admob.PrebidBannerAdapter
import org.prebid.mobile.rendering.bidding.display.BidResponseCache
import kotlin.random.Random

class RandomAdMobBannerFragment : AdMobBannerFragment() {

private val random = Random.Default

override fun loadAd() {
adUnit?.fetchDemand { result ->
Log.d("Prebid", "Fetch demand result: $result")
randomRemovingBidResponseFromCache()
bannerView?.loadAd(adRequest!!)
}
}

private fun randomRemovingBidResponseFromCache() {
val randomValue = random.nextInt(0, 2)
val doRemove = randomValue == 1
if (doRemove) {
Log.d("RandomAdMobBanner", "Random removing response!")
val responseId = adRequestExtras?.getString(PrebidBannerAdapter.EXTRA_RESPONSE_ID) ?: ""
if (responseId.isNotBlank()) {
BidResponseCache.getInstance().popBidResponse(responseId)
}
} else {
Log.d("RandomAdMobBanner", "Without removing.")
}
}

}
Loading

0 comments on commit 76dc9d4

Please sign in to comment.