applovin_admob_sdk 1.0.4
applovin_admob_sdk: ^1.0.4 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.
applovin_admob_sdk #
Dual-provider Flutter Ad SDK — switch between AdMob and AppLovin MAX with a single line of config. Built-in anti-fraud safety layer, route-aware banner, animated top-center toast feedback, and VIP device bypass.
Features #
| Feature | Description |
|---|---|
| Dual Provider | Switch AdMob ↔ AppLovin with AdProvider.admob / AdProvider.appLovin |
| Ad Types | App Open, Banner, Interstitial, Rewarded |
| Safety Layer | Throttle, session/hourly/daily caps, CTR fraud detection, progressive cooldown |
| RouteAware Banner | Banner automatically pauses/resumes on navigation |
| VIP Bypass | Specific devices (by GAID) never see ads — for owners/testers |
| Shimmer Placeholder | Beautiful loading state while banner fills |
| TopToast | Animated glassmorphism toast at top-center — auto-shown when rewarded ad unavailable |
| Localizable Strings | adNotReadyMessage + adLoadingMessage in config — no hardcoded English |
Installation #
dependencies:
applovin_admob_sdk: ^1.0.2
Android Setup (required) #
android/app/src/main/AndroidManifest.xml:
<!-- AdMob -->
<meta-data
android:name="com.google.android.gms.ads.APPLICATION_ID"
android:value="ca-app-pub-xxxxxxxxxxxxxxxx~xxxxxxxxxx"/>
<!-- AppLovin -->
<meta-data
android:name="applovin.sdk.key"
android:value="YOUR_APPLOVIN_SDK_KEY"/>
<!-- GAID permission (required for VIP bypass + test device detection) -->
<uses-permission android:name="com.google.android.gms.permission.AD_ID"/>
Quick Start #
1. Initialize in SplashScreen #
import 'package:applovin_admob_sdk/applovin_admob_sdk.dart';
AdManager().initialize(
config: AdConfig(
provider: AdProvider.appLovin, // or AdProvider.admob
appLovin: AppLovinConfig(
sdkKey: 'YOUR_86_CHAR_SDK_KEY',
bannerId: 'YOUR_BANNER_ID',
interstitialId: 'YOUR_INTER_ID',
appOpenId: 'YOUR_APP_OPEN_ID',
rewardedId: 'YOUR_REWARDED_ID',
),
vipDeviceGaids: ['your-device-gaid'], // never show ads on these devices
// Localizable UI strings (override with your i18n solution):
adNotReadyMessage: 'ad_not_ready'.tr, // shown in TopToast when ad unavailable
adLoadingMessage: 'loading'.tr, // shown in AdLoadingDialog spinner
),
onComplete: (success, gaid) {
SafeLogger.d('App', 'Ad SDK ready. GAID: \$gaid');
},
);
2. Add observers to your app #
MaterialApp(
navigatorObservers: [adRouteObserver, AdScreenRouteLogger()],
// ...
)
3. Extend AdScreen on screens with ads #
class HomeScreen extends AdScreen {
const HomeScreen({super.key});
@override
State<HomeScreen> createState() => _HomeScreenState();
}
class _HomeScreenState extends AdScreenState<HomeScreen> {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Column(
children: [
buildBanner(), // ← banner at top or bottom
Expanded(child: /* ... your content */),
],
),
);
}
}
4. Show Interstitial #
showInterstitialAd(onDone: (wasShown) {
// navigate or do action here
});
5. Show Rewarded #
showRewardedAd(onEarnedReward: (earned) {
if (earned) unlockPremiumFeature();
// else: SDK already showed TopToast "Ad not ready" automatically
});
6. Show App Open (splash) #
AdManager().showAppOpenAd(
bypassSafety: true, // true on splash, false on resume
onAdDismiss: (shown) => navigateToHome(),
);
7. TopToast (manual use) #
TopToast.show(
context,
icon: Icons.info_outline,
message: 'Your message here',
iconColor: Colors.blue, // optional, default amber
);
Advanced Configuration #
AdMob Provider #
AdConfig(
provider: AdProvider.admob,
admob: AdMobConfig(
bannerId: kDebugMode
? 'ca-app-pub-3940256099942544/6300978111'
: 'ca-app-pub-xxxxxxxx/xxxxxxxx',
interstitialId: '...',
appOpenId: '...',
rewardedId: '...',
testDeviceIds: ['YOUR_TEST_DEVICE_HASH'],
),
)
Custom Safety Parameters #
// AdSafetyParams currently use defaults — customizable via AdSafetyConfig.init()
License #
MIT © 2026 — see LICENSE