Tech 6 min read

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

ItemCount
Consoles4
Key files2 (+ 1 token)
Identity verification docs2 types (ID + address verification)

List of Consoles (4)

#ConsoleURLPurpose
1Google Cloud Consoleconsole.cloud.google.comCreate service accounts, enable APIs
2Google Play Consoleplay.google.com/consoleApp registration, in‑app item setup, tester settings
3Firebase Consoleconsole.firebase.google.comFCM project settings
4Adjust Dashboarddash.adjust.comAttribution settings, issue event tokens

List of Key Files (2 + 1 token)

#FileIssued byPurposeFormat
1service-account.jsonGoogle Cloud ConsolePurchase verification API + FCM sendingJSON
2google-services.jsonFirebase ConsoleAndroid Firebase configurationJSON
3App tokenAdjust DashboardSDK initialization12 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

ItemPrice
Google Play Android Developer APIFree
Google Play Console developer registration$25 (one‑time)
In‑app billing commission15–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

PlanMonthly attributionsMain features
Base (Free)1,500/month (for 12 months)Basic attribution, email support (English)
Core (Paid)CustomVolume discounts
Enterprise (Paid)CustomDedicated support, deeper discounts

Specific pricing is not public. It’s a scalable model with custom quotes based on usage.

FeatureDescription
Fraud Prevention SuiteFraud detection/prevention (real‑time blocking)
Audience BuilderAudience building and export (Facebook/Snapchat, etc.)
SKAdNetwork SolutionsMeasurement 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_sdk package
  • 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_messaging package
  • Place google-services.json under app/
  • Configure AndroidManifest.xml

Server side

  • Add the kreait/firebase-php library
  • 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

ItemLimit
Send rate600,000 messages/min (default)
Batch registrationUp to 1,000 per request
Topic subscriptionsUp to 2,000 topics per app
Topic registration rate3,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.

PatternProsCons
Hand everything to the contractorEasy to manageLose control
You own it and bill usageMonetize with actual cost + feeHard to justify since FCM is free
You own it and charge a flat maintenance feeFixed monthly incomeNeed 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

  1. Google Cloud Console → Service account + JSON key
  2. Google Play Console → Developer registration (identity verification: up to 24 hours)
  3. Firebase Console → Create project + google-services.json
  4. 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.


References