apsl_admob_ads_flutter
Apsl AdMob Ads is a comprehensive Flutter package for Google AdMob integration with advanced retry logic, error handling, and configurable ad management
What this package is like to depend on
Last release 4 months ago
07 Apr 2026
Release timing varies
gaps range from 2 weeks to 7 months
Most releases are documented
notes for 7 of 8 stable releases
Nothing withdrawn
no release was ever pulled
1 years old
8 releases · first in 2025
2 releases in the last 12 months
see the full history below
Release timeline
8 releases · Jul 2025 to Apr 2026Releases
latest 8-
2.0.007 Apr 2026Release notes
Open source →Deep audit pass focused on ad fill, load latency, and reliability.
Contains breaking API changes — see CHANGELOG.md for full migration notes.Highlights:
- Exponential backoff retries replacing fixed 30s delay (biggest fill-rate win)
- Default maxRetries raised from 1 to 5
- Multicast listener model fixes broken event stream + sequence ads
- Network- and lifecycle-aware load resumer (connectivity_plus)
- Cold-start preloads run in parallel — initialize() no longer blocks
- Rewarded ads default to preloaded for instant show
- App Open ads pre-warm after dismiss
- Race-free generation tokens, error-code-based classification
- App Open lifecycle reactor properly disposed in destroyAds
- Verified end-to-end on iPhone 17 Pro simulator and Android API 36 emulator
Release notes
Open source →Release Date: Apr 6, 2026 Package:
apsl_admob_ads_flutterThis release is a deep audit pass focused on ad fill, load latency, and reliability. It contains breaking API changes — see migration notes below.
💰 Revenue & fill improvements
- Exponential backoff retries (2s → 4s → 8s → … capped at 64s) replace the old fixed 30-second retry. Single biggest fill-rate win.
- Default
maxRetriesraised from 1 to 5 across all four ad configs. Previously a single failed retry left the slot dead for the rest of the session. - Error-code-based classification using the SDK's stable
LoadAdError.codeconstants instead of fragile substring matching. Non-recoverable errors (invalid ad unit / missing app id) now stop retrying instead of hammering the network forever. - Rewarded ads default to preloaded (
preLoadRewardedAds: true) and always reload after dismiss — the next user tap is instant. - Network- and lifecycle-aware load resumer: any ad that exhausted
its retry budget on a flaky network is automatically re-armed when
connectivity returns or the app comes back to the foreground (powered
by
connectivity_plus). - Sensible default
loadTimeoutof 20 seconds for every ad type. - Banner/Native configs now have value-based
==/hashCode, so a parent rebuild that constructs an inline config no longer destroys the in-flight ad. - App Open ads pre-warm immediately after dismiss so the next foreground
is instant. Expired cached ads are detected by
isAdLoadedand refreshed proactively.
⚡ Cold start
ApslAds.initialize()no longer blocks on three sequential ad loads. Preloads run in parallel, in the background, after the SDK init completes — typically saves 2–5 seconds on time-to-runApp.- App Open ads no longer auto-show on the first preload at app start (they used to pop over the splash screen).
🛠 Reliability fixes
- Multicast callback model: replaced single-field
onAdLoadedetc. withaddOnAdLoaded(cb)/clearListeners(). Previously, when both the event controller and a widget tried to attach to the same ad, one silently overwrote the other — breakingApslAds.instance.onEventfor banner/native ads and rendering sequence ads non-functional. createBannerandcreateNativeactually wire up theonAdFailedToLoad/onAdShowedparameters now (they were silently dropped before).createNativenow callssetupEvents, fixing the bug where native ad events never reached the broadcast stream at all.loadAndShowRewardedAdrewritten: instant show on cache hit, hard wait timeout, properly returnsFuture<bool>, scoped subscription, filtered by ad network.- Native ad's
onAdShowednow fires exactly once per loaded ad via the SDK'sonAdImpressionlistener — previously it fired on every widget rebuild, inflating impression analytics. - Load generation tokens discard stale callbacks from a load that was already cancelled by a timeout, fixing a race that could clobber a freshly-loaded ad.
- App Open retry timer is now cancellable and bounded with
exponential backoff. The previous
Future.delayed-based retry could fire on a disposed instance and stack unbounded retries on a flaky network. - Banner load timeout path consolidated into a single
_handleLoadFailureso the timeout case correctly firesonBannerAdReadyForSetState(previously the widget would spin forever on timeout). destroyAds()now disposes the lifecycle reactor and load resumer in addition to the ads, fixing duplicate-listener leaks across destroy + re-initialize cycles.- Sequence banner / native widgets no longer reset their cursor to 0 and infinite-loop when all configured networks fail.
🔧 API changes (breaking)
ApslAds.initialize()no longer acceptspreloadRewardedAds,blockAppOpenAd,onAdFailedToLoad, oronAdShowed. Configure preloading viaRewardedAdConfig.preLoadRewardedAds, and use the per-ad listener API for callbacks.ApslAds.initialize()now acceptsinterstitialAdConfigandrewardedAdConfigparameters. Use them to tune retry policy, timeouts, and immersive mode for the two highest-revenue formats — these were previously hardcoded with no way to override.ApslAdBaseno longer exposes single-field callback slots (onAdLoaded,onAdShowed,onAdFailedToLoad, etc.). Replacead.onAdLoaded = cbwithad.addOnAdLoaded(cb). Multiple subscribers can now coexist on the same ad.loadAndShowRewardedAdnow returnsFuture<bool>instead ofbooland accepts awaitTimeoutparameter (default 10 s).BannerAdConfig/NativeAdConfig/InterstitialAdConfig/RewardedAdConfiggaineduseExponentialBackoffandmaxRetryDelayparameters; the meaning ofretryDelaychanged from "fixed delay" to "base delay for backoff". The default value also dropped from 30 s to 2 s.- The unused
shared_preferencesdependency has been removed. - Added
connectivity_plusas a new dependency.
🧹 Internal cleanup
- Removed four duplicate copies of fragile error-string matching in
favor of a single shared
mapLoadAdErrorhelper. - Moved the
forceStopToLoadAdsglobal out of the test ID manager into its ownad_loading_gate.dart. The barrel file re-exports it, so existing imports keep working. _appLifecycleReactoris now nullable instead oflate final.
-
1.6.030 Jan 2026Release notes
Open source →Release Date: Jan 29, 2026 Package:
apsl_admob_ads_flutter🛠 Improvements
-
Updated Package Versions: Upgraded internal and external dependencies to their latest stable versions for improved compatibility and reliability.
-
Improved Stability: Includes upstream fixes and performance improvements from updated libraries, resulting in smoother ad loading and lifecycle handling.
-
Maintenance Release: No breaking API changes. This release focuses on keeping the package modern, secure, and stable.
-
-
1.5.023 Jul 2025Release notes
Open source →Release Date: Jul 23, 2025
Package:apsl_admob_ads_flutter✨ What's New
- Analytics Event Callbacks: All ad types (Banner, Native, Interstitial, Rewarded, App Open) now support
onAdShowedandonAdFailedToShowcallbacks for robust analytics and logging integration. - Docs: Added usage examples and guidance for integrating analytics/logging with ad events.
This is a recommended update for anyone who wants to track ad impressions and failures in their app.
- Analytics Event Callbacks: All ad types (Banner, Native, Interstitial, Rewarded, App Open) now support
-
1.4.017 Jul 2025Nothing published for this version
-
1.3.017 Jul 2025Release notes
Open source →Release Date: Jul 2, 2025
Package:apsl_admob_ads_flutter⚠️ Breaking Changes
- NativeAd API Simplified: The NativeAd constructor has been streamlined for clarity and maintainability. Deprecated and legacy options have been removed. Now only the following options are supported:
adUnitIdadRequestnativeTemplateStyletemplateTypeconfigcustomHeight
🛠 Improvements
- Improved documentation and usage examples for the new API.
- Internal code cleanup for better stability and maintainability.
- Unified ad event callbacks (
onAdShowed,onAdFailedToShow) for all ad types, enabling robust analytics and logging from your app.
This is a stable and recommended update for all users.
- NativeAd API Simplified: The NativeAd constructor has been streamlined for clarity and maintainability. Deprecated and legacy options have been removed. Now only the following options are supported:
-
1.2.016 Jul 2025Release notes
Open source →Release Date: Jul 2, 2025
Package:apsl_admob_ads_flutter✨ What's New
- Custom Height for Native Ads: Added a
customHeightparameter to the native ad widget, allowing developers to specify the height of native ads for more flexible UI layouts.
- Custom Height for Native Ads: Added a
-
1.1.004 Jul 2025Release notes
Open source →Release Date: Dec 19, 2024
Package:apsl_admob_ads_flutter🎯 What's New
Enhanced navigation ad functionality with improved
showAdOnNavigationmethod for better user experience and ad management.✨ Features & Improvements
🔄 Enhanced Navigation Ad Management
- Improved
showAdOnNavigationMethod - Better logic for showing interstitial ads during navigation - Configurable Navigation Count - More flexible control over when ads are shown during navigation
- Enhanced User Experience - Smoother integration of ads into navigation flow
🛠️ Technical Improvements
- Better Navigation Tracking - Improved internal navigation counter management
- Optimized Ad Display Logic - More efficient ad showing during navigation events
- Enhanced Error Handling - Better error management for navigation-based ad displays
📚 Documentation Updates
- Updated method documentation for
showAdOnNavigation - Enhanced usage examples for navigation ad integration
- Improved
-
1.0.001 Jul 2025Release notes
Open source →Release Date: Jul 1, 2025
Package:apsl_admob_ads_flutter🎉 What's New
Welcome to Apsl AdMob Ads Flutter - A comprehensive, production-ready Flutter package for seamless Google AdMob integration! This is a completely new package built from the ground up with modern Flutter practices and advanced features.