NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
A Flutter package that simplifies ad integration with a unified API for banner, interstitial, and rewarded ads.
Last release today
07 Oct 2026
Ships fairly regularly
a new release about every 2 weeks
Nearly every release is documented
notes for 31 of 31 stable releases
Nothing withdrawn
no release was ever pulled
8 months old
31 releases · first in 2026
One column per month.
Chore: Bumped dependencies - dio ^5.11.1, firebase_core ^4.15.0, firebase_messaging ^16.7.0, flutter_local_notifications ^22.3.1, onesignal_flutter ^5
dio ^5.11.1, firebase_core ^4.15.0, firebase_messaging ^16.7.0, flutter_local_notifications ^22.3.1, onesignal_flutter ^5.7.0 (iOS minimum is now 15.0, which adhub already required), package_info_plus ^10.2.2, permission_handler ^13.0.2, shared_preferences ^2.5.6, url_launcher ^6.3.3.play-services-ads 25.5.0, AppLovin adapter 13.6.4.2, Meta adapter 6.22.0.1, Unity adapter 4.21.0.0 and unity-ads 4.21.0.text/plain are handled the same way.adNetwork or ad_config threw during ad setup and the app never continued. Ad setup is now null-safe and the app always continues, with ads switched off if setup failed.localClick list or an index left over from an older config threw a RangeError and left the loader overlay up. onComplete could also fire twice when an ad finished after the timeout. It now completes exactly once, and the retry counter resets for every flow.onComplete could run twice with rewardOverRide. They now dispose on dismiss and complete once.onFailed.onFailed while building.AdhubFcm.initialize() stayed marked as initialized after a failure, so FCM stayed off until the next app restart. A later call can now retry.compileSdk override older plugins need; pubspec.yaml has a repository link.use_build_context_synchronously analyzer warnings (context is now read before awaits or re-checked after them). Ads.dart keeps its file name so existing imports keep working.Feat: House ad entries now support an optional cta field to override the action-button label (e.g. "VISIT", "PLAY" for a website promo). Falls back to
cta field to override the action-button label (e.g. "VISIT", "PLAY" for a website promo). Falls back to the existing GET/INSTALL (banner) and GET APP/INSTALL APP (native) device defaults when absent.HouseAdManager no longer filters house ad entries by device platform. Each app's remote config is already platform-scoped, so the per-entry platform field was redundant; it is retained in the JSON for panel-side identification only. Entries are now filtered on enabled alone and rotated round-robin as before.firebase_core to ^4.14.0 (from ^4.13.0) and firebase_messaging to ^16.6.0 (from ^16.5.0) - patch/minor updates, no breaking API changes.Chore: Bumped google_mobile_ads to ^9.1.0 (from ^9.0.0) - purely additive on the Dart side (Ad Preloading APIs, ConsentRequestParameters.setConsentSyn
google_mobile_ads to ^9.1.0 (from ^9.0.0) - purely additive on the Dart side (Ad Preloading APIs, ConsentRequestParameters.setConsentSyncId(), RequestConfiguration.ageRestrictedTreatment, AdManagerBannerAd.isMounted), no breaking API changes. Bumps the underlying native SDKs to Google Mobile Ads 25.4.0 (Android) and 13.7.0 (iOS).Chore: Bumped Android toolchain (AGP 9.3.1, Gradle 9.7.1, Kotlin 2.4.10, compileSdk 37, Java 21) and AppLovin/Unity mediation adapters to latest. Cons
compileSdk 37, Java 21) and AppLovin/Unity mediation adapters to latest. Consuming apps now need compileSdk >= 37 and JDK 21.ios/adhub.podspec's version was stuck at 0.2.3 for three releases, out of sync with pubspec.yaml. Now kept in sync.use_frameworks! conflicting with AppLovin/Meta/Unity's static xcframeworks, OneSignal's SPM+CocoaPods double-embed, and Xcode 26's stricter explicit-module header checks against Google Mobile Ads. See commit ffb89d9 for the exact fixes.android/build.gradle.kts applied the Kotlin Gradle Plugin via the legacy id("kotlin-android") alias, which Flutter now warns "will cause build failures in future versions of Flutter." Switched to the fully-qualified id("org.jetbrains.kotlin.android").Fix: Android notification tray icon now uses @drawable/ic_stat_notify_default instead of @mipmap/ic_launcher. Android strips all color from the tray i
@drawable/ic_stat_notify_default instead of @mipmap/ic_launcher. Android strips all color from the tray icon and reads only the alpha channel, so a full-color launcher icon rendered as a solid white blob on stock/near-stock Android (confirmed on Motorola) or, on some OEM skins like Samsung One UI, silently fell back to showing the full-color app icon instead - neither is correct. Every consuming app must now provide its own ic_stat_notify_default drawable (white silhouette, transparent background, at drawable-{m,h,xh,xxh,xxxh}dpi) and a matching com.google.firebase.messaging.default_notification_icon meta-data entry in its own AndroidManifest.xml - mirrors the convention OneSignal itself used (ic_stat_onesignal_default).Fix: HouseNativeAd (the self-promo fallback shown when a Google/AppLovin native ad fails to load) now matches GoogleNative/ApplovinNative styling - us
HouseNativeAd (the self-promo fallback shown when a Google/AppLovin native ad fails to load) now matches GoogleNative/ApplovinNative styling - uses margin ?? MainJson.nativeMargin (previously a hardcoded EdgeInsets.all(10), ignoring both the app-wide default and any per-slot override) and MainJson.nativeColor/nativeBorderColor at radius 6 (previously its own theme-brightness-derived colors at radius 12). Intentionally still excludes the "Ad" badge and the 270-402 height constraint used by the other two, since its own icon+title+stars+description+button layout doesn't fit that.HouseNativeAd's title/description text and logo asset could render as white-on-white in a dark-themed app - their light/dark choice was driven by Theme.of(context).brightness (the app's ambient theme) instead of the card's actual background color (MainJson.nativeColor, which defaults to white independent of app theme). Now derived via ThemeData.estimateBrightnessForColor(MainJson.nativeColor) so text always contrasts against the real background.Fix: android/build.gradle.kts's kotlinOptions { jvmTarget = ... } block used the deprecated Kotlin Gradle Plugin DSL, which newer Kotlin/AGP toolchain…
android/build.gradle.kts's kotlinOptions { jvmTarget = ... } block used the deprecated Kotlin Gradle Plugin DSL, which newer Kotlin/AGP toolchains (as found rolling this out to a consuming app) treat as a hard build error, not just a warning - flutter build apk failed entirely with "'var jvmTarget: String' is deprecated". Replaced with the modern kotlin { compilerOptions { jvmTarget.set(JvmTarget.JVM_17) } } DSL.Fix: AppLovin interstitial/rewarded/banner loaders no longer crash when applovin_fullscreen/applovin_reward/applovin_banner is missing from an app's r
applovin_fullscreen/applovin_reward/applovin_banner is missing from an app's remote config - they now fail gracefully via onFailed() instead of force-unwrapping a null ad unit ID into the native SDK.ApplovinNative widget (ad_config.applovin_native), wired into the NativeAd dispatcher as screenConfig['native'] == 1, alongside the existing Google (0) option. Matches GoogleNative's visual styling (MainJson.nativeColor/nativeBorderColor/nativeMargin, rounded border, "Ad" badge) so native ads look identical regardless of which network served them. Falls back to the House Ad system on load failure, same as every other AppLovin/Google ad widget.AppLovinMAX.initialize() completes - new AppLovinInit (mirroring GoogleInit's ready Completer) is now awaited by all 4 AppLovin loaders, fixing an "Attempted to load ad before SDK initialization" failure.ApplovinBanner rendered at zero height until its ad loaded, but MaxAdView (a platform view) only starts loading once it has real layout constraints - it could never load. Now renders at full banner height as soon as the SDK is ready.android/build.gradle.kts (declares AppLovin/Meta/Unity AdMob mediation adapters + play-services-ads), android/src/main/AndroidManifest.xml, android/src/main/kotlin/com/adhub/adhub/AdhubPlugin.kt, ios/adhub.podspec (declares GoogleMobileAdsMediationAppLovin/Facebook/Unity pods, iOS 15.0+), ios/Classes/AdhubPlugin.swift, and registered both platforms under flutter.plugin.platforms in pubspec.yaml. Required so consuming apps' AdMob mediation can actually route to AppLovin/Meta/Unity as bidding/waterfall sources.Fix: AdhubFcm.initialize() and maybeReRequestPermission() no longer block app startup - Firebase init, the notification permission prompt, and topic s
AdhubFcm.initialize() and maybeReRequestPermission() no longer block app startup - Firebase init, the notification permission prompt, and topic subscriptions used to be awaited before the app's content was shown, adding 1.5-2s to every launch. They now run non-blocking in the background, mirroring the existing GoogleInit/AppLovinMAX pattern.Fix: AdhubFcm.enableNotifications() and AdhubNotifications.enableNotifications() now actually check and request OS notification permission instead of
AdhubFcm.enableNotifications() and AdhubNotifications.enableNotifications() now actually check and request OS notification permission instead of assuming it was already granted - if the OS already refused before, shows adhub's existing settings-deeplink dialog. Both now return Future<bool> (previously Future<void>) reporting whether the user actually ended up opted in.Feat: Firebase Cloud Messaging (FCM) support via a new firebaseOptions param on Adhub - FCM is now the primary push channel, with OneSignal kept insta
firebaseOptions param on Adhub - FCM is now the primary push channel, with OneSignal kept installed as a fallback for apps not yet configured with Firebase. Handles topic subscription (broadcast + per-app), foreground/background message display, notification tap deep-linking, and a re-ask flow for denied OS notification permission.Adhub/MainJson expose nativeBorderColor and nativeMargin (alongside the existing nativeColor), and GoogleNative now renders a rounded border plus a unified "Ad" badge overlay for both Android and iOS.NativeAd accepts an optional per-call margin override on top of the app-wide MainJson.nativeMargin default.AdhubNotifications.isOptedIn, enableNotifications(), and disableNotifications() are now Future-based (previously synchronous) since they may need to check/update FCM topic subscription state.GoogleNative's loaded native ad is now disposed on widget unmount - previously leaked native ad memory every time a native ad slot recycled (e.g. inside a ListView.builder).firebase_core, firebase_messaging, flutter_local_notifications, and permission_handler dependencies; upgraded onesignal_flutter to ^5.6.7.Chore: Upgraded dependencies - dio to ^5.10.0, package_info_plus to ^10.2.0, onesignal_flutter to ^5.6.4.
dio to ^5.10.0, package_info_plus to ^10.2.0, onesignal_flutter to ^5.6.4.Chore: Upgraded dependencies - google_mobile_ads to ^9.0.0, applovin_max to ^4.6.4, app_tracking_transparency to ^2.0.7, onesignal_flutter to ^5.6.2.
google_mobile_ads to ^9.0.0, applovin_max to ^4.6.4, app_tracking_transparency to ^2.0.7, onesignal_flutter to ^5.6.2.Fix: House ad banner and native text styles no longer inherit the host app's theme (shadows, fonts, etc.) — ads now look consistent across all apps.
Feat: House ads system — show your own apps as fallback banner and native ads when real ads fail.
Fix: Implemented Google UMP (User Messaging Platform) consent flow before MobileAds initialization — resolves AdMob "Consent requirement: No CMP" and
BaseClass.initAdNetworks.Fix: App Tracking Transparency (ATT) dialog now reliably appears on the very first launch on iOS.
trackingAuthorizationStatus check — ATT is only requested when status is notDetermined, preventing unnecessary calls on subsequent launches.Refactor: Extracted all dialog UI definitions into a centralized utility class AdhubDialogs to improve maintainability and reduce main file size.
AdhubDialogs to improve maintainability and reduce main file size.Documentation: Simplified README and updated installation instructions.
Removed unused get package dependency to reduce package size.
get package dependency to reduce package size.Cleaned up console output by removing unnecessary print(), debugPrint(), and Logger statements throughout the package.
print(), debugPrint(), and Logger statements throughout the package.logger package dependency.google_mobile_ads: ^8.0.0, package_info_plus: ^10.1.0, onesignal_flutter: ^5.5.1).Fix: Added GoogleInit.ready Completer — all Google ad loaders now await AdMob init before loading. Splash screen ads now work correctly with non-block
GoogleInit.ready Completer — all Google ad loaders now await AdMob init before loading. Splash screen ads now work correctly with non-blocking startup.Performance: MobileAds.instance.initialize() is now non-blocking to eliminate 2-3 second startup delay caused by waiting for all mediation adapters (i
MobileAds.instance.initialize() is now non-blocking to eliminate 2-3 second startup delay caused by waiting for all mediation adapters (including AppLovin) to finish.Performance: AppLovinMAX.initialize() is now non-blocking (fire-and-forget) to eliminate 4-5 second startup delay.
AppLovinMAX.initialize() is now non-blocking (fire-and-forget) to eliminate 4-5 second startup delay.?? false check on appLovin ad network flag to prevent crashes when the key is missing.Hotfix: Prevented a crash inside initAdNetworks by checking the app version and checking for forced update explicitly before execution.
initAdNetworks by checking the app version and checking for forced update explicitly before execution.Hotfix: resolved a compilation error by ensuring return type safety on OneSignal's isOptedIn method.
<bool> return type safety on OneSignal's isOptedIn method.Added fallback logic to show the update dialog with appUrl if the specified app version isn't found in JSON.
appUrl if the specified app version isn't found in JSON.RateUs dialog to not repeatedly show in the same session after the user interacts with it.AdhubNotifications utility class to easily allow developers to toggle OneSignal push notifications on and off for the end-user.Major refactor of Ads singleton (reduced 1200+ lines of duplicate code).
Ads singleton (reduced 1200+ lines of duplicate code).GlobalBannerAd (logic unified into screen-level banners).Added multi-platform support (Android & iOS).
* TODO: quick fixes.
TODO: Describe initial release.
Your coding agent can read these notes before it upgrades. Set up the MCP server →