Watch And Earn docs
v3.0.0
Live demoConsole demo Get help
● Start · The full path

Installation
from zip to a working build.

The order that works: backend first, then the console, then the app. Each step links to the page with the details.

01Unzip and look around

Unzip the package to a folder without spaces in the path. You will see app/, firebase/, admin/, docs/ and README.md. Install the tools from Requirements first, and run the Quick start once so you know what a working app looks like.

02The order of work

  1. Create your Firebase project and deploy the backendBlaze plan, Authentication, Firestore, then firebase deploy. Firebase setup.
  2. Connect the app to your projectRun flutterfire configure in app/. It replaces the placeholder app/lib/firebase_options.dart. Until then the app shows a setup screen. Details.
  3. Deploy the operator console and create the ownerNode 22 host, ADMIN_SECRET_KEY, service account key, setup code. Operator console.
  4. Fill in the consoleBrand, legal page URLs, the backend URL, the ad network with its unit ids and verification secret, the rewards economy. Sections.
  5. Point your ad network's reward callback to your functionOne URL per network. Callback URLs.
  6. RebrandApplication id, bundle id, name, icon, accent colour. Rebranding.
  7. Replace Google's test AdMob app idsIn AndroidManifest.xml and Info.plist. How.
  8. Enable App Check and build for releaseSign, test, publish. App Check and Release.

03Install dependencies

cd app && flutter pub get
cd ../firebase/functions && npm ci
cd ../../admin && npm ci

flutter pub get downloads the ad network plugins from pub.dev, including ironSource LevelPlay, which comes under Unity's own terms (see Credits).

For iOS, also install the pods once on a Mac:

cd app/ios && pod install

04Build switches

The app reads these at build time with --dart-define (app/lib/core/env.dart):

SwitchDefaultWhat it does
DEMO_MODEfalsetrue = web demo: no Firebase, simulated labelled ads, in-memory backend.
USE_EMULATORfalsetrue = use the local Firebase emulators (auth 9099, firestore 8080, functions 5001).
EMULATOR_HOSTemptyHost of the emulators. Empty = 10.0.2.2 on the Android emulator, localhost elsewhere.
FUNCTIONS_REGIONus-central1The region your Cloud Functions run in. Must match FUNCTIONS_REGION in firebase/functions/.env.

A production build uses none of the first three. If you deploy Functions outside us-central1, pass the region every time you build:

flutter build appbundle --dart-define=FUNCTIONS_REGION=europe-west1