Monetization Kit
A powerful Flutter monetization toolkit that combines AdMob ads, Firebase services, force updates, feedback reporting, analytics, remote config, and reusable monetization utilities into a single package.
Note
Always test your ad flows, Firebase setup, native ad factories, force update behavior, and feedback systems with test ad units before releasing to production.
Screenshots
Screenshots of the demo app are available in the screenshots gallery on the pub.dev package page — tap the package thumbnail to browse them:
- Native Ads (Test Mode) — status card with platform, Firebase, Remote Config and ads in test mode, plus small and medium native test ads.
- Ad Controls & Fullscreen Ads — disable ads and premium user toggles, ad preloading, and interstitial / rewarded / app open / native popup / timed native ad triggers.
Features
Ads
-
Banner Ads
-
Collapsible Banner Ads
-
Native Ads
- Small
- Medium
- Fullscreen
- Custom Factory Support
-
Native Popup Ads
-
Fullscreen Native Timer Ads
-
Interstitial Ads
-
Rewarded Ads
-
App Open Ads
-
App Resume Ads
Smart Ad Systems
- Global Ad Controller
- Premium User Ad Disable
- Remote Ad Enable / Disable
- Ad Frequency Manager
- Placement Based Ad Logic
- Cooldown Management
- Retry System
- Auto Reload After Dismiss
- Ad Preload Manager
- Native Ad Cache System
- Default Shimmer Loading UI
- Smart Ad Fallback Logic
Firebase
- Firebase Core
- Firebase Analytics
- Firebase Crashlytics
- Firebase Remote Config
Updates
- Android In-App Update
- iOS App Store Update
- Force Update System
- Dynamic Update Dialog
Feedback System
- Discord Webhook Integration
- Modern Feedback Screen
- Screenshot Attachment Support
- Automatic Device Information Collection
- Automatic App Information Collection
- Custom Metadata Support
Collected automatically:
- App Name
- App Version
- Build Number
- Platform
- Device Model
- Device ID
- User Agent
- Timestamp
Users only need to provide:
- Feedback Description
- Optional Screenshot
Installation
dependencies:
monetization_kit: ^1.0.0
Initialize
await MonetizationKit.initialize(
config: MonetizationConfig(
iosStoreId: 'YOUR_IOS_APP_STORE_ID',
adUnitIds: AdUnitIds(
androidBanner: 'ANDROID_BANNER_ID',
iosBanner: 'IOS_BANNER_ID',
androidInterstitial: 'ANDROID_INTERSTITIAL_ID',
iosInterstitial: 'IOS_INTERSTITIAL_ID',
androidRewarded: 'ANDROID_REWARDED_ID',
iosRewarded: 'IOS_REWARDED_ID',
androidAppOpen: 'ANDROID_APP_OPEN_ID',
iosAppOpen: 'IOS_APP_OPEN_ID',
androidNativeSmall: 'ANDROID_NATIVE_ID',
iosNativeSmall: 'IOS_NATIVE_ID',
androidNativeMedium: 'ANDROID_NATIVE_ID',
iosNativeMedium: 'IOS_NATIVE_ID',
androidNativeFull: 'ANDROID_NATIVE_ID',
iosNativeFull: 'IOS_NATIVE_ID',
),
),
);
Banner Ads
const BannerAdWidget()
Native Ads
Small Native
const NativeAdWidget(
type: NativeAdType.small,
)
Medium Native
const NativeAdWidget(
type: NativeAdType.medium,
)
Full Native
const NativeAdWidget(
type: NativeAdType.full,
)
Fullscreen Native Timer Ad
await FullscreenNativeTimerAd.show(
context,
duration: const Duration(
seconds: 10,
),
);
Native Popup Ad
await NativePopupAd.show(
context,
type: NativeAdType.full,
);
Interstitial Ad
await InterstitialAdService.show(
context: context,
);
Rewarded Ad
await RewardedAdService.show(
onRewardEarned: (reward) {
print(reward.amount);
},
);
Premium User
Disable ads for premium users:
AdController.setPremiumUser(true);
Disable Ads
AdController.disableAds();
Enable again:
AdController.enableAds();
Force Update
await ForceUpdateService.checkForUpdate(
context: context,
);
Analytics
Screen Tracking
await AnalyticsService.logScreenView(
screenName: 'HomeScreen',
);
Custom Event
await AnalyticsService.logEvent(
name: 'generate_image_clicked',
);
Ad Impression
await AnalyticsService.logAdImpression(
adType: 'interstitial',
);
Feedback Screen
Navigator.push(
context,
MaterialPageRoute(
builder: (_) => const FeedbackScreen(
webhookUrl:
'YOUR_DISCORD_WEBHOOK_URL',
),
),
);
Discord Feedback Service
final feedback =
DiscordFeedbackService(
webhookUrl:
'YOUR_DISCORD_WEBHOOK_URL',
);
await feedback.sendFeedback(
description:
'App crashes on scanner screen',
);
Remote Config Keys
| Key | Type |
|---|---|
| ads_enabled | bool |
| banner_enabled | bool |
| interstitial_enabled | bool |
| rewarded_enabled | bool |
| native_enabled | bool |
| app_open_enabled | bool |
| interstitial_click_count | int |
| force_update | bool |
| force_update_android_version | int |
| force_update_ios_version | int |
| maintenance_mode | bool |
Native Ad Factory IDs
Built-in factory IDs:
customNativeAd
customNativeAdSmall
fullscreenNativeAd
These factories are registered automatically by the monetization_kit Flutter
plugin on Android and iOS. You no longer need to copy the package's Kotlin or
Swift native ad factory reference files into each app project.
Android Native Setup
Add your AdMob app ID in your app's android/app/src/main/AndroidManifest.xml:
<meta-data
android:name="com.google.android.gms.ads.APPLICATION_ID"
android:value="ca-app-pub-xxxxxxxxxxxxxxxx~yyyyyyyyyy" />
Native ad factories and Android native ad layouts are built into this plugin. No manual Kotlin factory files or layout files are required in the app.
iOS Native Setup
Add your AdMob app ID in your app's ios/Runner/Info.plist:
<key>GADApplicationIdentifier</key>
<string>ca-app-pub-xxxxxxxxxxxxxxxx~yyyyyyyyyy</string>
Native ad factories are built into this plugin. No manual Swift factory files are required in the app.
Included Systems
- Retry Config
- Auto Preload
- Auto Reload
- App Resume Ads
- Native Cache
- Frequency Logic
- Cooldown Logic
- Dynamic Update Dialog
- Smart Ad Fallbacks
- Feedback Reporting
Example
A complete example application is included inside:
example/
License
MIT License