Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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";

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down Expand Up @@ -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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -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 ->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -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<AdError>()

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
Expand Down
Loading