Skip to content

Commit

Permalink
Updating Moloco Android adapter for release version 3.5.0
Browse files Browse the repository at this point in the history
Added handling of error returned by Moloco in the new version.

PiperOrigin-RevId: 716272425
  • Loading branch information
Mobile Ads Developer Relations authored and copybara-github committed Jan 16, 2025
1 parent 6c9f593 commit 4e5a54b
Show file tree
Hide file tree
Showing 8 changed files with 198 additions and 49 deletions.
8 changes: 4 additions & 4 deletions ThirdPartyAdapters/moloco/moloco/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ ext {
// String property to store the proper name of the mediation network adapter.
adapterName = "Moloco"
// String property to store version name.
stringVersion = "3.2.0.0"
stringVersion = "3.5.0.0"
// String property to store group id.
stringGroupId = "com.google.ads.mediation"
// Jacoco version to generate code coverage data
Expand All @@ -30,7 +30,7 @@ android {
defaultConfig {
minSdk 21
targetSdk 33
versionCode 3020000
versionCode 3050000
versionName stringVersion
multiDexEnabled true
buildConfigField('String', 'ADAPTER_VERSION', "\"${stringVersion}\"")
Expand Down Expand Up @@ -130,8 +130,8 @@ task jacocoTestReport(type: JacocoReport,

dependencies {
implementation 'androidx.core:core-ktx:1.13.1'
implementation 'com.google.android.gms:play-services-ads:23.3.0'
implementation 'com.moloco.sdk:moloco-sdk:3.2.0'
implementation 'com.google.android.gms:play-services-ads:23.6.0'
implementation 'com.moloco.sdk:moloco-sdk:3.5.0'

testImplementation 'androidx.test:core:1.6.1'
testImplementation 'androidx.test.espresso:espresso-core:3.6.1'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
package com.google.ads.mediation.moloco

import android.view.View
import com.google.ads.mediation.moloco.MolocoMediationAdapter.Companion.SDK_ERROR_DOMAIN
import com.google.android.gms.ads.AdError
import com.google.android.gms.ads.AdSize
import com.google.android.gms.ads.mediation.MediationAdLoadCallback
Expand All @@ -28,6 +29,7 @@ import com.moloco.sdk.publisher.CreateBannerCallback
import com.moloco.sdk.publisher.Moloco
import com.moloco.sdk.publisher.MolocoAd
import com.moloco.sdk.publisher.MolocoAdError
import com.moloco.sdk.publisher.MolocoAdError.AdCreateError

/**
* Used to load Moloco banner ads and mediate callbacks between Google Mobile Ads SDK and Moloco
Expand All @@ -48,13 +50,19 @@ private constructor(
fun loadAd() {
val createBannerCallback =
object : CreateBannerCallback {
override fun invoke(banner: Banner?) {
override fun invoke(banner: Banner?, molocoError: AdCreateError?) {
if (molocoError != null) {
val adError = AdError(molocoError.errorCode, molocoError.description, SDK_ERROR_DOMAIN)
mediationAdLoadCallback.onFailure(adError)
return
}
// Gracefully handle the scenario where ad object is null even if no error is reported.
if (banner == null) {
val adError =
AdError(
MolocoMediationAdapter.ERROR_CODE_MISSING_AD_FAILED_TO_CREATE,
MolocoMediationAdapter.ERROR_MSG_MISSING_AD_FAILED_TO_CREATE,
MolocoMediationAdapter.SDK_ERROR_DOMAIN,
MolocoMediationAdapter.ERROR_CODE_AD_IS_NULL,
MolocoMediationAdapter.ERROR_MSG_AD_IS_NULL,
MolocoMediationAdapter.ADAPTER_ERROR_DOMAIN,
)
mediationAdLoadCallback.onFailure(adError)
return
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
package com.google.ads.mediation.moloco

import android.content.Context
import com.google.ads.mediation.moloco.MolocoMediationAdapter.Companion.SDK_ERROR_DOMAIN
import com.google.android.gms.ads.AdError
import com.google.android.gms.ads.mediation.MediationAdLoadCallback
import com.google.android.gms.ads.mediation.MediationInterstitialAd
Expand Down Expand Up @@ -44,13 +45,19 @@ private constructor(
private var interstitialAdCallback: MediationInterstitialAdCallback? = null

fun loadAd() {
Moloco.createInterstitial(adUnitId, watermark) { returnedAd ->
Moloco.createInterstitial(adUnitId, watermark) { returnedAd, molocoError ->
if (molocoError != null) {
val adError = AdError(molocoError.errorCode, molocoError.description, SDK_ERROR_DOMAIN)
mediationAdLoadCallback.onFailure(adError)
return@createInterstitial
}
// Gracefully handle the scenario where ad object is null even if no error is reported.
if (returnedAd == null) {
val adError =
AdError(
MolocoMediationAdapter.ERROR_CODE_MISSING_AD_FAILED_TO_CREATE,
MolocoMediationAdapter.ERROR_MSG_MISSING_AD_FAILED_TO_CREATE,
MolocoMediationAdapter.SDK_ERROR_DOMAIN,
MolocoMediationAdapter.ERROR_CODE_AD_IS_NULL,
MolocoMediationAdapter.ERROR_MSG_AD_IS_NULL,
MolocoMediationAdapter.ADAPTER_ERROR_DOMAIN,
)
mediationAdLoadCallback.onFailure(adError)
return@createInterstitial
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,8 @@ class MolocoMediationAdapter : RtbAdapter() {
}

override fun collectSignals(signalData: RtbSignalData, callback: SignalCallbacks) {
Moloco.getBidToken { bidToken: String, errorType: MolocoAdError.ErrorType? ->
Moloco.getBidToken(signalData.context) { bidToken: String, errorType: MolocoAdError.ErrorType?
->
if (errorType != null) {
val adError = AdError(errorType.errorCode, errorType.description, SDK_ERROR_DOMAIN)
callback.onFailure(adError)
Expand Down Expand Up @@ -191,12 +192,12 @@ class MolocoMediationAdapter : RtbAdapter() {
const val KEY_AD_UNIT_ID = "ad_unit_id"
const val ERROR_CODE_MISSING_APP_KEY = 101
const val ERROR_CODE_MISSING_AD_UNIT = 102
const val ERROR_CODE_MISSING_AD_FAILED_TO_CREATE = 103
const val ERROR_CODE_AD_IS_NULL = 103
const val ERROR_MSG_MISSING_APP_KEY =
"Missing or invalid App Key configured for this ad source instance in the AdMob or Ad Manager UI."
const val ERROR_MSG_MISSING_AD_UNIT =
"Missing or invalid Ad Unit configured for this ad source instance in the AdMob or Ad Manager UI."
const val ERROR_MSG_MISSING_AD_FAILED_TO_CREATE = "Create Ad object returned was null."
const val ERROR_MSG_AD_IS_NULL = "Moloco ad object returned was null."
const val ADAPTER_ERROR_DOMAIN = "com.google.ads.mediation.moloco"
const val SDK_ERROR_DOMAIN = "com.moloco.sdk"
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
package com.google.ads.mediation.moloco

import android.content.Context
import com.google.ads.mediation.moloco.MolocoMediationAdapter.Companion.SDK_ERROR_DOMAIN
import com.google.android.gms.ads.AdError
import com.google.android.gms.ads.mediation.MediationAdLoadCallback
import com.google.android.gms.ads.mediation.MediationRewardedAd
Expand Down Expand Up @@ -45,13 +46,19 @@ private constructor(
private var rewardedAdCallback: MediationRewardedAdCallback? = null

fun loadAd() {
Moloco.createRewardedInterstitial(adUnitId, watermark) { returnedAd ->
Moloco.createRewardedInterstitial(adUnitId, watermark) { returnedAd, molocoError ->
if (molocoError != null) {
val adError = AdError(molocoError.errorCode, molocoError.description, SDK_ERROR_DOMAIN)
mediationAdLoadCallback.onFailure(adError)
return@createRewardedInterstitial
}
// Gracefully handle the scenario where ad object is null even if no error is reported.
if (returnedAd == null) {
val adError =
AdError(
MolocoMediationAdapter.ERROR_CODE_MISSING_AD_FAILED_TO_CREATE,
MolocoMediationAdapter.ERROR_MSG_MISSING_AD_FAILED_TO_CREATE,
MolocoMediationAdapter.SDK_ERROR_DOMAIN,
MolocoMediationAdapter.ERROR_CODE_AD_IS_NULL,
MolocoMediationAdapter.ERROR_MSG_AD_IS_NULL,
MolocoMediationAdapter.ADAPTER_ERROR_DOMAIN,
)
mediationAdLoadCallback.onFailure(adError)
return@createRewardedInterstitial
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -155,7 +155,7 @@ class MolocoInterstitialAdTest {
)
}
val capturedCallback = createInterstitialCaptor.firstValue
capturedCallback.invoke(mockInterstitialAd)
capturedCallback.invoke(mockInterstitialAd, /* error= */ null)
}
}

Expand Down
Loading

0 comments on commit 4e5a54b

Please sign in to comment.