Consoles and Key Files Required for Implementing a Flutter App
When implementing in-app billing, Adjust aggregation, and Firebase push notifications in a Flutter app, how many consoles do you actually need to configure, and how many key files are required? I’ve summarized the answer here.
This is also intended to serve as a handover document for contractors.
Summary
| Item | Count |
|---|---|
| Consoles | 4 |
| Key files | 2 (+ 1 token) |
| Identity verification docs | 2 types (ID + address verification) |
List of Consoles (4)
| # | Console | URL | Purpose |
|---|---|---|---|
| 1 | Google Cloud Console | console.cloud.google.com | Create service accounts, enable APIs |
| 2 | Google Play Console | play.google.com/console | App registration, in‑app item setup, tester settings |
| 3 | Firebase Console | console.firebase.google.com | FCM project settings |
| 4 | Adjust Dashboard | dash.adjust.com | Attribution settings, issue event tokens |
List of Key Files (2 + 1 token)
| # | File | Issued by | Purpose | Format |
|---|---|---|---|---|
| 1 | service-account.json | Google Cloud Console | Purchase verification API + FCM sending | JSON |
| 2 | google-services.json | Firebase Console | Android Firebase configuration | JSON |
| 3 | App token | Adjust Dashboard | SDK initialization | 12 alphanumeric characters (embedded in code) |
Note: The same service-account.json can be used for both purchase verification and FCM sending (when using the same project).
Setup Details by Feature
1. Google Play Billing
Google Cloud Console
- Enable Google Play Android Developer API
- Create a service account
- Download the JSON key file
Google Play Console
- Developer registration ($25 USD; identity verification required)
- Invite the service account under “Users and permissions”
- Grant permissions: View financial data + Manage orders and subscriptions
- Register in‑app items (after uploading the AAB)
- Configure license testers
Pricing
| Item | Price |
|---|---|
| Google Play Android Developer API | Free |
| Google Play Console developer registration | $25 (one‑time) |
| In‑app billing commission | 15–30% (deducted from revenue) |
There is no fee for the API calls themselves.
Notes
- After enabling the API, it may take up to 24 hours to actually work (a common cause of 401 errors)
- The “API access” menu has been removed; configuration is now under “Users and permissions”
- If 401 errors persist, adding the “Service Account User” role in GCP IAM may be necessary
Adjust Pricing and Features
Plans
| Plan | Monthly attributions | Main features |
|---|---|---|
| Base (Free) | 1,500/month (for 12 months) | Basic attribution, email support (English) |
| Core (Paid) | Custom | Volume discounts |
| Enterprise (Paid) | Custom | Dedicated support, deeper discounts |
Specific pricing is not public. It’s a scalable model with custom quotes based on usage.
Paid add‑ons (for Core/Enterprise)
| Feature | Description |
|---|---|
| Fraud Prevention Suite | Fraud detection/prevention (real‑time blocking) |
| Audience Builder | Audience building and export (Facebook/Snapchat, etc.) |
| SKAdNetwork Solutions | Measurement and optimization for iOS |
Fraud Prevention Suite is available as a “Growth Solutions” add‑on for Core/Enterprise plans. It is not available on the free Base plan.
If you need anti‑fraud, you’ll likely need to move to a paid plan.
2. Adjust
Adjust Dashboard
- Create an account
- Register the app (set package name)
- Obtain the app token
- Create events (sign‑up, purchase, etc.)
- Obtain event tokens
- Generate tracker URLs (for ad measurement)
Flutter‑side setup
- Add the
adjust_sdkpackage - AndroidManifest.xml: INTERNET, ACCESS_NETWORK_STATE permissions
- build.gradle: add play‑services‑ads‑identifier, installreferrer
- iOS: ATT usage description; add AdSupport/StoreKit/AppTrackingTransparency
3. Firebase FCM
Firebase Console
- Create a project
- Register an Android app
- Download
google-services.json - Set up a service account (for FCM sending)
Flutter‑side setup
- Add the
firebase_messagingpackage - Place
google-services.jsonunderapp/ - Configure AndroidManifest.xml
Server side
- Add the
kreait/firebase-phplibrary - Place
service-account.json - Create a table for managing FCM tokens
Firebase FCM Pricing and Limits
Pricing
Completely free. There is no charge regardless of the number of messages sent.
However, if you trigger notifications using other Firebase services such as Cloud Functions or Firestore, those services will incur charges.
Limits
| Item | Limit |
|---|---|
| Send rate | 600,000 messages/min (default) |
| Batch registration | Up to 1,000 per request |
| Topic subscriptions | Up to 2,000 topics per app |
| Topic registration rate | 3,000 QPS per project |
When exceeded, you’ll receive a 429 RESOURCE_EXHAUSTED error. For retries, observe the retry-after header or wait 60 seconds by default.
If you plan to operate at very large scale (100k RPS or more), contact Firebase Support in advance.
Operating options
Because FCM is free, instead of handing everything over to a contractor, you can choose to own the Firebase project yourself.
| Pattern | Pros | Cons |
|---|---|---|
| Hand everything to the contractor | Easy to manage | Lose control |
| You own it and bill usage | Monetize with actual cost + fee | Hard to justify since FCM is free |
| You own it and charge a flat maintenance fee | Fixed monthly income | Need a good sense of pricing |
FCM itself is free, but it may be more practical to charge a monthly fee that includes development, operations, and support for the notification management UI.
Fastest Setup Order
- Google Cloud Console → Service account + JSON key
- Google Play Console → Developer registration (identity verification: up to 24 hours)
- Firebase Console → Create project +
google-services.json - Adjust → Register app + obtain tokens
Note: Identity verification on Google Play Console is the biggest bottleneck (it can take 1–2 days).
Notes on Billing Library Versions
Billing Library v7 or later is required after August 31, 2025. You can request an extension for a grace period until November 1.
Version of the in_app_purchase package
# Update to the latest version by August 2025
in_app_purchase: ^3.2.0 # Compatible with Billing Library v7
Even with v3.2.x, there are reports of warnings in Google Play Console stating “Billing Library v7.0.0 or higher is required” (see Issue #171499). Updating to the latest version is recommended.
Notes when using subscriptions
Since Billing Library v5, the subscription pricing structure has changed significantly.
Old: price retrieval only by productId
New: productId + basePlanId + offerId + offerToken are required
This does not affect consumable items, but if you add subscriptions, pay attention to handling subscriptionOffers and pricingPhases.
Related Articles
- Flutter WebView + Google Play Billing Implementation Guide
- Google Play Billing Server Verification API Setup Guide
- Firebase FCM Push Notification Implementation Guide
- Adjust Admin Setup
- Adjust Flutter SDK Integration Guide