diff --git a/ThirdPartyAdapters/unity/unity/src/main/java/com/google/ads/mediation/unity/UnityInterstitialAd.java b/ThirdPartyAdapters/unity/unity/src/main/java/com/google/ads/mediation/unity/UnityInterstitialAd.java index 306d2721c..bdc9f5d11 100644 --- a/ThirdPartyAdapters/unity/unity/src/main/java/com/google/ads/mediation/unity/UnityInterstitialAd.java +++ b/ThirdPartyAdapters/unity/unity/src/main/java/com/google/ads/mediation/unity/UnityInterstitialAd.java @@ -211,13 +211,11 @@ public void showAd(Context context) { "Unity Ads received call to show before successfully loading an ad."); } + Activity activity = context instanceof Activity ? (Activity) context : null; UnityAdsShowOptions unityAdsShowOptions = unityAdsLoader.createUnityAdsShowOptionsWithId(objectId); unityAdsShowOptions.set(KEY_WATERMARK, watermark); // UnityAds can handle a null placement ID so show is always called here. - // Note: Context here is the activity that the publisher passed to GMA SDK's show() method - // (https://developers.google.com/admob/android/reference/com/google/android/gms/ads/appopen/AppOpenAd#show(android.app.Activity)). - // So, this is guaranteed to be an activity context. - unityAdsLoader.show((Activity) context, placementId, unityAdsShowOptions, this); + unityAdsLoader.show(activity, placementId, unityAdsShowOptions, this); } } diff --git a/ThirdPartyAdapters/unity/unity/src/main/java/com/google/ads/mediation/unity/UnityMediationAdapter.java b/ThirdPartyAdapters/unity/unity/src/main/java/com/google/ads/mediation/unity/UnityMediationAdapter.java index ed4806e15..2209fd021 100644 --- a/ThirdPartyAdapters/unity/unity/src/main/java/com/google/ads/mediation/unity/UnityMediationAdapter.java +++ b/ThirdPartyAdapters/unity/unity/src/main/java/com/google/ads/mediation/unity/UnityMediationAdapter.java @@ -140,8 +140,6 @@ public class UnityMediationAdapter extends RtbAdapter { static final String ERROR_MSG_NON_ACTIVITY = "Unity Ads requires an Activity context to load ads."; - static final String ERROR_MSG_CONTEXT_NULL = "Activity context is null."; - static final String ERROR_MSG_INITIALIZATION_FAILURE = "Unity Ads initialization failed: [%s] %s"; /** diff --git a/ThirdPartyAdapters/unity/unity/src/main/java/com/google/ads/mediation/unity/UnityRewardedAd.java b/ThirdPartyAdapters/unity/unity/src/main/java/com/google/ads/mediation/unity/UnityRewardedAd.java index 887ad17fd..1ddb5b572 100644 --- a/ThirdPartyAdapters/unity/unity/src/main/java/com/google/ads/mediation/unity/UnityRewardedAd.java +++ b/ThirdPartyAdapters/unity/unity/src/main/java/com/google/ads/mediation/unity/UnityRewardedAd.java @@ -16,10 +16,8 @@ import static com.google.ads.mediation.unity.UnityAdsAdapterUtils.createSDKError; import static com.google.ads.mediation.unity.UnityMediationAdapter.ADAPTER_ERROR_DOMAIN; -import static com.google.ads.mediation.unity.UnityMediationAdapter.ERROR_CONTEXT_NOT_ACTIVITY; import static com.google.ads.mediation.unity.UnityMediationAdapter.ERROR_INVALID_SERVER_PARAMETERS; import static com.google.ads.mediation.unity.UnityMediationAdapter.ERROR_MSG_MISSING_PARAMETERS; -import static com.google.ads.mediation.unity.UnityMediationAdapter.ERROR_MSG_NON_ACTIVITY; import static com.google.ads.mediation.unity.UnityMediationAdapter.KEY_WATERMARK; import static com.google.ads.mediation.unity.UnityMediationAdapter.TAG; @@ -139,22 +137,12 @@ public void loadAd(MediationRewardedAdConfiguration mediationRewardedAdConfigura @Override public void showAd(@NonNull Context context) { - if (!(context instanceof Activity)) { - AdError showError = - new AdError(ERROR_CONTEXT_NOT_ACTIVITY, ERROR_MSG_NON_ACTIVITY, ADAPTER_ERROR_DOMAIN); - Log.e(TAG, showError.toString()); - if (mediationRewardedAdCallback != null) { - mediationRewardedAdCallback.onAdFailedToShow(showError); - } - return; - } - Activity activity = (Activity) context; - // Check if the placement is ready before showing if (placementId == null) { Log.w(TAG, "Unity Ads received call to show before successfully loading an ad."); } + Activity activity = context instanceof Activity ? (Activity) context : null; UnityAdsShowOptions unityAdsShowOptions = unityAdsLoader.createUnityAdsShowOptionsWithId(objectId); unityAdsShowOptions.set(KEY_WATERMARK, watermark); diff --git a/ThirdPartyAdapters/unity/unity/src/test/kotlin/com/google/ads/mediation/unity/UnityInterstitialAdTest.kt b/ThirdPartyAdapters/unity/unity/src/test/kotlin/com/google/ads/mediation/unity/UnityInterstitialAdTest.kt index faa216772..9b8e928ff 100644 --- a/ThirdPartyAdapters/unity/unity/src/test/kotlin/com/google/ads/mediation/unity/UnityInterstitialAdTest.kt +++ b/ThirdPartyAdapters/unity/unity/src/test/kotlin/com/google/ads/mediation/unity/UnityInterstitialAdTest.kt @@ -2,6 +2,7 @@ package com.google.ads.mediation.unity import android.app.Activity import androidx.core.os.bundleOf +import androidx.test.core.app.ApplicationProvider import androidx.test.ext.junit.runners.AndroidJUnit4 import com.google.ads.mediation.unity.UnityAdsAdapterUtils.getMediationErrorCode import com.google.ads.mediation.unity.UnityMediationAdapter.SDK_ERROR_DOMAIN @@ -21,10 +22,12 @@ import org.junit.Before import org.junit.Test import org.junit.runner.RunWith import org.mockito.kotlin.any +import org.mockito.kotlin.anyOrNull import org.mockito.kotlin.argumentCaptor import org.mockito.kotlin.doAnswer import org.mockito.kotlin.doReturn import org.mockito.kotlin.eq +import org.mockito.kotlin.isNull import org.mockito.kotlin.mock import org.mockito.kotlin.notNull import org.mockito.kotlin.spy @@ -133,6 +136,17 @@ class UnityInterstitialAdTest { assertThat(capturedError.domain).isEqualTo(SDK_ERROR_DOMAIN) } + @Test + fun showAd_withNonActivityContext_callsShowWithNullActivity() { + val unityAdsShowOptions: UnityAdsShowOptions = mock() + whenever(unityAdsLoader.createUnityAdsShowOptionsWithId(anyOrNull())) doReturn unityAdsShowOptions + unityInterstitialAd.onUnityAdsAdLoaded(PLACEMENT_ID) + + unityInterstitialAd.showAd(ApplicationProvider.getApplicationContext()) + + verify(unityAdsLoader).show(isNull(), any(), any(), any()) + } + @Test fun showAd_invokesUnityAdsShow() { doAnswer { invocation -> diff --git a/ThirdPartyAdapters/unity/unity/src/test/kotlin/com/google/ads/mediation/unity/UnityRewardedAdTest.kt b/ThirdPartyAdapters/unity/unity/src/test/kotlin/com/google/ads/mediation/unity/UnityRewardedAdTest.kt index 6f8022a7e..37ce43767 100644 --- a/ThirdPartyAdapters/unity/unity/src/test/kotlin/com/google/ads/mediation/unity/UnityRewardedAdTest.kt +++ b/ThirdPartyAdapters/unity/unity/src/test/kotlin/com/google/ads/mediation/unity/UnityRewardedAdTest.kt @@ -5,9 +5,6 @@ import androidx.core.os.bundleOf import androidx.test.core.app.ApplicationProvider import androidx.test.ext.junit.runners.AndroidJUnit4 import com.google.ads.mediation.unity.UnityAdsAdapterUtils.getMediationErrorCode -import com.google.ads.mediation.unity.UnityMediationAdapter.ADAPTER_ERROR_DOMAIN -import com.google.ads.mediation.unity.UnityMediationAdapter.ERROR_CONTEXT_NOT_ACTIVITY -import com.google.ads.mediation.unity.UnityMediationAdapter.ERROR_MSG_NON_ACTIVITY import com.google.ads.mediation.unity.UnityMediationAdapter.SDK_ERROR_DOMAIN import com.google.android.gms.ads.AdError import com.google.android.gms.ads.mediation.MediationAdLoadCallback @@ -25,6 +22,7 @@ import org.junit.Before import org.junit.Test import org.junit.runner.RunWith import org.mockito.kotlin.any +import org.mockito.kotlin.anyOrNull import org.mockito.kotlin.argumentCaptor import org.mockito.kotlin.doAnswer import org.mockito.kotlin.doReturn @@ -202,17 +200,14 @@ class UnityRewardedAdTest { } @Test - fun showAd_withNonActivityContext_invokesOnAdFailedToShow() { + fun showAd_withNonActivityContext_callsShowWithNullActivity() { + val unityAdsShowOptions: UnityAdsShowOptions = mock() + whenever(unityAdsLoader.createUnityAdsShowOptionsWithId(anyOrNull())) doReturn unityAdsShowOptions unityRewardedAd.unityLoadListener.onUnityAdsAdLoaded(TEST_PLACEMENT_ID) - val errorCaptor = argumentCaptor() unityRewardedAd.showAd(ApplicationProvider.getApplicationContext()) - verify(rewardedAdCallback).onAdFailedToShow(errorCaptor.capture()) - val capturedError = errorCaptor.firstValue - assertThat(capturedError.code).isEqualTo(ERROR_CONTEXT_NOT_ACTIVITY) - assertThat(capturedError.message).isEqualTo(ERROR_MSG_NON_ACTIVITY) - assertThat(capturedError.domain).isEqualTo(ADAPTER_ERROR_DOMAIN) + verify(unityAdsLoader).show(isNull(), any(), any(), any()) } @Test