applovin_admob_sdk 1.0.9 copy "applovin_admob_sdk: ^1.0.9" to clipboard
applovin_admob_sdk: ^1.0.9 copied to clipboard

Dual-provider ad SDK for Flutter (AdMob + AppLovin MAX) with built-in safety throttle, VIP bypass, RouteAware banner lifecycle management, and animated TopToast feedback.

1.0.9 #

  • Bug fix: Concurrent dialog guard (AdLoadingDialog) — Added _isShowing static flag. If showAdBuffer is called a second time while a dialog is already showing (double-tap), the duplicate call immediately invokes onComplete without pushing a second dialog. Previously, two stacked dialogs caused navigator.pop() to dismiss the wrong one.

  • Bug fix: Early interstitial lock (AdManager.showInterstitial) — _isInterstitialShowing = true is now set at the START of showInterstitial(), before the 1s dialog buffer. Previously, a double-tap during the buffer could pass the canShowInterstitial() check twice and show two dialogs.

  • Bug fix: AppLovin App Open timeout fallback_showAppOpenAdAppLovin now starts a 10-second timer. If no AppLovin callback fires within 10s (AppLovin internal loading hang), onAdDismiss(false) is force-called to unblock the splash screen's navigation flow.

  • Bug fix: Loading dialog hang (root cause — real fix)

    • Root cause: AdLoadingDialog captured Navigator.of(context) AFTER the async delay, then guarded pop() with context.mounted. If the parent screen was disposed during the 1s buffer (e.g., user navigated back), context.mounted == falsepop() was skipped → dialog stayed on screen forever with no one to dismiss it
    • Fix: Capture NavigatorState via Navigator.of(context, rootNavigator: true) BEFORE the await delay. NavigatorState is owned by the root navigator widget (not the screen) and outlives any screen disposal. The dialog is now always dismissed regardless of context.mounted
    • Note: version 1.0.7 partially addressed related symptoms (rewarded skip callback orphan, safety re-check logging) but did not fix the actual dismissal race condition
  • Bug fix: Loading dialog hang — Fixed 3 root causes that caused AdLoadingDialog to get stuck on screen permanently:

    1. AppLovin Rewarded skip bug (critical): onAdHiddenCallback was not calling _pendingRewardedDoneFlow(false) when user closed the rewarded ad without watching it fully. This left the callback orphaned and the loading dialog visible indefinitely
    2. Safety re-check log gap: showInterstitial / showRewardedAd safety failures after the 1s dialog buffer now log the reason (safetyResult.reason) and explicitly guarantee onDoneFlow/onEarnedReward is always called
    3. AdLoadingDialog logging: Added SafeLogger throughout — pop errors (context detached) are now caught and logged instead of crashing silently
  • Replaced real AppLovin credentials in example app with YOUR_* placeholders — prevents accidental credential exposure in published package

  • Merged example app into a single main.dart file for simplicity

  • Completely rewrote README with detailed step-by-step integration guide (Android setup, iOS setup, AdMob/AppLovin setup, 7-step guide, ad types reference, AdConfig reference, safety layer table, VIP bypass, TopToast, troubleshooting)

  • Fixed double loadAppOpenAd in-flight guard for AppLovin provider — _isAppOpenLoading is now set/reset in _loadAppOpenAdAppLovin and its loaded/failed callbacks, preventing duplicate requests and callback overwrites that broke the splash App Open flow

  • Fixed hard cap timer not being cancelled before showAppOpenAd is called in splash — prevents force-navigation while an ad is actively displaying (example + WiFi splash screens)

  • Replaced all debugPrint in AdScreenRouteLogger with SafeLogger.d — consistent logging across the entire SDK

  • Bumped dependencies: google_mobile_ads: ^7.0.0, shared_preferences: ^2.5.4, connection_notifier: ^3.0.0, flutter_lints: ^6.0.0

  • Renamed package from ad_sdk to applovin_admob_sdk

  • AdConfig now supports adNotReadyMessage and adLoadingMessage for localizable UI strings

  • showRewardedAd auto-shows TopToast with adNotReadyMessage when no ad is available — callers no longer need to show their own feedback

  • AdLoadingDialog uses adLoadingMessage from config instead of hardcoded 'Loading...'

  • AdManager exposes public config getter

1.0.1 #

  • Added TopToast — animated, glassmorphism top-center toast widget (overlay-based, no Scaffold needed)
  • showRewardedAd: changed to hard gate — onEarnedReward(false) when ad unavailable (caller shows user feedback)
  • Fixed _hasPlaceholderIds() logic bug in example app splash screen

1.0.0 #

  • Initial release
  • Dual-provider support: AdMob (google_mobile_ads) and AppLovin MAX (applovin_max)
  • Ad types: App Open, Banner, Interstitial, Rewarded
  • 12-measure AdSafety layer: throttle, session/hourly/daily caps, CTR fraud, progressive cooldown
  • RouteAware banner with auto pause/resume on navigation
  • VIP device bypass via GAID list
  • Shimmer loading placeholder for banner
  • AdLoadingDialog buffer before fullscreen ads
  • Provider-agnostic AdScreen base class (no external state manager required)
3
likes
0
points
287
downloads

Publisher

unverified uploader

Weekly Downloads

Dual-provider ad SDK for Flutter (AdMob + AppLovin MAX) with built-in safety throttle, VIP bypass, RouteAware banner lifecycle management, and animated TopToast feedback.

Repository (GitHub)
View/report issues

License

unknown (license)

Dependencies

advertising_id, applovin_max, connection_notifier, flutter, google_mobile_ads, shared_preferences

More

Packages that depend on applovin_admob_sdk