This post may contains affiliate links. As an amazon associate I earn from qualifying purchases.
Publishing a Flutter app can be overwhelming, especially when it comes to ads, signing, and Play Store submission. To save time and avoid mistakes, I’ve created a comprehensive checklist from my experience releasing BudgetAfford.
Step 1: Add Your App to AdMob
Go to AdMob and sign in.
Navigate to Apps → Add App.
Since BudgetAfford is not on Google Play yet, select No.
Fill in:
App name:
BudgetAffordPlatform: Android
Click Add App.
Copy the App ID (looks like
ca-app-pub-1234567890123456~1234567890) — this will go into your AndroidManifest.xml.
Step 2: Create Banner Ad Units
Inside your app in AdMob → Ad units → + Create Ad Unit.
Choose Banner.
Name each banner according to the screen it will appear on:
Income BannerExpenses BannerDeductions Banner
Leave Partner Bidding unchecked for simplicity.
Click Create and copy each Ad Unit ID (looks like
ca-app-pub-1234567890123456/9876543210).Repeat for all screens where ads appear.
Step 3: Update Flutter Code
Add your App ID to
android/app/src/main/AndroidManifest.xml:
android:name=“com.google.android.gms.ads.APPLICATION_ID”
android:value=“ca-app-pub-1234567890123456~1234567890”/>
Replace test banner IDs in your screens with real Ad Unit IDs, but keep test ads enabled in debug builds:
import ‘package:flutter/foundation.dart’;
String getBannerAdUnitId(String screen) {
if (kDebugMode) {
return BannerAd.testAdUnitId;
}
switch (screen) {
case ‘Expenses’:
return ‘ca-app-pub-1234567890123456/EXPENSES_ID’;
case ‘Income’:
return ‘ca-app-pub-1234567890123456/INCOME_ID’;
case ‘Deductions’:
return ‘ca-app-pub-1234567890123456/DEDUCTIONS_ID’;
default:
return BannerAd.testAdUnitId;
}
}
Call it when creating your banner:
Make sure
MobileAds.instance.initialize()is called inmain()before loading any ads.
Step 4: Prepare Signing & Build
Ensure
key.propertiesis created and referenced inbuild.gradlefor release signing:
def keystorePropertiesFile = rootProject.file(“key.properties”)
if (keystorePropertiesFile.exists()) {
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
}android {
signingConfigs {
release {
keyAlias keystoreProperties[‘keyAlias’]
keyPassword keystoreProperties[‘keyPassword’]
storeFile file(keystoreProperties[‘storeFile’])
storePassword keystoreProperties[‘storePassword’]
}
}
buildTypes {
release {
signingConfig signingConfigs.release
}
}
}
.gitignoreshould excludekey.propertiesand build folders.Build your release AAB:
Step 5: Screenshots, Video & Metadata
Prepare screenshots for all required device sizes.
Prepare a promo video (optional but recommended).
Update pubspec.yaml and app metadata.
Ensure privacy policy URL is ready and uploaded.
Step 6: Ads.txt (Optional but Recommended)
Generate your ads.txt entry for your AdMob publisher ID:
Upload it to your website root.
If no website exists, it’s optional; AdMob can still serve ads.
Step 7: Final Checks Before Upload
Test the release build on a device not registered as a test device.
Verify ads load (real ads may take up to 24–48 hours to appear).
Confirm package name matches Play Console:
com.vasapps.budgetafford.Ensure MobileAds.instance.initialize() is called.
Check privacy policy and content ratings.
Step 8: Upload to Play Console
Open Play Console → Create a new app.
Fill in pricing, countries, and ads declaration.
Upload your
.aabfile.Submit for review.
✅ Summary
By following this checklist, you ensure:
Real ads are correctly integrated
App is properly signed and built
Metadata, screenshots, and promo video are ready
Optional items like ads.txt are included
Release build is verified on real devices
This process can now be reused for future apps, saving time and avoiding common mistakes.
This post may contains affiliate links. As an amazon associate I earn from qualifying purchases.