Skip to main contentSkip to footer

    Top Rated & Verified

    Top Clutch App Development Company Black Owned United StatesTop Clutch Java Developers France 2026Top Clutch Service Line Blind Company Black Owned 2026Top Clutch App Development Company Minority Owned 2026Top Clutch Web Developers Black Owned 2026Top Clutch App Development Company Black Owned 2026Top Clutch Flutter Developers France 2026Top Clutch Health & Wellness App Developers France 2026Top Clutch Swift Company France 2026Top Clutch Machine Learning Company France 2026Top Clutch Chatbot Company France 2026Top Clutch Artificial Intelligence Company France 2026Top Clutch App Development Company Minority Owned Los Angeles
    Back to Blog
    Engineering Guide
    August 31, 2026
    29 min read

    Push Notification Infrastructure:The 2026 Guide to APNs, FCM, and Delivery Reliability

    Two mandatory platform layers, one 2024 API shutdown, one 2025 certificate cutover, and a compliance overlay most teams skip. Here is how push actually works end to end, what breaks it in production, and when to build versus buy.

    Push notification infrastructure diagram concept for iOS and Android apps in 2026 — APNs, FCM, token lifecycle and delivery reliability
    Feb 24, 2025
    APNs production certificate authority cutover — servers without the new root fail silently at the TLS layer
    Apple Developer News, announced October 17, 2024
    Jun 20, 2024
    FCM legacy HTTP and XMPP send APIs fully shut down; only HTTP v1 accepts sends since
    Google/Firebase legacy API deprecation notice
    Android 13+
    POST_NOTIFICATIONS becomes a runtime permission — notifications are off by default on install
    Android Developers documentation, API level 33
    $28k–$70k
    Single-platform push infrastructure build, 4–9 weeks
    Frenchy Digital scoping bands, 2026

    Key Takeaways

    • Push notification infrastructure is the whole pipeline — your server, the platform gateway (APNs or FCM), token lifecycle, retry/dead-letter handling and delivery confirmation — not just the API call that sends a message. Every one of those pieces fails silently if nobody owns it.
    • Two 2024–2025 platform changes are load-bearing: FCM's legacy HTTP/XMPP APIs shut down for good on June 20, 2024, and APNs' server certificate authority changed with a production cutover on February 24, 2025. Infrastructure built or restored on old assumptions after either date fails silently, not loudly.
    • Neither APNs nor FCM guarantees delivery. Push is best-effort by design — Low Power Mode, force-quit, offline devices and background budgets all sit outside any vendor's control. A workflow that cannot tolerate a missed message needs a non-push fallback.
    • Android 13 flipped notification permission to opt-in via the POST_NOTIFICATIONS runtime permission, mirroring the one-shot decision problem iOS has had since iOS 8 — get the permission-priming moment right, because most platforms only give you one real shot at it.
    • Apple's on-device Priority Notifications (iOS 18.4, March 31, 2025) now re-rank your notifications using Apple Intelligence independent of what you set — correctly using interruption levels (passive, active, timeSensitive, critical) matters more than it used to.
    • No independent, audited benchmark exists for push open rates or opt-in rates. Three 2025–2026 vendor reports (Airship, Batch, Pushwoosh) each publish a different 'industry average' iOS opt-in rate from their own customer bases with no disclosed methodology — we refuse to repeat any of them as fact.
    • Frenchy Digital cost bands: discovery $9k–$22k; single-platform build $28k–$70k; multi-platform orchestration $70k–$180k; enterprise/regulated build $180k–$420k+.

    What 'Push Notification Infrastructure' Actually Means

    Push notification infrastructure is the full pipeline that gets a message from your backend onto a locked screen — not the single API call most teams picture when they say "we added push notifications."

    The pipeline has five load-bearing pieces, and each one fails silently if nobody owns it. Your server builds a payload. It hands that payload to a platform gateway — Apple's APNs for iOS, Google's FCM for Android and web — authenticated with credentials that expire or rotate on a schedule you don't control. The gateway holds a persistent connection to the device and forwards the payload the next time the device is reachable, which is not the same as immediately. The device's OS decides whether, when, and how loudly to surface it, using rules you only partly influence. And somewhere in your own system, a token store has to know which of your millions of stored device identifiers are still alive, because both platforms will tell you when one has died and most systems never bother to listen.

    The single sentence worth remembering from this entire guide: neither Apple nor Google guarantees delivery to a device. Push is a best-effort system by design, and every failure mode described below follows from that one fact.

    This matters because push sits at an unusual intersection for a mobile engineering team: it is simultaneously one of the easiest features to demo (a working send in an afternoon) and one of the easiest to get quietly, expensively wrong at scale (a token store that has been 15 percent dead for six months with nobody noticing). We wrote this guide because most of what circulates about push notifications is either an SDK quick-start that stops at the demo, or vendor marketing that skips straight to opt-in-rate benchmarks with no disclosed methodology. Neither answers the question an operator actually has: what does this system need to do correctly, in what order, and what does it cost to build it that way.

    If you are weighing whether to build this yourself against a React Native or Flutter cross-platform base, the push layer is one of the few places the choice of framework still leaks through to native code — both frameworks wrap the same two gateways, but the quality of that wrapper varies, and you will end up reading Apple and Google's own documentation regardless of which one you pick.

    Device Tokens: Registration, Rotation, and Silent Death

    A device token is the address a platform gateway uses to find a specific installation of your app on a specific device — not a user, not an account, an installation. Every push send starts by looking one up, and every architecture problem in this section starts from teams treating the token store as an afterthought instead of the foundation it is.

    Tokens are not permanent. iOS can reissue a device token when the user restores from backup to a new device, reinstalls the app, or in rarer cases when Apple rotates it server-side; Android tokens rotate under FCM's own registration-refresh logic and whenever the app is reinstalled or its data is cleared. Your client SDK's job is to detect a new token on launch and push the update to your server immediately — a token store that only updates on account login will drift out of date for every user who doesn't log in often.

    The harder problem is the tokens that go stale silently. A user uninstalls your app; nothing tells your server that happened. The next time you send to that token, the platform gateway rejects it — but only if your system is listening for the rejection.

    SignalAPNs (iOS)FCM (Android/web)
    What it looks likeA 410 status on the token's associated response path, with a timestamp indicating when the token stopped being validAn UNREGISTERED error code returned directly on the send response
    What it meansThe token is permanently invalid — do not retry itThe token is permanently invalid — do not retry it
    What most systems do with itNothing. The send is logged as an error and the token stays in the store indefinitely.Nothing. Same failure mode, same root cause: nobody wired a pruning job to the response.
    What a correctly built system doesA scheduled job consumes the rejection signal and deletes or flags the token within a day, not a quarterSame: the send path itself, or a nightly job, prunes on UNREGISTERED

    Left unpruned, dead tokens don't just waste a fraction of every send — they corrupt your own metrics. A delivery-rate dashboard computed against a token store that is 15 percent dead will report a 15-point delivery problem that doesn't exist; the tokens were never going to resolve, and no amount of retry logic or vendor migration fixes a stale address book. This is the single most common production issue we see in push systems that were built once and never revisited, and it is also the cheapest one to fix — a scheduled job, not a redesign.

    A second, less obvious edge case is the token-to-recipient mapping itself. A token identifies an installation, not a person, which means a shared device, a user who logs out and a different user logs in, or an app reinstalled under a new account all create the same underlying question: which account should this token be attached to right now? Systems that key push delivery off a stale user-to-token mapping end up sending one person's notifications to whoever is currently logged in on that device — a real bug we have seen in production, not a theoretical one — because nobody re-associated the token on logout. The fix is mechanical: detach the token from the outgoing account at logout and re-register it fresh on the next login, every time, with no exception for "the same device so it's probably fine."

    • Multi-device users: One person, several installs — the token store needs a one-to-many relationship from account to token, not one-to-one, or a user with both a phone and a tablet only ever gets notified on whichever device registered last.
    • Reinstall vs. restore: A fresh install issues a new token immediately; a restore-from-backup to a new device can carry old app state but still needs a fresh token registered against the new hardware on first launch.
    • Logout without re-registration: The most common real bug: failing to detach a token from an account at logout means the next person to use that device can receive the previous user's notifications.

    APNs: Token-Based Auth and the 2025 Certificate Cutover

    Apple Push Notification service is the only door into an iOS device. Every vendor, every SDK, every cross-platform framework you might choose is, underneath, a client of this one gateway — buying a platform changes who manages the plumbing in front of it, not whether APNs sits in the path.

    Apple documents two ways to authenticate a connection to APNs, and one of them is legacy. Token-based authentication uses a JSON Web Token signed with a .p8 private key you generate once in your developer account, carrying an iss claim (your Team ID), a kid claim (the Key ID), and an expclaim, sent over HTTP/2. It does not expire the way a certificate does, and one key works across every app your team owns. Certificate-based provider connections still function over HTTP/2 today, but each certificate expires annually and is scoped to a single app's bundle ID — it is the option every current piece of Apple documentation treats as the legacy path, not the option Apple leads with.

    The distinction between provider authentication and server-side trust is where most incidents actually happen, and it is worth separating clearly. Provider certificates and keys are what you present to APNs to prove your server is allowed to send. The server certificate is what APNs presents to you, and your server validates against its trust store before it will accept the connection at all — a completely different mechanism, and the one that changed in 2025.

    On October 17, 2024, Apple announced that the certificate authority behind the APNs server certificate was changing. The new root was required in application servers' trust stores by January 20, 2025 for the sandbox environment and February 24, 2025 for production. This had nothing to do with your provider keys or certificates — it was the certificate APNs itself presents on connection, validated by your TLS stack before your application code ever runs. A server that never added the new root alongside the old one during the transition window fails at the handshake, with no application-level error pointing at the cause.

    Why this still matters in 2026: any server rebuilt from an old container image, restored from a stale snapshot, or provisioned by a script written before early 2025 may still be missing the current root. This is not a one-time fix you made and can forget — it is a pattern. Apple has changed this root before and will again, and trust-store currency belongs on your infrastructure checklist as an ongoing item, the same way you'd track TLS certificate expiry on any other server.

    FCM: HTTP v1, the Legacy Shutdown, and Android Delivery

    Firebase Cloud Messaging is Google's equivalent gateway for Android and the web, and — because most cross-platform SDKs route Android sends through it regardless of vendor — it is also the transport underneath the large majority of Android push traffic even when a paid platform sits in front of it.

    Google marked the legacy FCM HTTP and XMPP send APIs deprecated in June 2023 and shut them down for good on June 20, 2024. Everything still pointed at the legacy fcm.googleapis.com/fcm/sendendpoint stopped working that day — not degraded, dead. The replacement, FCM's HTTP v1 API, authenticates with short-lived OAuth2 access tokens issued to a service account instead of a long-lived server key, is scoped to a specific Firebase project rather than a legacy sender ID, and uses a different message envelope shape. The Admin SDK most teams actually integrate against wraps v1 directly, so most current codebases never touch the raw HTTP surface — but any integration older than 2024, or any custom send logic written by hand, is worth auditing specifically for a hardcoded legacy endpoint.

    On the client side, FCM exposes a delivery-priority flag — normal or high — that changes how aggressively Android tries to wake the device to deliver the message, and a time-to-live window after which the gateway stops trying and drops it. Neither is a delivery guarantee; both are inputs the OS weighs alongside battery state, Doze mode, and the device's own background-execution limits, which have tightened with almost every Android release since Android 6's original Doze implementation.

    We were unable to directly retrieve Firebase's own current documentation pages while researching this guide, due to a network restriction in our research tooling rather than any ambiguity in the underlying facts. The June 20, 2024 shutdown date is corroborated across multiple independent threads that quote Google's original announcement directly — see the sources list — but if a specific integration detail matters for your migration, confirm it against Firebase's live documentation before you act on it.

    DimensionAPNs (iOS)FCM (Android / web)
    Authentication methodToken-based JWT (.p8 key, iss/kid/exp claims) over HTTP/2, Apple's recommended current pathOAuth2 short-lived access token via a service account, required since the v1 migration
    Legacy path statusCertificate-based provider connections still function over HTTP/2 but are the documented legacy option; certificates expire annually and are scoped to one appLegacy HTTP and XMPP send APIs were fully shut down June 20, 2024 — no legacy path remains
    Delivery guaranteeBest-effort; Apple states no fixed daily cap on silent push exists because the throttling budget is adaptive to battery, network and Background App Refresh stateBest-effort; FCM offers a short message TTL and 'high priority' delivery class, neither of which is a delivery guarantee to an unreachable device
    Dead-token signalAPNs feedback indicates a token is no longer valid, with a timestamp for when it stopped being validFCM returns an UNREGISTERED error on send to a token that is no longer valid
    Permission modelOne-shot system prompt since iOS 8; declining locks the app out until the user changes it in SettingsOpt-in runtime permission (POST_NOTIFICATIONS) only since Android 13 (API 33); pre-13 devices default to on
    2024–2025 breaking changeServer certificate authority change: new root required in sandbox by Jan 20, 2025 and production by Feb 24, 2025Legacy HTTP/XMPP APIs fully retired June 20, 2024 — any sender still pointed at the old endpoint has been failing since that date

    The Permission Prompt: One Shot, Two Platforms

    Both major platforms now require explicit, affirmative permission before your app can show a single notification — but they arrived at that rule five years apart, and the failure mode for getting the prompt wrong is identical on both.

    iOS has required an explicit permission request since iOS 8. Android inverted its default far more recently: starting with Android 13 (API level 33), apps must declare and request the POST_NOTIFICATIONS runtime permission before sending any non-exempt notification, where previously notifications were on by default and a user had to actively find the setting to turn them off. Android's own documentationis direct about the consequence: "If the user selects the don't allow option, your app can't send notifications unless it qualifies for an exemption. All notification channels are blocked, except for a few specific roles" — and for apps still targeting Android 12L or lower, "if the user taps Don't allow, even just once, they aren't prompted again until they uninstall and reinstall your app, or you update your app to target Android 13 or higher."

    That one-shot structure is the entire reason permission-priming exists as a discipline. Both platforms let you show your own in-app explanation before triggering the system dialog — a short screen explaining specifically what the user gets (order updates, game invites, appointment reminders) rather than a generic "stay in the loop." The system prompt itself cannot be customized or re-triggered on demand once declined, so the only lever you actually control is the moment immediately before it appears, and on both platforms you effectively get one real attempt.

    On Android, correctly using notification channelsalso matters more than most teams treat it: channel-level importance is set once at creation and cannot be changed by your app afterward — only the user can adjust it in system settings — so shipping every notification type into one broad channel forces users into an all-or-nothing choice instead of letting them mute the categories they don't want while keeping the ones they do.

    Interruption Levels and Apple's On-Device Re-Ranking

    iOS gives you four interruption levels, and treating them as decoration rather than architecture is a mistake that got more expensive in 2025.

    LevelWhat the system doesCorrect use
    passiveAdds the notification to the list without lighting the screen or playing a soundContent that shouldn't interrupt at all — a background sync confirmation, a minor status update
    activePresents immediately, lights the screen, can play a sound (the default)Most ordinary notifications: a new message, a like, a routine update
    timeSensitivePresents immediately and can break through Focus mode restrictionsThings the user genuinely needs to see soon: a delivery arriving now, a boarding call
    criticalBypasses the mute switch entirely to play a sound (a scarce entitlement Apple grants sparingly)Safety alerts only — this is not a marketing lever and Apple reviews access to it accordingly

    Since iOS 18.4 (released March 31, 2025), Apple Intelligence added on-device machine-learning ranking — Priority Notifications — that surfaces what it judges to be your most important messages at the top of the Lock Screen and notification stack, independent of the interruption level you set. It leans hardest on its own judgment exactly where developers left everything at the default activelevel instead of correctly categorizing notification types. The practical consequence: you are no longer the only ranking signal in the system. Getting interruption levels right at the API level is no longer a nice-to-have — it's an input into a second decision-maker you don't control.

    On Android, the analogous lever is notification-channel importance combined with the notification's own priority flag, and the same principle applies: categorize honestly, because both platforms are increasingly willing to override a developer who marks everything urgent.

    Silent Push: Budgets, Throttling, and What It's Actually For

    A silent push — a payload carrying content-available: 1with no visible alert, sound, or badge — wakes your app briefly in the background to fetch fresh data before the user opens it. It is the mechanism behind "the app already had the new content ready when I opened it," and it is the most misunderstood category in this entire pipeline.

    Apple's own guidance is not to send more than two or three background notifications per hour to a given device, and the system layers dynamic throttling on top of that based on battery level, network conditions, Low Power Mode, and how often the user actually opens the app — with no fixed, published daily cap, because the budget adapts rather than staying static. A device in Low Power Mode or with a poor track record of the user opening the app after a silent push will simply receive fewer of them over time, silently, with no error surfaced anywhere in your pipeline.

    Silent push is an opportunistic optimization, never a guarantee. If a workflow depends on data being current the moment a user opens the app, build a foreground refresh check as the actual source of truth, and treat silent push as a best-effort head start — not the mechanism the feature depends on.

    This is also the category most exposed to prompt-injection-adjacent risk if your app pipes any external, untrusted content (a webhook from a third party, a scraped feed) directly into a silent-push-triggered background process without validation — treat any data arriving via a background wake the same way you'd treat any other untrusted input at a system boundary, not as implicitly trusted just because it arrived through your own push channel.

    Delivery Reliability: What 'Sent' Doesn't Mean

    "Sent successfully" from your push provider means the platform gateway accepted your payload for delivery. It does not mean a device received it, and it does not mean a human saw it — collapsing those three distinct states into one green checkmark is the most common reliability mistake in production push systems.

    • Accepted: The gateway (APNs or FCM) returned a success status for your send request. This is the only state most integrations actually measure.
    • Delivered: The payload reached the device. Neither platform confirms this back to your server by default — you only learn it indirectly, if at all, through client-side telemetry your own app reports after the fact.
    • Seen: A human looked at the notification. This requires your own client-side instrumentation and is a separate signal from delivery entirely.

    Because neither gateway offers an end-to-end delivery guarantee, the correct architectural response depends entirely on what the notification is for. For a workflow where a missed message is merely a minor inconvenience — a new-content nudge, a re-engagement prompt — best-effort is an acceptable trade. For a workflow where a missed message is a real problem — a one-time passcode, a fraud alert, a critical status change — push cannot be the only channel; it needs a fallback to SMS, email, or a pull-based check on next app open, and your system needs to explicitly track the difference between "we sent it" and "we confirmed it landed."

    Retry and dead-letter handling belong in the same conversation. A transient error from either gateway — a 5xx from APNs, an UNAVAILABLE from FCM — is recoverable with exponential backoff; a permanent error (invalid token, unregistered) is not, and retrying it forever just wastes send quota against a token that will never resolve. A production system needs both paths distinctly implemented, with the permanent-failure path feeding directly into the token-pruning job described earlier.

    Rich notifications — an image, a video thumbnail, or custom UI attached to the alert — add a further reliability wrinkle worth flagging separately: on iOS they run through a Notification Service Extension, a small separate process with its own memory ceiling and a hard time budget to fetch and attach the media before the system gives up and shows the plain-text fallback instead. That fallback path is not a bug to fix; it is the correct behavior, and a well-built notification should read sensibly even when the rich content never arrives, because on a slow network it frequently won't.

    Build vs. Buy: A Landscape That Refuses to Score What It Can't Verify

    This is not a ranked top-10 list, and that is a deliberate choice. Push notification infrastructure has two mandatory platform layers — APNs and FCM — that every vendor sits in front of, so the useful question is not "which vendor is best" but "what does each option actually replace, and what do you still own yourself."

    ProviderCategoryWhat You're Actually BuyingPublic Security PostureCorporate Status (checked Aug 31, 2026)
    Firebase Cloud Messaging (Google)Free platform layerThe Android/web delivery backbone; nearly every Android push path terminates here even when a paid vendor sits in front of itPart of Google Cloud's standard security program; FCM itself is not a separately BAA-able productGoogle product, not a company — not applicable
    Apple Push Notification service (APNs)Mandatory platform layerThe only door into an iOS device; every iOS vendor is a client of this, never a replacement for itApple's own infrastructure; you manage authentication keys and trust-store roots on your sideApple product, not a company — not applicable
    Amazon SNS Mobile PushCloud infra utilityA thin AWS routing layer over APNs/FCM; you still own token lifecycle and retry logic yourselfAWS's standard compliance program (SOC, ISO, HIPAA-eligible with a BAA at the AWS account level)AWS service, not a standalone company
    OneSignalSelf-serve platformThe fastest path to a monitored, working send pipeline with a real free tierPublishes a security page; verify current BAA availability directly before any regulated usePrivate, independent; $84.3M total raised, Series C in 2022
    BrazeEnterprise cross-channel platformPush as one channel inside a full lifecycle-marketing and orchestration suitePublishes a public trust centerPublic company, Nasdaq: BRZE; FY2026 revenue $738.2M, up 24.4% year over year
    AirshipEnterprise mobile-first platformThe deepest mobile-specific feature set among the independents (message center, wallet)Publishes trust and security resources; verify current certifications directlyPrivate, independent; backed by August Capital, Verizon Ventures and others. Not to be confused with the unrelated UK hospitality-CRM company of the same name acquired by Zonal in 2022
    IterableEnterprise cross-channel platformSimilar shape to Braze; competes on AI-driven send-time and content personalizationPublishes a security page; verify current certifications directlyPrivate, independent; $200M Series E at a $2B valuation
    CleverTapEngagement + product analyticsPush bundled with in-app analytics and lifecycle campaigns, strong Android and emerging-market delivery focusPublishes compliance claims; verify current certifications directlyPrivate, independent, Series D; over $180M raised across sources reviewed, no evidence of acquisition
    BatchMid-market CRM + pushA European (French) alternative with GDPR-first positioningPublishes compliance claims; verify current certifications directlyPrivate, independent, French company

    A few categories worth naming separately: developer-first "notification infrastructure" platforms — Knock, Courier, and the open-source Novu, all founded around 2021 — have emerged as a distinct category from the marketing-suite platforms above, positioning themselves as a programmable orchestration layer (multi-channel workflows, per-user preference centers, template management via API) for engineering teams who want infrastructure rather than a campaign-management UI. Novu's open-source posture in particular means a team can self-host the orchestration layer while still calling out to APNs and FCM underneath, which is a meaningfully different trust model from a fully hosted vendor. We have not independently verified current corporate status or security posture for this category to the same depth as the table above, so treat it as a pointer worth researching directly rather than a scored recommendation.

    Methodology.We scored and verified only what a buyer can check directly: named platform coverage, whether a public security or trust page exists, and corporate status (independent, acquired, or public), each checked on August 31, 2026. We explicitly did not score or repeat any vendor's published delivery rate, open rate, opt-in rate, or ROI claim, because no independent, third-party-audited benchmark exists for this category — see the refusal below. A reader can re-verify any row in the table by visiting the named vendor's own trust-center or investor-relations page directly.

    On the refused figures specifically: searching on August 31, 2026, we found three current vendor benchmark reports — Airship, Batch, and Pushwoosh — each publishing a different figure for "the industry average" iOS opt-in rate, drawn from that vendor's own customer base with no disclosed sampling method or denominator. Three numbers that disagree by several points while each claiming to describe the same average is not evidence of a real number with some noise around it — it is evidence that no independently audited number exists. We name the reports so a reader can trace the claim themselves, and we decline to print any of them as fact.

    Reference Architecture and the Order to Build It In

    The order matters more than the individual components, because each step either depends on the one before it or fails invisibly without it.

    StepWhatFailure Mode If SkippedWhy This Order
    1Baseline measurementRead-onlyYou cannot tell whether anything you build later actually improved deliveryYou need an honest before-number: current opt-in rate, current dead-token share, current time-to-registration. No vendor's benchmark substitutes for your own.
    2Token lifecycle plumbingRegistration + storage write; no user-facing send yetNew installs silently accumulate with no way to reach themNothing else works without a correct, deduplicated, prunable token store. Build this before you build a single send path.
    3Transactional sends (OTP, order/status updates, security alerts)Write required; needs delivery-confirmation and a fallback channelUser falls back to the fallback channel (SMS/email) or a manual checkHighest business criticality, lowest volume, and the category where 'best-effort' is least acceptable — this is where the fallback channel earns its cost.
    4Consent-gated marketing and lifecycle campaignsWrite required; audience must be built from consented users onlySuppress the sendThis is the category Apple's guideline 4.5.4 and EU consent law both specifically govern. Get the consent plumbing right before the first campaign, not after.
    5Dead-token pruning as an ongoing jobRead of provider feedback (410 / UNREGISTERED) + a write to pruneToken store keeps growing with dead entries and metrics quietly degradeThis is the job most teams build once and then forget to run. It needs an owner and a schedule, not a one-time script.
    6Silent/background push for data syncWrite required; explicitly best-effort and throttledApp syncs on next foreground open insteadLast, because it is the most fragile and OS-throttled category. Never make silent push the only path that keeps critical data current.
    7Rich and interactive notifications (media attachments, actions, notification service extensions)Write + a service extension on the clientFalls back to plain text notificationPolish layer. Sequence it last because it adds client-side surface area (a notification service extension process) without which the first six rows already work.

    A note on ownership, since this is the part that most often gets left implicit: dead-token pruning, retry/backoff tuning, and trust-store currency (the APNs certificate lesson from earlier) all need a named owner and a recurring cadence, not a one-time build task closed out in a sprint. Push infrastructure that works perfectly at launch degrades quietly over the following twelve months if nobody is assigned to watch it — and by the time delivery metrics visibly drop, the underlying cause (a growing dead-token share, a stale trust store) has usually been accumulating for months.

    Two operational controls belong in the architecture from the start rather than bolted on after the first complaint. Per-device rate limiting caps how many notifications a single device can receive in a rolling window regardless of how many separate features want to send one — without it, a busy day can stack a game invite, a marketing campaign, and a re-engagement nudge into the same five minutes, and the user's first response is to open Settings and disable your app entirely rather than dismiss three notifications. Quiet-hours suppression, timezone-aware per user rather than server-timezone-aware, holds non-critical sends until a reasonable local hour; it should never apply to the transactional category from the table above, where a security alert arriving at 3 a.m. local time is the point, not a bug.

    If you're scoping this work through a formal RFP process rather than a direct engagement, our mobile app RFP template guide covers how to specify token-lifecycle and delivery-reliability requirements precisely enough that competing proposals are actually comparable, rather than all claiming "push notifications included" at wildly different levels of engineering rigor.

    What This Looks Like in Practice

    GameOn, a Frenchy Digital client, is a social sports app connecting players for pickup basketball, soccer, and tennis games, built on React Native with Firebase as its backend. Real-time notifications are a named feature in the delivered product — game invites, player confirmations, and schedule changes — which puts it in the transactional category from the order-of-build table above, not the marketing category.

    That categorization drove real architectural decisions. A pickup-game invite that arrives ten minutes late is close to worthless — the game has either filled or the window has passed — so the acceptable latency budget for that specific notification type is measured in seconds, not the "eventually" that a marketing push can tolerate. Firebase Cloud Messaging was the natural choice specifically because the app needed unified delivery across iOS and Android from a single React Native codebase, and FCM is the transport most cross-platform SDKs already route Android traffic through regardless of vendor choice — building a second, separate Android pipeline would have added engineering surface area with no corresponding benefit.

    We describe only what the public case study documents: GameOn has surpassed 50,000 active users and holds a 4.8-star App Store rating, and real-time notifications for game coordination are listed among its delivered features. We do not have — and the case study does not claim — a specific push delivery rate or open rate for the app, and we are not inventing one here; if you want that number for your own system, the baseline-measurement step in the order-of-build table above is how you get it honestly.

    Red Flags in Vendor Selection

    ClaimReality
    “We guarantee delivery”No push provider can guarantee delivery to a device. OS-level throttling, Low Power Mode, force-quit and Background App Refresh settings all sit outside any vendor's control — this is documented by both Apple and Google, not a limitation any vendor has fixed.
    A quoted industry-average opt-in or open rate with no denominatorThree 2025-2026 vendor benchmark reports (Airship, Batch, Pushwoosh) publish different ‘industry average’ iOS opt-in rates from their own customer bases, with no shared methodology. Ask for the denominator and the sampling method before you repeat any of these numbers internally.
    “HIPAA-compliant push notifications” as a software propertyHIPAA obligations attach to covered entities and business associates under a signed BAA, not to software in the abstract. Separately, lock-screen previews are a well-known PHI leak vector regardless of vendor — content in a push payload can appear on a locked device.
    No named answer on dead-token handlingIf a vendor's own documentation never mentions pruning tokens from APNs feedback or FCM's UNREGISTERED response, that is a sign they have not operated a token store at fleet scale. Ask directly how stale tokens are detected and removed.
    “Real-time” silent push marketed as guaranteed background syncApple's own documentation describes silent push as an opportunity, not a guarantee, and states the system throttles it dynamically based on battery, network and usage. Never architect a system where silent push is the only path that keeps critical data current.
    Certificate-based APNs called ‘insecure’ or ‘broken’It still functions over HTTP/2 today. It is legacy and worth migrating off of, but calling it broken overstates the case and can lead a team to skip due diligence on the token-based migration itself.
    No answer on retry and backoff behaviourAsk specifically what happens when APNs or FCM returns a transient error (a 5xx from APNs, or FCM's UNAVAILABLE): silent drop, immediate retry, or exponential backoff with a dead-letter path. Vendors that cannot answer this precisely have not load-tested their own failure paths.

    What This Costs, and Its Limits

    EngagementRangeTimelineTypical Scope
    Discovery + infrastructure audit$9k–$22k2–4 weeksToken lifecycle review, delivery and dead-token baseline, consent posture audit, platform migration risk check (certificate roots, legacy API references)
    Single-platform push infrastructure build$28k–$70k4–9 weeksOne properly engineered send pipeline covering iOS and Android: token lifecycle, retry and dead-letter handling, delivery confirmation, monitoring
    Multi-platform orchestration with segmentation and analytics$70k–$180k9–16 weeksCross-channel orchestration (push, email, SMS), consent-gated audience segmentation, A/B testing infrastructure, vendor migration if applicable
    Enterprise / regulated build (audit logging, CMP integration, compliance posture)$180k–$420k+14–24 weeksConsent-management-platform integration, full audit logging, documented compliance posture, multi-region delivery, penetration-test support

    One scoping note specific to this domain: the discovery phase for push infrastructure work should always include a migration-risk check for two specific artifacts — any code path still referencing FCM's legacy fcm.googleapis.com/fcm/send endpoint (dead since June 20, 2024) and any server trust store that has not been confirmed current against the certificate authority Apple rolled out in early 2025. Both are quick to check and expensive to discover in production instead.

    Limitations: what we could not verify.We were unable to directly fetch Firebase's own current documentation pages or the European Data Protection Board's full Guidelines 2/2023 PDF due to network restrictions in our research tooling; both facts as stated here are corroborated by multiple independent secondary sources, but a team making a compliance decision or a technical migration decision on either point should confirm directly against the live primary source first. Vendor security and compliance claims in the table above reflect public trust-center and investor-relations pages as of August 31, 2026, and can change without notice — verify current certifications directly with any vendor before a regulated engagement. We did not independently load-test any vendor's claimed delivery throughput or uptime SLA. And as stated throughout, we deliberately did not attempt to state a real-world push open rate, opt-in rate, or delivery percentage as fact, because no independently audited figure exists for this category as of the date we checked.

    For web-based delivery specifically — if part of your product is a progressive web app rather than a native install — the Web Push API sits on a related but distinct standard from APNs and FCM's native SDKs, with its own permission model and browser-specific quirks; that comparison is out of scope for this guide but worth reading separately before assuming native push patterns transfer directly to the browser.

    Get Your Push Pipeline Audited in One Call

    Book a free 60-minute discovery call with Frenchy Digital, a senior-led Black-owned Los Angeles agency. We baseline your token lifecycle and delivery pipeline and send a written, fixed-price phased proposal within 5 business days.

    1517 S Bentley Ave Unit 204, Los Angeles CA 90025

    Frequently Asked Questions

    Sources & References

    1. 1Apple Developer News — APNs Server Certificate Authority Update (announced October 17, 2024)
    2. 2Apple Developer Documentation — Establishing a Token-Based Connection to APNs
    3. 3Apple Developer Documentation — Pushing Background Updates to Your App
    4. 4Apple App Store Review Guidelines — Section 4.5.4, Push Notifications
    5. 5Apple Developer Documentation — UNNotificationInterruptionLevel
    6. 6Android Developers — Notification Runtime Permission (API 33+)
    7. 7Android Open Source Project — Permission for Opt-In Notifications
    8. 8Android Developers — Create and Manage Notification Channels
    9. 9GitHub — appleboy/go-fcm Issue #38, quoting Google's FCM legacy API deprecation and removal dates
    10. 10Google Groups (Firebase) — Update Your Apps to the Latest Firebase Cloud Messaging APIs and SDKs
    11. 11AWS Documentation — Creating an Amazon SNS Platform Application for Mobile Push
    12. 12CNIL — Mobile Applications: CNIL Publishes Its Recommendations for Better Privacy Protection
    13. 13CNIL — Recommandation relative aux applications mobiles (Deliberation No. 2024-061, July 18, 2024)
    14. 14EDPB — Guidelines 2/2023 on the Technical Scope of Article 5(3) of the ePrivacy Directive
    15. 15California DOJ — Attorney General Bonta Secures $1.4 Million Settlement With Mobile App Gaming Company (Jam City, CCPA)
    16. 16FTC — FTC to Ramp Up Enforcement Against Illegal Dark Patterns
    17. 17Braze Investor Relations — Braze Reports Fiscal Year and Fourth Quarter 2026 Results
    18. 18DTCP Capital — Iterable Closes $200 Million in Growth Funding at $2 Billion Valuation
    19. 19PR Newswire — OneSignal Raises $50 Million in Series C Funding
    20. 20Airship — Company and Investor Overview (August Capital, Verizon Ventures)
    Chris Machetto - CEO & Founder of Frenchy Digital

    Chris Machetto

    CEO & Founder of Frenchy Digital, a senior-led Black-owned Los Angeles agency building custom mobile apps and the infrastructure behind them.