Skip to content

Push notifications (Firebase)

So a parent's phone buzzes when their child is marked absent or a fee falls due. About 45 minutes, once.

Parent app only

Push notifications work in the parent app. The staff and driver apps do not receive them — that is by design, not a missing setting. See Before you build.

What you are setting up

Push notifications go through Firebase Cloud Messaging, a free Google service.

Everything is configured in your panel. The app asks your server for its Firebase settings when it starts, so there is no file to place inside the app and nothing to rebuild.

You take two things from Firebase and put both in your panel:

From FirebaseInto your panelPurpose
Service account key (a .json file)UploadedLets your server send
App config values (5 short fields)Typed inLets the app receive

This is why the same app works for every client

Because the Firebase settings come from the server, one build of the app works for any installation. Change Firebase later and the app picks it up on its next start — no rebuild, no new store release.

You do not need a google-services.json file. If you have seen that mentioned in other Flutter guides, it does not apply here.

There is a guide inside your panel too

On the FCM settings screen there is a Full Setup Guide button with the same steps and the current Firebase Console wording. If Google has moved something since this page was written, trust that one.

Step 1: Create a Firebase project

At the Firebase Console, create a project. One project covers all your schools — you do not need one per school.

Give it a name you will recognise later, such as your platform name.

Step 2: Register the Android app

Inside the project, add an Android app. It asks for the package name, which must match your app exactly. For an unmodified parent app that is:

com.projectworlds.school_erp_parent_app

If you changed the app ID for a white-label build, use your ID instead — they must match character for character, or notifications silently never arrive.

Firebase then offers you a google-services.json download. You do not need it — skip the download and any instructions about placing it in the project. What you need are the config values, collected in step 4.

Step 3: Upload the service account key to your panel

This is what lets your server send notifications.

In the Firebase Console go to Project Settings → Service Accounts and choose Generate new private key. A .json file downloads.

Then in your panel:

Sidebar → Settings → FCM

Upload that file under Service Account JSON File.

You should now see Configured, with your Firebase project name shown beside it. If it still says Not Configured, the upload did not take.

That file is a master key

Anyone holding it can send notifications to every user of your app. Do not email it, commit it to a repository, or paste it into a support chat.

Step 4: Fill in the client app details

Same screen, Client App Configuration. These come from Firebase Console → Project Settings → General → Your apps → Config:

FieldLooks like
API KeyAIzaSy...
App ID1:123456789:android:abc123
Project IDmy-school-erp
Messaging Sender ID123456789
Storage Bucket (optional)my-school-erp.appspot.com

Step 5: Turn it on

Switch Enable FCM Platform-Wide to Active, then Save FCM Settings.

This is a master switch

While it is off, no school can send a push notification, no matter what their own settings say. If notifications stop working platform-wide, check this first.

Each school also has its own push notification switch. A school with it off gets no notifications even when the platform switch is on.

Step 6: Test it

Press Test Push on the same screen.

The notification should reach a phone with the parent app installed and logged in.

ResultWhat it means
Notification arrivesEverything is connected — you are done
"Not configured"Step 3 did not complete
Sends, but nothing arrivesThe five values in step 4 belong to a different Firebase project than the service account key, or the app has not been restarted since you saved them

If you are also publishing on iOS

iOS needs one extra piece: an APNs authentication key from your Apple Developer account, uploaded into Firebase under Project Settings → Cloud Messaging.

Without it, Android notifications work perfectly and iPhone users receive nothing — which is a confusing bug report to receive.

If notifications are not arriving

CheckWhy it matters
Is the cron job running?Notifications are queued like email and SMS. No cron, nothing sends, no error — check first
Is Enable FCM Platform-Wide on?Master switch, overrides everything
Is push enabled for that school?Per-school switch
Does the package name in Firebase match the app exactly?A mismatch fails silently
Are all five config values filled in?If they are blank the app quietly starts with push disabled — no error, no crash
Has the app been fully closed and reopened?Settings are read when the app starts
Did the parent allow notifications on their phone?Android 13+ and iOS both ask, and people tap "no"
Has the parent been logged out for a long time?Stale device registrations are cleaned up automatically each night
iPhone users only affected?The APNs key is missing in Firebase