[ Web Proxy ]
URL:
Viewing: https://firebase.google.com/docs/cloud-messaging/fcm-architecture [Back]  [Original]

FCM Architectural Overview  |  Firebase Cloud Messaging Skip to main content
Overview Fundamentals AI Build Run Reference Samples
Firebase [Firebase]
Send feedback

FCM Architectural Overview Stay organized with collections Save and categorize content based on your preferences.

FCM relies on the following set of components that build, transport, and receive messages:

  1. Tooling to compose or build message requests. The Notifications composer provides a GUI-based option for creating notification requests. For full automation and support for all message types, you must build message requests in a trusted server environment that supports the Firebase Admin SDK or the FCM server protocol. This environment could be Cloud Functions for Firebase, App Engine, or your own app server.

    A diagram of the three architecture layers described in this page. [A diagram of the three architecture layers described in this page.]

  2. The FCM backend, which (among other functions) accepts message requests, performs fanout of messages via topics, and generates message metadata such as the message ID.

  3. A platform-level transport layer, which routes the message to the targeted device, handles message delivery, and applies platform-specific configuration where appropriate. This transport layer includes:

    • Android transport layer (ATL) for Android devices with Google Play services
    • Apple Push Notification service (APNs) for Apple devices
    • Web push protocol for web apps

      Note: Platform-level transport layers are outside the core FCM product. FCM messages routed to a platform-level transport layer may be subject to terms specific to that platform rather than FCMs terms of service. Android message routing via ATL falls under the Google APIs terms of service.
  4. The FCM SDK on the users device, where the notification is displayed or the message is handled according to the apps foreground/background state and any relevant application logic.

Lifecycle flow

Send feedback

Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 4.0 License, and code samples are licensed under the Apache 2.0 License. For details, see the Google Developers Site Policies. Java is a registered trademark of Oracle and/or its affiliates.

Last updated 2026-08-19 UTC.

Need to tell us more? [[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Missing the information I need","missingTheInformationINeed","thumb-down"],["Too complicated / too many steps","tooComplicatedTooManySteps","thumb-down"],["Out of date","outOfDate","thumb-down"],["Samples / code issue","samplesCodeIssue","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2026-08-19 UTC."],[],[]]

Web Proxy Viewer  |  New URL  |  Original Page