Firebase Cloud Messaging (FCM)
Firebase Cloud Messaging (FCM)
Role
Web push transport for every family site + PWA. When a user opts in, the browser registers a Service Worker, requests a token from FCM, and we store the token on the user's Firebase Auth profile. Worker endpoints (and Knock, see below) deliver to those tokens via the FCM HTTP v1 API.
Free tier
- Unlimited push notifications — no per-message fee on Firebase Spark
- No daily cap, no monthly cap
- HTTP v1 API for server-side send (works from a Cloudflare Worker
using OAuth-via-service-account; see
services/business/auth/firebase-spark.md) - iOS PWA support landed in iOS 16.4 — covered for free.
Card / subscription required?
NO. Spark tier — the family's firebase-spark-forever decision locks Spark forever. No Blaze upgrade.
Knock layered on top
FCM is the transport for browser push. As of 2026-06-20, every notification is orchestrated by Knock — Knock owns the workflow (which channels fire, in what order, with what dedupe window), then dispatches to FCM for the web-push channel and to Resend / SMS providers for email + SMS. The split is documented in the notifications-fcm-plus-knock decision.
Why we keep FCM as the transport instead of letting Knock send web push directly: FCM is free unlimited on Spark, integrates natively with our Firebase Auth user records (token storage on the user profile), and ships first-class iOS PWA support. Knock's role is orchestration only.
Use cases (transport channel only — Knock owns orchestration)
- Comment-reply notifications (browser push when the user is offline)
- Billing receipts and renewal alerts (web-push channel — email + in-app via Knock as well)
- Password / passkey-change alerts (web-push channel — also email
- SMS via Knock)
- Feature-flag rollout pings to opted-in users
Alternatives
- OneSignal — free 10K subscribers, requires card past that
- Pusher Beams — free 1K concurrent, paid past that
- Web Push direct (no service) — works but no analytics, no token rotation handling, no batching
Swap cost
Low — FCM HTTP v1 API is a thin wrapper over the W3C Web Push protocol; swapping means rewriting the Worker's send function and re-issuing tokens. Knock's web-push channel can also be pointed at OneSignal or direct Web Push as a backup.
Why this is our pick
Free unlimited on Spark. First-class web-push + iOS PWA support. Native to the family's existing Firebase Auth project — no new account, no new SDK, tokens live on the user profile. Knock layers on top for multi-channel orchestration without forcing us to leave Firebase for the actual delivery.