Skip to content
Open
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
1 change: 1 addition & 0 deletions ThirdPartyAdapters/meta/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

#### Next Version
- Added property to build the adapter with GMA Next-Gen SDK dependency.
- Updated native ad implementation to use the updated `NativeAdMapper` API.

#### Version 6.21.0.1
- Added support for forwarding the `tagForUnderAgeOfConsent` Google Mobile Ads
Expand Down
2 changes: 1 addition & 1 deletion ThirdPartyAdapters/meta/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ buildscript {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:8.2.2'
classpath 'com.android.tools.build:gradle:8.6.1'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion"
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#Thu Feb 27 09:59:21 PST 2025
#Tue Mar 17 06:46:01 PST 2026
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip
distributionSha256Sum=544c35d6bd849ae8a5ed0bcea39ba677dc40f49df7d1835561582da2009b961d
distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@
import com.google.android.gms.ads.mediation.MediationRewardedAd;
import com.google.android.gms.ads.mediation.MediationRewardedAdCallback;
import com.google.android.gms.ads.mediation.MediationRewardedAdConfiguration;
import com.google.android.gms.ads.mediation.UnifiedNativeAdMapper;
import com.google.android.gms.ads.mediation.NativeAdMapper;
import com.google.android.gms.ads.mediation.rtb.RtbAdapter;
import com.google.android.gms.ads.mediation.rtb.RtbSignalData;
import com.google.android.gms.ads.mediation.rtb.SignalCallbacks;
Expand Down Expand Up @@ -279,9 +279,11 @@ public void loadRtbRewardedAd(
}

@Override
public void loadRtbNativeAd(@NonNull MediationNativeAdConfiguration mediationNativeAdConfiguration,
@NonNull MediationAdLoadCallback<UnifiedNativeAdMapper, MediationNativeAdCallback>
mediationAdLoadCallback) {
public void loadRtbNativeAdMapper(
@NonNull MediationNativeAdConfiguration mediationNativeAdConfiguration,
@NonNull
MediationAdLoadCallback<NativeAdMapper, MediationNativeAdCallback>
mediationAdLoadCallback) {
nativeAd = new FacebookRtbNativeAd(mediationAdLoadCallback, metaFactory);
nativeAd.render(mediationNativeAdConfiguration);
}
Expand All @@ -297,11 +299,9 @@ public void loadRtbRewardedInterstitialAd(
rewardedInterstitialAd.render(mediationAdConfiguration);
}

/**
* Gets the Meta Audience Network placement ID.
*/
public static @Nullable
String getPlacementID(@NonNull Bundle serverParameters) {
/** Gets the Meta Audience Network placement ID. */
@Nullable
public static String getPlacementID(@NonNull Bundle serverParameters) {
// Bidding uses a different key for Placement ID than waterfall mediation. Try the
// bidding key first.
String placementId = serverParameters.getString(RTB_PLACEMENT_PARAMETER);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,23 +53,24 @@
import com.google.android.gms.ads.mediation.MediationAdLoadCallback;
import com.google.android.gms.ads.mediation.MediationNativeAdCallback;
import com.google.android.gms.ads.mediation.MediationNativeAdConfiguration;
import com.google.android.gms.ads.mediation.UnifiedNativeAdMapper;
import com.google.android.gms.ads.mediation.NativeAdMapper;
import com.google.android.gms.ads.nativead.NativeAd.Image;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

public class FacebookRtbNativeAd extends UnifiedNativeAdMapper {
public class FacebookRtbNativeAd extends NativeAdMapper {

private final MediationAdLoadCallback<UnifiedNativeAdMapper, MediationNativeAdCallback> callback;
private final MediationAdLoadCallback<NativeAdMapper, MediationNativeAdCallback> callback;
private NativeAdBase nativeAdBase;
private MediationNativeAdCallback nativeAdCallback;
private MediaView mediaView;

private final MetaFactory metaFactory;

public FacebookRtbNativeAd(
@NonNull MediationAdLoadCallback<UnifiedNativeAdMapper, MediationNativeAdCallback> callback,
@NonNull MediationAdLoadCallback<NativeAdMapper, MediationNativeAdCallback> callback,
MetaFactory metaFactory) {
this.callback = callback;
this.metaFactory = metaFactory;
Expand Down Expand Up @@ -212,7 +213,7 @@ public void mapNativeAd(
// action).
setHeadline(nativeAdBase.getAdHeadline());
if (nativeAdBase.getAdCoverImage() != null) {
List<com.google.android.gms.ads.formats.NativeAd.Image> images = new ArrayList<>();
List<Image> images = new ArrayList<>();
images.add(
new FacebookAdapterNativeAdImage(Uri.parse(nativeAdBase.getAdCoverImage().getUrl())));
setImages(images);
Expand Down Expand Up @@ -314,7 +315,9 @@ private boolean containsRequiredFieldsForUnifiedNativeAd(NativeAdBase nativeAd)
}

@Override
public void trackViews(@NonNull View view, @NonNull Map<String, View> clickableAssetViews,
public void trackViews(
@NonNull View view,
@NonNull Map<String, View> clickableAssetViews,
@NonNull Map<String, View> nonClickableAssetViews) {

// Meta Audience Network does its own click handling.
Expand Down Expand Up @@ -358,7 +361,6 @@ public void trackViews(@NonNull View view, @NonNull Map<String, View> clickableA
}
}


@Override
public void untrackView(@NonNull View view) {
if (nativeAdBase != null) {
Expand All @@ -367,8 +369,7 @@ public void untrackView(@NonNull View view) {
super.untrackView(view);
}

private class FacebookAdapterNativeAdImage extends
com.google.android.gms.ads.formats.NativeAd.Image {
private class FacebookAdapterNativeAdImage extends Image {

/** A drawable for the Image. */
private Drawable drawable;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ import com.google.ads.mediation.adaptertestkit.createMediationRewardedAdConfigur
import com.google.ads.mediation.adaptertestkit.loadRtbAppOpenAdWithFailure
import com.google.ads.mediation.adaptertestkit.loadRtbBannerAdWithFailure
import com.google.ads.mediation.adaptertestkit.loadRtbInterstitialAdWithFailure
import com.google.ads.mediation.adaptertestkit.loadRtbNativeAdWithFailure
import com.google.ads.mediation.adaptertestkit.loadRtbNativeAdMapperWithFailure
import com.google.ads.mediation.adaptertestkit.loadRtbRewardedAdWithFailure
import com.google.ads.mediation.adaptertestkit.loadRtbRewardedInterstitialAdWithFailure
import com.google.ads.mediation.adaptertestkit.mediationAdapterInitializeVerifyFailure
Expand All @@ -57,7 +57,7 @@ import com.google.android.gms.ads.mediation.MediationInterstitialAdCallback
import com.google.android.gms.ads.mediation.MediationNativeAdCallback
import com.google.android.gms.ads.mediation.MediationRewardedAd
import com.google.android.gms.ads.mediation.MediationRewardedAdCallback
import com.google.android.gms.ads.mediation.UnifiedNativeAdMapper
import com.google.android.gms.ads.mediation.NativeAdMapper
import com.google.android.gms.ads.mediation.rtb.RtbSignalData
import com.google.android.gms.ads.mediation.rtb.SignalCallbacks
import com.google.common.truth.Truth.assertThat
Expand Down Expand Up @@ -139,7 +139,7 @@ class FacebookMediationAdapterTest {
on { buildLoadAdConfig() } doReturn metaRewardedAdLoadConfigBuilder
}
private val mockNativeAdLoadCallback:
MediationAdLoadCallback<UnifiedNativeAdMapper, MediationNativeAdCallback> =
MediationAdLoadCallback<NativeAdMapper, MediationNativeAdCallback> =
mock()
private val metaNativeAdLoadConfig: NativeAdBase.NativeLoadAdConfig = mock()
private val metaNativeAdLoadConfigBuilder: NativeAdBase.NativeAdLoadConfigBuilder = mock {
Expand Down Expand Up @@ -679,7 +679,7 @@ class FacebookMediationAdapterTest {
// region Native Ad load tests

@Test
fun loadRtbNativeAd_withoutPlacementId_invokesOnFailureCallback() {
fun loadRtbNativeAdMapper_withoutPlacementId_invokesOnFailureCallback() {
val mediationNativeAdConfiguration = createMediationNativeAdConfiguration(context = context)
val expectedError =
AdError(
Expand All @@ -688,15 +688,15 @@ class FacebookMediationAdapterTest {
FacebookMediationAdapter.ERROR_DOMAIN,
)

facebookMediationAdapter.loadRtbNativeAdWithFailure(
facebookMediationAdapter.loadRtbNativeAdMapperWithFailure(
mediationNativeAdConfiguration,
mockNativeAdLoadCallback,
expectedError,
)
}

@Test
fun loadRtbNativeAd_emptyPlacementId_invokesOnFailureCallback() {
fun loadRtbNativeAdMapper_emptyPlacementId_invokesOnFailureCallback() {
val serverParameters = bundleOf(RTB_PLACEMENT_PARAMETER to "")
val mediationNativeAdConfiguration =
createMediationNativeAdConfiguration(context = context, serverParameters = serverParameters)
Expand All @@ -707,15 +707,15 @@ class FacebookMediationAdapterTest {
FacebookMediationAdapter.ERROR_DOMAIN,
)

facebookMediationAdapter.loadRtbNativeAdWithFailure(
facebookMediationAdapter.loadRtbNativeAdMapperWithFailure(
mediationNativeAdConfiguration,
mockNativeAdLoadCallback,
expectedError,
)
}

@Test
fun loadRtbNativeAd_errorCreatingNativeAdBase_invokesOnFailureCallback() {
fun loadRtbNativeAdMapper_errorCreatingNativeAdBase_invokesOnFailureCallback() {
val serverParameters =
bundleOf(RTB_PLACEMENT_PARAMETER to AdapterTestKitConstants.TEST_PLACEMENT_ID)
val mediationNativeAdConfiguration =
Expand All @@ -730,7 +730,7 @@ class FacebookMediationAdapterTest {
mockStatic(NativeAdBase::class.java).use {
whenever(fromBidPayload(any(), any(), any())) doThrow exception

facebookMediationAdapter.loadRtbNativeAdWithFailure(
facebookMediationAdapter.loadRtbNativeAdMapperWithFailure(
mediationNativeAdConfiguration,
mockNativeAdLoadCallback,
expectedAdError,
Expand All @@ -739,7 +739,7 @@ class FacebookMediationAdapterTest {
}

@Test
fun loadRtbNativeAd_loadsAd() {
fun loadRtbNativeAdMapper_loadsAd() {
AdSettings.setMixedAudience(false)
val serverParameters =
bundleOf(RTB_PLACEMENT_PARAMETER to AdapterTestKitConstants.TEST_PLACEMENT_ID)
Expand All @@ -754,7 +754,7 @@ class FacebookMediationAdapterTest {
mockStatic(NativeAdBase::class.java).use {
whenever(fromBidPayload(any(), any(), any())) doReturn metaNativeAd

facebookMediationAdapter.loadRtbNativeAd(
facebookMediationAdapter.loadRtbNativeAdMapper(
mediationNativeAdConfiguration,
mockNativeAdLoadCallback,
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ import com.google.android.gms.ads.AdError
import com.google.android.gms.ads.formats.UnifiedNativeAdAssetNames.ASSET_ICON
import com.google.android.gms.ads.mediation.MediationAdLoadCallback
import com.google.android.gms.ads.mediation.MediationNativeAdCallback
import com.google.android.gms.ads.mediation.UnifiedNativeAdMapper
import com.google.android.gms.ads.mediation.NativeAdMapper
import com.google.common.truth.Truth.assertThat
import org.junit.Before
import org.junit.Test
Expand Down Expand Up @@ -66,7 +66,7 @@ class FacebookRtbNativeAdTest {
)
private val nativeAdCallback = mock<MediationNativeAdCallback>()
private val nativeAdLoadCallback:
MediationAdLoadCallback<UnifiedNativeAdMapper, MediationNativeAdCallback> =
MediationAdLoadCallback<NativeAdMapper, MediationNativeAdCallback> =
mock {
on { onSuccess(any()) } doReturn nativeAdCallback
}
Expand Down
Loading