From a940423c81dd2022643c2141b37b1bdf69de3c93 Mon Sep 17 00:00:00 2001 From: Felipe Sales Date: Tue, 18 Aug 2026 11:01:46 -0300 Subject: [PATCH 1/4] undo change --- packages/google_mobile_ads/CHANGELOG.md | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/google_mobile_ads/CHANGELOG.md b/packages/google_mobile_ads/CHANGELOG.md index c57ec73d2..dd54c3301 100644 --- a/packages/google_mobile_ads/CHANGELOG.md +++ b/packages/google_mobile_ads/CHANGELOG.md @@ -193,7 +193,6 @@ * Adds support for [Rewarded Interstitial](https://support.google.com/admob/answer/9884467) (beta) ad format. * Adds support for `onAdClicked` events to all ad formats. `NativeAdListener.onNativeAdClicked` is now deprecated. * `FullScreenContentCallback` and `AdWithViewListeners` now have an `onAdClicked` event. - ## 1.0.1 * Fix for [Issue 449](https://github.com/googleads/googleads-mobile-flutter/issues/449). From 295932247880f0d62781e4ee9e1584d89b2f4b3d Mon Sep 17 00:00:00 2001 From: Felipe Sales Date: Tue, 18 Aug 2026 11:39:56 -0300 Subject: [PATCH 2/4] Implement manual impression recording for banner ads and enhance app event handling in Flutter ad manager. --- .../googlemobileads/AdInstanceManager.java | 6 ++++++ .../googlemobileads/FlutterAdListener.java | 5 +++++ .../FlutterAdManagerBannerAd.java | 18 ++++++++++++++++++ .../googlemobileads/FlutterBannerAd.java | 7 ++++++- 4 files changed, 35 insertions(+), 1 deletion(-) diff --git a/packages/google_mobile_ads/android/src/adsNextGenSdk/java/io/flutter/plugins/googlemobileads/AdInstanceManager.java b/packages/google_mobile_ads/android/src/adsNextGenSdk/java/io/flutter/plugins/googlemobileads/AdInstanceManager.java index 1a3c91834..51e3e73f8 100644 --- a/packages/google_mobile_ads/android/src/adsNextGenSdk/java/io/flutter/plugins/googlemobileads/AdInstanceManager.java +++ b/packages/google_mobile_ads/android/src/adsNextGenSdk/java/io/flutter/plugins/googlemobileads/AdInstanceManager.java @@ -129,6 +129,12 @@ void onAppEvent(int adId, @NonNull String name, @NonNull String data) { arguments.put("eventName", "onAppEvent"); arguments.put("name", name); arguments.put("data", data); + + FlutterAd ad = ads.get(adId); + if (ad != null && ad.getClass() == FlutterAdManagerBannerAd.class) { + ((FlutterAdManagerBannerAd) ad).recordImpression(); + } + invokeOnAdEvent(arguments); } diff --git a/packages/google_mobile_ads/android/src/adsNextGenSdk/java/io/flutter/plugins/googlemobileads/FlutterAdListener.java b/packages/google_mobile_ads/android/src/adsNextGenSdk/java/io/flutter/plugins/googlemobileads/FlutterAdListener.java index 9379fdf40..af525dbb0 100644 --- a/packages/google_mobile_ads/android/src/adsNextGenSdk/java/io/flutter/plugins/googlemobileads/FlutterAdListener.java +++ b/packages/google_mobile_ads/android/src/adsNextGenSdk/java/io/flutter/plugins/googlemobileads/FlutterAdListener.java @@ -83,6 +83,11 @@ public void onAdPaid(@NonNull AdValue adValue) { manager.onPaidEvent(ad, AdInstanceManager.comAdValueToFlutterAdValue(adValue)); } } + + @Override + public void onAppEvent(@NonNull String name, @NonNull String data) { + manager.onAppEvent(adId, name, data); + } } /** Listener for native ads. */ diff --git a/packages/google_mobile_ads/android/src/adsNextGenSdk/java/io/flutter/plugins/googlemobileads/FlutterAdManagerBannerAd.java b/packages/google_mobile_ads/android/src/adsNextGenSdk/java/io/flutter/plugins/googlemobileads/FlutterAdManagerBannerAd.java index b35fdb86e..a94d9a031 100644 --- a/packages/google_mobile_ads/android/src/adsNextGenSdk/java/io/flutter/plugins/googlemobileads/FlutterAdManagerBannerAd.java +++ b/packages/google_mobile_ads/android/src/adsNextGenSdk/java/io/flutter/plugins/googlemobileads/FlutterAdManagerBannerAd.java @@ -15,6 +15,8 @@ package io.flutter.plugins.googlemobileads; import androidx.annotation.NonNull; +import com.google.android.libraries.ads.mobile.sdk.banner.AdSize; +import com.google.android.libraries.ads.mobile.sdk.banner.BannerAdRequest; import java.util.List; /** @@ -37,4 +39,20 @@ public FlutterAdManagerBannerAd( @NonNull BannerAdCreator bannerAdCreator) { super(adId, manager, adUnitId, flutterAdRequest, sizes, bannerAdCreator); } + + @Override + @NonNull + protected BannerAdRequest.Builder createBannerAdRequest(@NonNull List allSizes) { + BannerAdRequest.Builder builder = super.createBannerAdRequest(allSizes); + if (!allSizes.isEmpty() && allSizes.get(0).getWidth() == 1) { + builder.setManualImpressionEnabled(true); + } + return builder; + } + + public void recordImpression() { + if (bannerAd != null) { + bannerAd.recordManualImpression(); + } + } } diff --git a/packages/google_mobile_ads/android/src/adsNextGenSdk/java/io/flutter/plugins/googlemobileads/FlutterBannerAd.java b/packages/google_mobile_ads/android/src/adsNextGenSdk/java/io/flutter/plugins/googlemobileads/FlutterBannerAd.java index 9f9fc992d..36a18a04c 100644 --- a/packages/google_mobile_ads/android/src/adsNextGenSdk/java/io/flutter/plugins/googlemobileads/FlutterBannerAd.java +++ b/packages/google_mobile_ads/android/src/adsNextGenSdk/java/io/flutter/plugins/googlemobileads/FlutterBannerAd.java @@ -81,6 +81,11 @@ public FlutterBannerAd( this.bannerAdCreator = bannerAdCreator; } + @NonNull + protected BannerAdRequest.Builder createBannerAdRequest(@NonNull List allSizes) { + return request.toBannerAdRequestBuilder(adUnitId, allSizes); + } + @Override public void onAdLoaded() { if (bannerAd != null) { @@ -102,7 +107,7 @@ void load() { new AdSize(flutterAdSize.getAdSize().getWidth(), flutterAdSize.getAdSize().getHeight()); allSizes.add(adSize); } - BannerAdRequest adRequest = request.toBannerAdRequestBuilder(adUnitId, allSizes).build(); + BannerAdRequest adRequest = createBannerAdRequest(allSizes).build(); adView.loadAd( adRequest, new AdLoadCallback() { From 7aeec3e3bbfbe3d7e700ecebc2649e876d88649c Mon Sep 17 00:00:00 2001 From: Felipe Sales Date: Tue, 18 Aug 2026 15:54:43 -0300 Subject: [PATCH 3/4] refactor: add logic directly --- .../googlemobileads/AdInstanceManager.java | 5 ++++ .../FlutterAdManagerBannerAd.java | 18 ------------ .../googlemobileads/FlutterBannerAd.java | 29 +++++++++++++++---- 3 files changed, 28 insertions(+), 24 deletions(-) diff --git a/packages/google_mobile_ads/android/src/adsNextGenSdk/java/io/flutter/plugins/googlemobileads/AdInstanceManager.java b/packages/google_mobile_ads/android/src/adsNextGenSdk/java/io/flutter/plugins/googlemobileads/AdInstanceManager.java index 51e3e73f8..fc02a729d 100644 --- a/packages/google_mobile_ads/android/src/adsNextGenSdk/java/io/flutter/plugins/googlemobileads/AdInstanceManager.java +++ b/packages/google_mobile_ads/android/src/adsNextGenSdk/java/io/flutter/plugins/googlemobileads/AdInstanceManager.java @@ -28,6 +28,7 @@ import io.flutter.plugins.googlemobileads.FlutterAd.FlutterResponseInfo; import java.util.HashMap; import java.util.Map; +import android.util.Log; /** * Maintains reference to ad instances for the {@link @@ -131,9 +132,13 @@ void onAppEvent(int adId, @NonNull String name, @NonNull String data) { arguments.put("data", data); FlutterAd ad = ads.get(adId); + Log.d("FlutterBannerAd", "onAppEvent 01 ad=" + ad); if (ad != null && ad.getClass() == FlutterAdManagerBannerAd.class) { + Log.d("FlutterBannerAd", "onAppEvent 02 ad is FlutterAdManagerBannerAd"); ((FlutterAdManagerBannerAd) ad).recordImpression(); + Log.d("FlutterBannerAd", "onAppEvent 03 recordImpression"); } + Log.d("FlutterBannerAd", "onAppEvent 04 finished"); invokeOnAdEvent(arguments); } diff --git a/packages/google_mobile_ads/android/src/adsNextGenSdk/java/io/flutter/plugins/googlemobileads/FlutterAdManagerBannerAd.java b/packages/google_mobile_ads/android/src/adsNextGenSdk/java/io/flutter/plugins/googlemobileads/FlutterAdManagerBannerAd.java index a94d9a031..b35fdb86e 100644 --- a/packages/google_mobile_ads/android/src/adsNextGenSdk/java/io/flutter/plugins/googlemobileads/FlutterAdManagerBannerAd.java +++ b/packages/google_mobile_ads/android/src/adsNextGenSdk/java/io/flutter/plugins/googlemobileads/FlutterAdManagerBannerAd.java @@ -15,8 +15,6 @@ package io.flutter.plugins.googlemobileads; import androidx.annotation.NonNull; -import com.google.android.libraries.ads.mobile.sdk.banner.AdSize; -import com.google.android.libraries.ads.mobile.sdk.banner.BannerAdRequest; import java.util.List; /** @@ -39,20 +37,4 @@ public FlutterAdManagerBannerAd( @NonNull BannerAdCreator bannerAdCreator) { super(adId, manager, adUnitId, flutterAdRequest, sizes, bannerAdCreator); } - - @Override - @NonNull - protected BannerAdRequest.Builder createBannerAdRequest(@NonNull List allSizes) { - BannerAdRequest.Builder builder = super.createBannerAdRequest(allSizes); - if (!allSizes.isEmpty() && allSizes.get(0).getWidth() == 1) { - builder.setManualImpressionEnabled(true); - } - return builder; - } - - public void recordImpression() { - if (bannerAd != null) { - bannerAd.recordManualImpression(); - } - } } diff --git a/packages/google_mobile_ads/android/src/adsNextGenSdk/java/io/flutter/plugins/googlemobileads/FlutterBannerAd.java b/packages/google_mobile_ads/android/src/adsNextGenSdk/java/io/flutter/plugins/googlemobileads/FlutterBannerAd.java index 36a18a04c..c62b5e158 100644 --- a/packages/google_mobile_ads/android/src/adsNextGenSdk/java/io/flutter/plugins/googlemobileads/FlutterBannerAd.java +++ b/packages/google_mobile_ads/android/src/adsNextGenSdk/java/io/flutter/plugins/googlemobileads/FlutterBannerAd.java @@ -28,6 +28,7 @@ import io.flutter.util.Preconditions; import java.util.ArrayList; import java.util.List; +import android.util.Log; /** * A wrapper for {@link AdView}. @@ -81,11 +82,6 @@ public FlutterBannerAd( this.bannerAdCreator = bannerAdCreator; } - @NonNull - protected BannerAdRequest.Builder createBannerAdRequest(@NonNull List allSizes) { - return request.toBannerAdRequestBuilder(adUnitId, allSizes); - } - @Override public void onAdLoaded() { if (bannerAd != null) { @@ -95,6 +91,7 @@ public void onAdLoaded() { @Override void load() { + Log.d("FlutterBannerAd", "load 00: starting load"); adView = bannerAdCreator.createAdView(); final List allSizes = new ArrayList(); for (int i = 0; i < sizes.size(); i++) { @@ -107,7 +104,17 @@ void load() { new AdSize(flutterAdSize.getAdSize().getWidth(), flutterAdSize.getAdSize().getHeight()); allSizes.add(adSize); } - BannerAdRequest adRequest = createBannerAdRequest(allSizes).build(); + Log.d("FlutterBannerAd", "load 01: allSizes=" + allSizes); + BannerAdRequest.Builder builder = request.toBannerAdRequestBuilder(adUnitId, allSizes); + Log.d("FlutterBannerAd", "load 02: builder=" + builder); + if (!allSizes.isEmpty() && allSizes.get(0).getWidth() == 1) { + Log.d("FlutterBannerAd", "load 03: setting manual impression enabled"); + builder.setManualImpressionEnabled(true); + Log.d("FlutterBannerAd", "load 04: manual impression enabled"); + } + Log.d("FlutterBannerAd", "load 05: building adRequest"); + BannerAdRequest adRequest = builder.build(); + Log.d("FlutterBannerAd", "load 06: adRequest=" + adRequest); adView.loadAd( adRequest, new AdLoadCallback() { @@ -167,4 +174,14 @@ boolean isCollapsible() { } return bannerAd.isCollapsible(); } + + public void recordImpression() { + Log.d("FlutterBannerAd", "recordImpression 01 starting"); + if (bannerAd != null) { + Log.d("FlutterBannerAd", "recordImpression 02 banner ad not null"); + bannerAd.recordManualImpression(); + Log.d("FlutterBannerAd", "recordImpression 03 recordManualImpression"); + } + Log.d("FlutterBannerAd", "recordImpression 04 finished"); + } } From 897d8148e8bc74259bb547fc9b413201f3ae72f4 Mon Sep 17 00:00:00 2001 From: Felipe Sales Date: Tue, 18 Aug 2026 16:49:47 -0300 Subject: [PATCH 4/4] remove logs --- .../plugins/googlemobileads/AdInstanceManager.java | 5 ----- .../plugins/googlemobileads/FlutterBannerAd.java | 12 ------------ 2 files changed, 17 deletions(-) diff --git a/packages/google_mobile_ads/android/src/adsNextGenSdk/java/io/flutter/plugins/googlemobileads/AdInstanceManager.java b/packages/google_mobile_ads/android/src/adsNextGenSdk/java/io/flutter/plugins/googlemobileads/AdInstanceManager.java index fc02a729d..51e3e73f8 100644 --- a/packages/google_mobile_ads/android/src/adsNextGenSdk/java/io/flutter/plugins/googlemobileads/AdInstanceManager.java +++ b/packages/google_mobile_ads/android/src/adsNextGenSdk/java/io/flutter/plugins/googlemobileads/AdInstanceManager.java @@ -28,7 +28,6 @@ import io.flutter.plugins.googlemobileads.FlutterAd.FlutterResponseInfo; import java.util.HashMap; import java.util.Map; -import android.util.Log; /** * Maintains reference to ad instances for the {@link @@ -132,13 +131,9 @@ void onAppEvent(int adId, @NonNull String name, @NonNull String data) { arguments.put("data", data); FlutterAd ad = ads.get(adId); - Log.d("FlutterBannerAd", "onAppEvent 01 ad=" + ad); if (ad != null && ad.getClass() == FlutterAdManagerBannerAd.class) { - Log.d("FlutterBannerAd", "onAppEvent 02 ad is FlutterAdManagerBannerAd"); ((FlutterAdManagerBannerAd) ad).recordImpression(); - Log.d("FlutterBannerAd", "onAppEvent 03 recordImpression"); } - Log.d("FlutterBannerAd", "onAppEvent 04 finished"); invokeOnAdEvent(arguments); } diff --git a/packages/google_mobile_ads/android/src/adsNextGenSdk/java/io/flutter/plugins/googlemobileads/FlutterBannerAd.java b/packages/google_mobile_ads/android/src/adsNextGenSdk/java/io/flutter/plugins/googlemobileads/FlutterBannerAd.java index c62b5e158..7a40860bc 100644 --- a/packages/google_mobile_ads/android/src/adsNextGenSdk/java/io/flutter/plugins/googlemobileads/FlutterBannerAd.java +++ b/packages/google_mobile_ads/android/src/adsNextGenSdk/java/io/flutter/plugins/googlemobileads/FlutterBannerAd.java @@ -28,7 +28,6 @@ import io.flutter.util.Preconditions; import java.util.ArrayList; import java.util.List; -import android.util.Log; /** * A wrapper for {@link AdView}. @@ -91,7 +90,6 @@ public void onAdLoaded() { @Override void load() { - Log.d("FlutterBannerAd", "load 00: starting load"); adView = bannerAdCreator.createAdView(); final List allSizes = new ArrayList(); for (int i = 0; i < sizes.size(); i++) { @@ -104,17 +102,11 @@ void load() { new AdSize(flutterAdSize.getAdSize().getWidth(), flutterAdSize.getAdSize().getHeight()); allSizes.add(adSize); } - Log.d("FlutterBannerAd", "load 01: allSizes=" + allSizes); BannerAdRequest.Builder builder = request.toBannerAdRequestBuilder(adUnitId, allSizes); - Log.d("FlutterBannerAd", "load 02: builder=" + builder); if (!allSizes.isEmpty() && allSizes.get(0).getWidth() == 1) { - Log.d("FlutterBannerAd", "load 03: setting manual impression enabled"); builder.setManualImpressionEnabled(true); - Log.d("FlutterBannerAd", "load 04: manual impression enabled"); } - Log.d("FlutterBannerAd", "load 05: building adRequest"); BannerAdRequest adRequest = builder.build(); - Log.d("FlutterBannerAd", "load 06: adRequest=" + adRequest); adView.loadAd( adRequest, new AdLoadCallback() { @@ -176,12 +168,8 @@ boolean isCollapsible() { } public void recordImpression() { - Log.d("FlutterBannerAd", "recordImpression 01 starting"); if (bannerAd != null) { - Log.d("FlutterBannerAd", "recordImpression 02 banner ad not null"); bannerAd.recordManualImpression(); - Log.d("FlutterBannerAd", "recordImpression 03 recordManualImpression"); } - Log.d("FlutterBannerAd", "recordImpression 04 finished"); } }