CINXE.COM

Authorize send requests  |  Firebase Cloud Messaging

<!doctype html> <html lang="en" dir="ltr"> <head> <meta name="google-signin-client-id" content="721724668570-nbkv1cfusk7kk4eni4pjvepaus73b13t.apps.googleusercontent.com"> <meta name="google-signin-scope" content="profile email https://www.googleapis.com/auth/developerprofiles https://www.googleapis.com/auth/developerprofiles.award"> <meta property="og:site_name" content="Firebase"> <meta property="og:type" content="website"><meta name="theme-color" content="#a8c7fa"><meta charset="utf-8"> <meta content="IE=Edge" http-equiv="X-UA-Compatible"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="manifest" href="/_pwa/firebase/manifest.json" crossorigin="use-credentials"> <link rel="preconnect" href="//www.gstatic.com" crossorigin> <link rel="preconnect" href="//fonts.gstatic.com" crossorigin> <link rel="preconnect" href="//fonts.googleapis.com" crossorigin> <link rel="preconnect" href="//apis.google.com" crossorigin> <link rel="preconnect" href="//www.google-analytics.com" crossorigin><link rel="stylesheet" href="//fonts.googleapis.com/css?family=Google+Sans:400,500|Roboto:400,400italic,500,500italic,700,700italic|Roboto+Mono:400,500,700&display=swap"> <link rel="stylesheet" href="//fonts.googleapis.com/css2?family=Material+Icons&family=Material+Symbols+Outlined&display=block"><link rel="stylesheet" href="https://www.gstatic.com/devrel-devsite/prod/v38a693baeb774512feb42f10aac8f755d8791ed41119b5be7a531f8e16f8279f/firebase/css/app.css"> <link rel="stylesheet" href="https://www.gstatic.com/devrel-devsite/prod/v38a693baeb774512feb42f10aac8f755d8791ed41119b5be7a531f8e16f8279f/firebase/css/dark-theme.css" disabled> <link rel="shortcut icon" href="https://www.gstatic.com/devrel-devsite/prod/v38a693baeb774512feb42f10aac8f755d8791ed41119b5be7a531f8e16f8279f/firebase/images/favicon.png"> <link rel="apple-touch-icon" href="https://www.gstatic.com/devrel-devsite/prod/v38a693baeb774512feb42f10aac8f755d8791ed41119b5be7a531f8e16f8279f/firebase/images/touchicon-180.png"><link rel="canonical" href="https://firebase.google.com/docs/cloud-messaging/auth-server"><link rel="search" type="application/opensearchdescription+xml" title="Firebase" href="https://firebase.google.com/s/opensearch.xml"> <link rel="alternate" hreflang="en" href="https://firebase.google.com/docs/cloud-messaging/auth-server" /><link rel="alternate" hreflang="x-default" href="https://firebase.google.com/docs/cloud-messaging/auth-server" /><link rel="alternate" hreflang="ar" href="https://firebase.google.com/docs/cloud-messaging/auth-server?hl=ar" /><link rel="alternate" hreflang="bn" href="https://firebase.google.com/docs/cloud-messaging/auth-server?hl=bn" /><link rel="alternate" hreflang="zh-Hans" href="https://firebase.google.com/docs/cloud-messaging/auth-server?hl=zh-cn" /><link rel="alternate" hreflang="zh-Hant" href="https://firebase.google.com/docs/cloud-messaging/auth-server?hl=zh-tw" /><link rel="alternate" hreflang="fa" href="https://firebase.google.com/docs/cloud-messaging/auth-server?hl=fa" /><link rel="alternate" hreflang="fr" href="https://firebase.google.com/docs/cloud-messaging/auth-server?hl=fr" /><link rel="alternate" hreflang="de" href="https://firebase.google.com/docs/cloud-messaging/auth-server?hl=de" /><link rel="alternate" hreflang="he" href="https://firebase.google.com/docs/cloud-messaging/auth-server?hl=he" /><link rel="alternate" hreflang="hi" href="https://firebase.google.com/docs/cloud-messaging/auth-server?hl=hi" /><link rel="alternate" hreflang="id" href="https://firebase.google.com/docs/cloud-messaging/auth-server?hl=id" /><link rel="alternate" hreflang="it" href="https://firebase.google.com/docs/cloud-messaging/auth-server?hl=it" /><link rel="alternate" hreflang="ja" href="https://firebase.google.com/docs/cloud-messaging/auth-server?hl=ja" /><link rel="alternate" hreflang="ko" href="https://firebase.google.com/docs/cloud-messaging/auth-server?hl=ko" /><link rel="alternate" hreflang="pl" href="https://firebase.google.com/docs/cloud-messaging/auth-server?hl=pl" /><link rel="alternate" hreflang="pt-BR" href="https://firebase.google.com/docs/cloud-messaging/auth-server?hl=pt-br" /><link rel="alternate" hreflang="ru" href="https://firebase.google.com/docs/cloud-messaging/auth-server?hl=ru" /><link rel="alternate" hreflang="es-419" href="https://firebase.google.com/docs/cloud-messaging/auth-server?hl=es-419" /><link rel="alternate" hreflang="th" href="https://firebase.google.com/docs/cloud-messaging/auth-server?hl=th" /><link rel="alternate" hreflang="tr" href="https://firebase.google.com/docs/cloud-messaging/auth-server?hl=tr" /><link rel="alternate" hreflang="vi" href="https://firebase.google.com/docs/cloud-messaging/auth-server?hl=vi" /><title>Authorize send requests &nbsp;|&nbsp; Firebase Cloud Messaging</title> <meta property="og:title" content="Authorize send requests &nbsp;|&nbsp; Firebase Cloud Messaging"><meta property="og:url" content="https://firebase.google.com/docs/cloud-messaging/auth-server"><meta property="og:locale" content="en"><script type="application/ld+json"> { "@context": "https://schema.org", "@type": "BreadcrumbList", "itemListElement": [{ "@type": "ListItem", "position": 1, "name": "Documentation", "item": "https://firebase.google.com/docs" },{ "@type": "ListItem", "position": 2, "name": "FCM", "item": "https://firebase.google.com/docs/cloud-messaging" },{ "@type": "ListItem", "position": 3, "name": "Authorize send requests", "item": "https://firebase.google.com/docs/cloud-messaging/auth-server" }] } </script> <link rel="stylesheet" href="/extras.css"></head> <body class="" template="page" theme="firebase-icy-theme" type="guide" appearance layout="docs" concierge='closed' display-toc pending> <devsite-progress type="indeterminate" id="app-progress"></devsite-progress> <a href="#main-content" class="skip-link button"> Skip to main content </a> <section class="devsite-wrapper"> <devsite-cookie-notification-bar></devsite-cookie-notification-bar><devsite-header role="banner" keep-tabs-visible> <div class="devsite-header--inner nocontent"> <div class="devsite-top-logo-row-wrapper-wrapper"> <div class="devsite-top-logo-row-wrapper"> <div class="devsite-top-logo-row"> <button type="button" id="devsite-hamburger-menu" class="devsite-header-icon-button button-flat material-icons gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Navigation menu button" visually-hidden aria-label="Open menu"> </button> <div class="devsite-product-name-wrapper"> <a href="/" class="devsite-site-logo-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Site logo" track-type="globalNav" track-name="firebase" track-metadata-position="nav" track-metadata-eventDetail="nav"> <picture> <source srcset="https://www.gstatic.com/devrel-devsite/prod/v38a693baeb774512feb42f10aac8f755d8791ed41119b5be7a531f8e16f8279f/firebase/images/lockup.svg" media="(prefers-color-scheme: dark)" class="devsite-dark-theme" alt="Firebase"> <img src="https://www.gstatic.com/devrel-devsite/prod/v38a693baeb774512feb42f10aac8f755d8791ed41119b5be7a531f8e16f8279f/firebase/images/lockup.svg" class="devsite-site-logo" alt="Firebase"> </picture> </a> <span class="devsite-product-name"> <ul class="devsite-breadcrumb-list" > <li class="devsite-breadcrumb-item "> </li> </ul> </span> </div> <div class="devsite-top-logo-row-middle"> <div class="devsite-header-upper-tabs"> <devsite-tabs class="upper-tabs"> <nav class="devsite-tabs-wrapper" aria-label="Upper tabs"> <tab class="devsite-dropdown "> <a href="https://firebase.google.com/products-build" class="devsite-tabs-content gc-analytics-event " track-metadata-eventdetail="https://firebase.google.com/products-build" track-type="nav" track-metadata-position="nav - build" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Build" track-name="build" > Build </a> <button aria-haspopup="menu" aria-expanded="false" aria-label="Dropdown menu for Build" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/products-build" track-metadata-position="nav - build" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Build" track-name="build" class="devsite-tabs-dropdown-toggle devsite-icon devsite-icon-arrow-drop-down"></button> <div class="devsite-tabs-dropdown" role="menu" aria-label="submenu" hidden> <div class="devsite-tabs-dropdown-content"> <div class="devsite-tabs-dropdown-column firebase-dropdown firebase-dropdown--primary firebase-build"> <ul class="devsite-tabs-dropdown-section "> <li class="devsite-nav-title" role="heading" tooltip>Build</li> <li class="devsite-nav-description">Get to market quickly and securely with products that can scale globally </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/products-build" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/products-build" track-metadata-position="nav - build" track-metadata-module="tertiary nav" track-metadata-module_headline="build" tooltip > <div class="devsite-nav-item-title"> Go to Build </div> </a> </li> </ul> </div> <div class="devsite-tabs-dropdown-column firebase-dropdown firebase-dropdown--secondary firebase-build"> <ul class="devsite-tabs-dropdown-section "> <li class="devsite-nav-title" role="heading" tooltip>Build Products</li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/products/app-check" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/products/app-check" track-metadata-position="nav - build" track-metadata-module="tertiary nav" track-metadata-module_headline="build products" tooltip > <div class="devsite-nav-item-title"> App Check </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/products/app-hosting" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/products/app-hosting" track-metadata-position="nav - build" track-metadata-module="tertiary nav" track-metadata-module_headline="build products" tooltip > <div class="devsite-nav-item-title"> App Hosting </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/products/auth" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/products/auth" track-metadata-position="nav - build" track-metadata-module="tertiary nav" track-metadata-module_headline="build products" tooltip > <div class="devsite-nav-item-title"> Authentication </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/products/functions" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/products/functions" track-metadata-position="nav - build" track-metadata-module="tertiary nav" track-metadata-module_headline="build products" tooltip > <div class="devsite-nav-item-title"> Cloud Functions </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/products/storage" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/products/storage" track-metadata-position="nav - build" track-metadata-module="tertiary nav" track-metadata-module_headline="build products" tooltip > <div class="devsite-nav-item-title"> Cloud Storage </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/products/data-connect" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/products/data-connect" track-metadata-position="nav - build" track-metadata-module="tertiary nav" track-metadata-module_headline="build products" tooltip > <div class="devsite-nav-item-title"> Data Connect </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/products/extensions" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/products/extensions" track-metadata-position="nav - build" track-metadata-module="tertiary nav" track-metadata-module_headline="build products" tooltip > <div class="devsite-nav-item-title"> Extensions </div> </a> </li> </ul> <ul class="devsite-tabs-dropdown-section "> <li class="devsite-nav-item"> <a href="https://firebase.google.com/products/ml" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/products/ml" track-metadata-position="nav - build" track-metadata-module="tertiary nav" track-metadata-module_headline="build products" tooltip > <div class="devsite-nav-item-title"> Firebase ML </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/products/firestore" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/products/firestore" track-metadata-position="nav - build" track-metadata-module="tertiary nav" track-metadata-module_headline="build products" tooltip > <div class="devsite-nav-item-title"> Firestore </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/products/genkit" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/products/genkit" track-metadata-position="nav - build" track-metadata-module="tertiary nav" track-metadata-module_headline="build products" tooltip > <div class="devsite-nav-item-title"> Genkit </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/products/hosting" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/products/hosting" track-metadata-position="nav - build" track-metadata-module="tertiary nav" track-metadata-module_headline="build products" tooltip > <div class="devsite-nav-item-title"> Hosting </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/products/realtime-database" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/products/realtime-database" track-metadata-position="nav - build" track-metadata-module="tertiary nav" track-metadata-module_headline="build products" tooltip > <div class="devsite-nav-item-title"> Realtime Database </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/products/vertex-ai-in-firebase" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/products/vertex-ai-in-firebase" track-metadata-position="nav - build" track-metadata-module="tertiary nav" track-metadata-module_headline="build products" tooltip > <div class="devsite-nav-item-title"> Vertex AI in Firebase </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/products/generative-ai" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/products/generative-ai" track-metadata-position="nav - build" track-metadata-module="tertiary nav" track-metadata-module_headline="build products" tooltip > <div class="devsite-nav-item-title"> Generative AI </div> </a> </li> </ul> </div> </div> </div> </tab> <tab class="devsite-dropdown "> <a href="https://firebase.google.com/products-run" class="devsite-tabs-content gc-analytics-event " track-metadata-eventdetail="https://firebase.google.com/products-run" track-type="nav" track-metadata-position="nav - run" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Run" track-name="run" > Run </a> <button aria-haspopup="menu" aria-expanded="false" aria-label="Dropdown menu for Run" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/products-run" track-metadata-position="nav - run" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Run" track-name="run" class="devsite-tabs-dropdown-toggle devsite-icon devsite-icon-arrow-drop-down"></button> <div class="devsite-tabs-dropdown" role="menu" aria-label="submenu" hidden> <div class="devsite-tabs-dropdown-content"> <div class="devsite-tabs-dropdown-column firebase-dropdown firebase-dropdown--primary firebase-run"> <ul class="devsite-tabs-dropdown-section "> <li class="devsite-nav-title" role="heading" tooltip>Run</li> <li class="devsite-nav-description">Run your app with confidence and deliver the best experience for your users </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/products-run" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/products-run" track-metadata-position="nav - run" track-metadata-module="tertiary nav" track-metadata-module_headline="run" tooltip > <div class="devsite-nav-item-title"> Go to Run </div> </a> </li> </ul> </div> <div class="devsite-tabs-dropdown-column firebase-dropdown firebase-dropdown--secondary"> <ul class="devsite-tabs-dropdown-section "> <li class="devsite-nav-title" role="heading" tooltip>Run Products</li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/products/ab-testing" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/products/ab-testing" track-metadata-position="nav - run" track-metadata-module="tertiary nav" track-metadata-module_headline="run products" tooltip > <div class="devsite-nav-item-title"> A/B Testing </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/products/app-distribution" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/products/app-distribution" track-metadata-position="nav - run" track-metadata-module="tertiary nav" track-metadata-module_headline="run products" tooltip > <div class="devsite-nav-item-title"> App Distribution </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/products/cloud-messaging" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/products/cloud-messaging" track-metadata-position="nav - run" track-metadata-module="tertiary nav" track-metadata-module_headline="run products" tooltip > <div class="devsite-nav-item-title"> Cloud Messaging </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/products/crashlytics" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/products/crashlytics" track-metadata-position="nav - run" track-metadata-module="tertiary nav" track-metadata-module_headline="run products" tooltip > <div class="devsite-nav-item-title"> Crashlytics </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/products/analytics" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/products/analytics" track-metadata-position="nav - run" track-metadata-module="tertiary nav" track-metadata-module_headline="run products" tooltip > <div class="devsite-nav-item-title"> Google Analytics </div> </a> </li> </ul> <ul class="devsite-tabs-dropdown-section "> <li class="devsite-nav-item"> <a href="https://firebase.google.com/products/in-app-messaging" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/products/in-app-messaging" track-metadata-position="nav - run" track-metadata-module="tertiary nav" track-metadata-module_headline="run products" tooltip > <div class="devsite-nav-item-title"> In-App Messaging </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/products/performance" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/products/performance" track-metadata-position="nav - run" track-metadata-module="tertiary nav" track-metadata-module_headline="run products" tooltip > <div class="devsite-nav-item-title"> Performance Monitoring </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/products/remote-config" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/products/remote-config" track-metadata-position="nav - run" track-metadata-module="tertiary nav" track-metadata-module_headline="run products" tooltip > <div class="devsite-nav-item-title"> Remote Config </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/products/test-lab" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/products/test-lab" track-metadata-position="nav - run" track-metadata-module="tertiary nav" track-metadata-module_headline="run products" tooltip > <div class="devsite-nav-item-title"> Test Lab </div> </a> </li> </ul> </div> </div> </div> </tab> <tab > <a href="https://firebase.google.com/solutions" class="devsite-tabs-content gc-analytics-event " track-metadata-eventdetail="https://firebase.google.com/solutions" track-type="nav" track-metadata-position="nav - solutions" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Solutions" track-name="solutions" > Solutions </a> </tab> <tab > <a href="https://firebase.google.com/pricing" class="devsite-tabs-content gc-analytics-event " track-metadata-eventdetail="https://firebase.google.com/pricing" track-type="nav" track-metadata-position="nav - pricing" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Pricing" track-name="pricing" > Pricing </a> </tab> <tab class="devsite-dropdown devsite-active "> <a href="https://firebase.google.com/docs" class="devsite-tabs-content gc-analytics-event " track-metadata-eventdetail="https://firebase.google.com/docs" track-type="nav" track-metadata-position="nav - docs" track-metadata-module="primary nav" aria-label="Docs, selected" data-category="Site-Wide Custom Events" data-label="Tab: Docs" track-name="docs" > Docs </a> <button aria-haspopup="menu" aria-expanded="false" aria-label="Dropdown menu for Docs" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs" track-metadata-position="nav - docs" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Docs" track-name="docs" class="devsite-tabs-dropdown-toggle devsite-icon devsite-icon-arrow-drop-down"></button> <div class="devsite-tabs-dropdown" role="menu" aria-label="submenu" hidden> <div class="devsite-tabs-dropdown-content"> <div class="devsite-tabs-dropdown-column "> <ul class="devsite-tabs-dropdown-section "> <li class="devsite-nav-item"> <a href="https://firebase.google.com/docs" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs" track-metadata-position="nav - docs" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Overview </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/docs/guides" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/guides" track-metadata-position="nav - docs" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Fundamentals </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/docs/build" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/build" track-metadata-position="nav - docs" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Build </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/docs/run" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/run" track-metadata-position="nav - docs" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Run </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/docs/reference" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/reference" track-metadata-position="nav - docs" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Reference </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/docs/samples" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/samples" track-metadata-position="nav - docs" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Samples </div> </a> </li> </ul> </div> </div> </div> </tab> <tab class="devsite-dropdown "> <a href="https://firebase.google.com/community" class="devsite-tabs-content gc-analytics-event " track-metadata-eventdetail="https://firebase.google.com/community" track-type="nav" track-metadata-position="nav - community" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Community" track-name="community" > Community </a> <button aria-haspopup="menu" aria-expanded="false" aria-label="Dropdown menu for Community" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/community" track-metadata-position="nav - community" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Community" track-name="community" class="devsite-tabs-dropdown-toggle devsite-icon devsite-icon-arrow-drop-down"></button> <div class="devsite-tabs-dropdown" role="menu" aria-label="submenu" hidden> <div class="devsite-tabs-dropdown-content"> <div class="devsite-tabs-dropdown-column "> <ul class="devsite-tabs-dropdown-section "> <li class="devsite-nav-item"> <a href="https://firebase.google.com/community/learn" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/community/learn" track-metadata-position="nav - community" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Learn </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/community/events" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/community/events" track-metadata-position="nav - community" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Events </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/community/stories" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/community/stories" track-metadata-position="nav - community" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Stories </div> </a> </li> </ul> </div> </div> </div> </tab> <tab > <a href="https://firebase.google.com/support" class="devsite-tabs-content gc-analytics-event " track-metadata-eventdetail="https://firebase.google.com/support" track-type="nav" track-metadata-position="nav - support" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Support" track-name="support" > Support </a> </tab> </nav> </devsite-tabs> </div> <devsite-search enable-signin enable-search enable-suggestions enable-query-completion project-name="Firebase Cloud Messaging" tenant-name="Firebase" > <form class="devsite-search-form" action="https://firebase.google.com/s/results" method="GET"> <div class="devsite-search-container"> <button type="button" search-open class="devsite-search-button devsite-header-icon-button button-flat material-icons" aria-label="Open search"></button> <div class="devsite-searchbox"> <input aria-activedescendant="" aria-autocomplete="list" aria-label="Search" aria-expanded="false" aria-haspopup="listbox" autocomplete="off" class="devsite-search-field devsite-search-query" name="q" placeholder="Search" role="combobox" type="text" value="" > <div class="devsite-search-image material-icons" aria-hidden="true"> </div> <div class="devsite-search-shortcut-icon-container" aria-hidden="true"> <kbd class="devsite-search-shortcut-icon">/</kbd> </div> </div> </div> </form> <button type="button" search-close class="devsite-search-button devsite-header-icon-button button-flat material-icons" aria-label="Close search"></button> </devsite-search> </div> <devsite-appearance-selector></devsite-appearance-selector> <devsite-language-selector> <ul role="presentation"> <li role="presentation"> <a role="menuitem" lang="en" >English</a> </li> <li role="presentation"> <a role="menuitem" lang="de" >Deutsch</a> </li> <li role="presentation"> <a role="menuitem" lang="es_419" >Español – América Latina</a> </li> <li role="presentation"> <a role="menuitem" lang="fr" >Français</a> </li> <li role="presentation"> <a role="menuitem" lang="id" >Indonesia</a> </li> <li role="presentation"> <a role="menuitem" lang="it" >Italiano</a> </li> <li role="presentation"> <a role="menuitem" lang="pl" >Polski</a> </li> <li role="presentation"> <a role="menuitem" lang="pt_br" >Português – Brasil</a> </li> <li role="presentation"> <a role="menuitem" lang="vi" >Tiếng Việt</a> </li> <li role="presentation"> <a role="menuitem" lang="tr" >Türkçe</a> </li> <li role="presentation"> <a role="menuitem" lang="ru" >Русский</a> </li> <li role="presentation"> <a role="menuitem" lang="he" >עברית</a> </li> <li role="presentation"> <a role="menuitem" lang="ar" >العربيّة</a> </li> <li role="presentation"> <a role="menuitem" lang="fa" >فارسی</a> </li> <li role="presentation"> <a role="menuitem" lang="hi" >हिंदी</a> </li> <li role="presentation"> <a role="menuitem" lang="bn" >বাংলা</a> </li> <li role="presentation"> <a role="menuitem" lang="th" >ภาษาไทย</a> </li> <li role="presentation"> <a role="menuitem" lang="zh_cn" >中文 – 简体</a> </li> <li role="presentation"> <a role="menuitem" lang="zh_tw" >中文 – 繁體</a> </li> <li role="presentation"> <a role="menuitem" lang="ja" >日本語</a> </li> <li role="presentation"> <a role="menuitem" lang="ko" >한국어</a> </li> </ul> </devsite-language-selector> <a class="devsite-header-link devsite-top-button button gc-analytics-event" href="//console.firebase.google.com" data-category="Site-Wide Custom Events" data-label="Site header link" > Go to console </a> <devsite-user enable-profiles fp-auth id="devsite-user"> <span class="button devsite-top-button" aria-hidden="true" visually-hidden>Sign in</span> </devsite-user> </div> </div> </div> <div class="devsite-collapsible-section "> <div class="devsite-header-background"> <div class="devsite-product-id-row" > <div class="devsite-product-description-row"> <ul class="devsite-breadcrumb-list" aria-label="Lower header breadcrumb"> <li class="devsite-breadcrumb-item "> <a href="https://firebase.google.com/docs" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Lower Header" data-value="1" track-type="globalNav" track-name="breadcrumb" track-metadata-position="1" track-metadata-eventdetail="Firebase Documentation" > Documentation </a> </li> <li class="devsite-breadcrumb-item "> <div class="devsite-breadcrumb-guillemet material-icons" aria-hidden="true"></div> <a href="https://firebase.google.com/docs/cloud-messaging" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Lower Header" data-value="2" track-type="globalNav" track-name="breadcrumb" track-metadata-position="2" track-metadata-eventdetail="Firebase Cloud Messaging" > FCM </a> </li> </ul> </div> </div> <div class="devsite-doc-set-nav-row"> <devsite-tabs class="lower-tabs"> <nav class="devsite-tabs-wrapper" aria-label="Lower tabs"> <tab > <a href="https://firebase.google.com/docs" class="devsite-tabs-content gc-analytics-event " track-metadata-eventdetail="https://firebase.google.com/docs" track-type="nav" track-metadata-position="nav - overview" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Overview" track-name="overview" > Overview </a> </tab> <tab class="devsite-dropdown "> <a href="https://firebase.google.com/docs/guides" class="devsite-tabs-content gc-analytics-event " track-metadata-eventdetail="https://firebase.google.com/docs/guides" track-type="nav" track-metadata-position="nav - fundamentals" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Fundamentals" track-name="fundamentals" > Fundamentals </a> <button aria-haspopup="menu" aria-expanded="false" aria-label="Dropdown menu for Fundamentals" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/guides" track-metadata-position="nav - fundamentals" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Fundamentals" track-name="fundamentals" class="devsite-tabs-dropdown-toggle devsite-icon devsite-icon-arrow-drop-down"></button> <div class="devsite-tabs-dropdown" role="menu" aria-label="submenu" hidden> <div class="devsite-tabs-dropdown-content"> <div class="devsite-tabs-dropdown-column "> <ul class="devsite-tabs-dropdown-section "> <li class="devsite-nav-item"> <a href="https://firebase.google.com/docs/ios/setup" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/ios/setup" track-metadata-position="nav - fundamentals" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Add Firebase - Apple platforms (iOS+) </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/docs/android/setup" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/android/setup" track-metadata-position="nav - fundamentals" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Add Firebase - Android </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/docs/web/setup" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/web/setup" track-metadata-position="nav - fundamentals" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Add Firebase - Web </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/docs/flutter/setup" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/flutter/setup" track-metadata-position="nav - fundamentals" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Add Firebase - Flutter </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/docs/cpp/setup" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/cpp/setup" track-metadata-position="nav - fundamentals" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Add Firebase - C++ </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/docs/unity/setup" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/unity/setup" track-metadata-position="nav - fundamentals" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Add Firebase - Unity </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/docs/admin/setup" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/admin/setup" track-metadata-position="nav - fundamentals" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Add Firebase - Server environments </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/docs/projects/learn-more" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/projects/learn-more" track-metadata-position="nav - fundamentals" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Manage Firebase projects </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/docs/libraries" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/libraries" track-metadata-position="nav - fundamentals" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Supported platforms & frameworks </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/docs/emulator-suite" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/emulator-suite" track-metadata-position="nav - fundamentals" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Use Emulator Suite </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/docs/gemini-in-firebase" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/gemini-in-firebase" track-metadata-position="nav - fundamentals" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> AI assistance with Gemini in Firebase </div> </a> </li> </ul> </div> </div> </div> </tab> <tab class="devsite-dropdown "> <a href="https://firebase.google.com/docs/build" class="devsite-tabs-content gc-analytics-event " track-metadata-eventdetail="https://firebase.google.com/docs/build" track-type="nav" track-metadata-position="nav - build" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Build" track-name="build" > Build </a> <button aria-haspopup="menu" aria-expanded="false" aria-label="Dropdown menu for Build" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/build" track-metadata-position="nav - build" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Build" track-name="build" class="devsite-tabs-dropdown-toggle devsite-icon devsite-icon-arrow-drop-down"></button> <div class="devsite-tabs-dropdown" role="menu" aria-label="submenu" hidden> <div class="devsite-tabs-dropdown-content"> <div class="devsite-tabs-dropdown-column "> <ul class="devsite-tabs-dropdown-section "> <li class="devsite-nav-item"> <a href="https://firebase.google.com/docs/emulator-suite" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/emulator-suite" track-metadata-position="nav - build" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Emulator Suite </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/docs/auth" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/auth" track-metadata-position="nav - build" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Authentication </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/docs/app-check" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/app-check" track-metadata-position="nav - build" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> App Check </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/docs/data-connect" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/data-connect" track-metadata-position="nav - build" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Data Connect </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/docs/firestore" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/firestore" track-metadata-position="nav - build" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Firestore </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/docs/database" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/database" track-metadata-position="nav - build" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Realtime Database </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/docs/storage" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/storage" track-metadata-position="nav - build" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Storage </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/docs/rules" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/rules" track-metadata-position="nav - build" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Security Rules </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/docs/app-hosting" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/app-hosting" track-metadata-position="nav - build" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> App Hosting </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/docs/hosting" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/hosting" track-metadata-position="nav - build" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Hosting </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/docs/functions" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/functions" track-metadata-position="nav - build" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Cloud Functions </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/docs/extensions" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/extensions" track-metadata-position="nav - build" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Extensions </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/docs/vertex-ai" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/vertex-ai" track-metadata-position="nav - build" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Vertex AI in Firebase </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/docs/genkit" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/genkit" track-metadata-position="nav - build" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Genkit </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/docs/ml" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/ml" track-metadata-position="nav - build" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> ML </div> </a> </li> </ul> </div> </div> </div> </tab> <tab class="devsite-dropdown devsite-active "> <a href="https://firebase.google.com/docs/run" class="devsite-tabs-content gc-analytics-event " track-metadata-eventdetail="https://firebase.google.com/docs/run" track-type="nav" track-metadata-position="nav - run" track-metadata-module="primary nav" aria-label="Run, selected" data-category="Site-Wide Custom Events" data-label="Tab: Run" track-name="run" > Run </a> <button aria-haspopup="menu" aria-expanded="false" aria-label="Dropdown menu for Run" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/run" track-metadata-position="nav - run" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Run" track-name="run" class="devsite-tabs-dropdown-toggle devsite-icon devsite-icon-arrow-drop-down"></button> <div class="devsite-tabs-dropdown" role="menu" aria-label="submenu" hidden> <div class="devsite-tabs-dropdown-content"> <div class="devsite-tabs-dropdown-column "> <ul class="devsite-tabs-dropdown-section "> <li class="devsite-nav-item"> <a href="https://firebase.google.com/docs/test-lab" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/test-lab" track-metadata-position="nav - run" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Test Lab </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/docs/app-distribution" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/app-distribution" track-metadata-position="nav - run" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> App Distribution </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/docs/crashlytics" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/crashlytics" track-metadata-position="nav - run" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Crashlytics </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/docs/perf-mon" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/perf-mon" track-metadata-position="nav - run" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Performance Monitoring </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/docs/remote-config" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/remote-config" track-metadata-position="nav - run" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Remote Config </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/docs/ab-testing" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/ab-testing" track-metadata-position="nav - run" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> A/B Testing </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/docs/analytics" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/analytics" track-metadata-position="nav - run" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Analytics </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/docs/cloud-messaging" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/cloud-messaging" track-metadata-position="nav - run" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Cloud Messaging </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/docs/in-app-messaging" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/in-app-messaging" track-metadata-position="nav - run" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> In-App Messaging </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/docs/dynamic-links" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/dynamic-links" track-metadata-position="nav - run" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Dynamic Links </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/docs/admob" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/admob" track-metadata-position="nav - run" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Google AdMob </div> </a> </li> <li class="devsite-nav-item"> <a href="https://firebase.google.com/docs/ads" track-type="nav" track-metadata-eventdetail="https://firebase.google.com/docs/ads" track-metadata-position="nav - run" track-metadata-module="tertiary nav" tooltip > <div class="devsite-nav-item-title"> Google Ads </div> </a> </li> </ul> </div> </div> </div> </tab> <tab > <a href="https://firebase.google.com/docs/reference" class="devsite-tabs-content gc-analytics-event " track-metadata-eventdetail="https://firebase.google.com/docs/reference" track-type="nav" track-metadata-position="nav - reference" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Reference" track-name="reference" > Reference </a> </tab> <tab > <a href="https://firebase.google.com/docs/samples" class="devsite-tabs-content gc-analytics-event " track-metadata-eventdetail="https://firebase.google.com/docs/samples" track-type="nav" track-metadata-position="nav - samples" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Samples" track-name="samples" > Samples </a> </tab> </nav> </devsite-tabs> </div> </div> </div> </div> </devsite-header> <devsite-book-nav scrollbars > <div class="devsite-book-nav-filter" > <span class="filter-list-icon material-icons" aria-hidden="true"></span> <input type="text" placeholder="Filter" aria-label="Type to filter" role="searchbox"> <span class="filter-clear-button hidden" data-title="Clear filter" aria-label="Clear filter" role="button" tabindex="0"></span> </div> <nav class="devsite-book-nav devsite-nav nocontent" aria-label="Side menu"> <div class="devsite-mobile-header"> <button type="button" id="devsite-close-nav" class="devsite-header-icon-button button-flat material-icons gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Close navigation" aria-label="Close navigation"> </button> <div class="devsite-product-name-wrapper"> <a href="/" class="devsite-site-logo-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Site logo" track-type="globalNav" track-name="firebase" track-metadata-position="nav" track-metadata-eventDetail="nav"> <picture> <source srcset="https://www.gstatic.com/devrel-devsite/prod/v38a693baeb774512feb42f10aac8f755d8791ed41119b5be7a531f8e16f8279f/firebase/images/lockup.svg" media="(prefers-color-scheme: dark)" class="devsite-dark-theme" alt="Firebase"> <img src="https://www.gstatic.com/devrel-devsite/prod/v38a693baeb774512feb42f10aac8f755d8791ed41119b5be7a531f8e16f8279f/firebase/images/lockup.svg" class="devsite-site-logo" alt="Firebase"> </picture> </a> <span class="devsite-product-name"> <ul class="devsite-breadcrumb-list" > <li class="devsite-breadcrumb-item "> </li> </ul> </span> </div> </div> <div class="devsite-book-nav-wrapper"> <div class="devsite-mobile-nav-top"> <ul class="devsite-nav-list"> <li class="devsite-nav-item"> <a href="/products-build" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Tab: Build" track-name="build" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Build" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Build </span> </a> <ul class="devsite-nav-responsive-tabs devsite-nav-has-menu "> <li class="devsite-nav-item"> <span class="devsite-nav-title" tooltip data-category="Site-Wide Custom Events" data-label="Tab: Build" track-name="build" > <span class="devsite-nav-text" tooltip menu="Build"> More </span> <span class="devsite-nav-icon material-icons" data-icon="forward" menu="Build"> </span> </span> </li> </ul> </li> <li class="devsite-nav-item"> <a href="/products-run" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Tab: Run" track-name="run" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Run" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Run </span> </a> <ul class="devsite-nav-responsive-tabs devsite-nav-has-menu "> <li class="devsite-nav-item"> <span class="devsite-nav-title" tooltip data-category="Site-Wide Custom Events" data-label="Tab: Run" track-name="run" > <span class="devsite-nav-text" tooltip menu="Run"> More </span> <span class="devsite-nav-icon material-icons" data-icon="forward" menu="Run"> </span> </span> </li> </ul> </li> <li class="devsite-nav-item"> <a href="/solutions" class="devsite-nav-title gc-analytics-event devsite-nav-has-children " data-category="Site-Wide Custom Events" data-label="Tab: Solutions" track-name="solutions" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Solutions" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Solutions </span> <span class="devsite-nav-icon material-icons" data-icon="forward" > </span> </a> </li> <li class="devsite-nav-item"> <a href="/pricing" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Tab: Pricing" track-name="pricing" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Pricing" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Pricing </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs" class="devsite-nav-title gc-analytics-event devsite-nav-active" data-category="Site-Wide Custom Events" data-label="Tab: Docs" track-name="docs" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Docs" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Docs </span> </a> <ul class="devsite-nav-responsive-tabs devsite-nav-has-menu "> <li class="devsite-nav-item"> <span class="devsite-nav-title" tooltip data-category="Site-Wide Custom Events" data-label="Tab: Docs" track-name="docs" > <span class="devsite-nav-text" tooltip menu="Docs"> More </span> <span class="devsite-nav-icon material-icons" data-icon="forward" menu="Docs"> </span> </span> </li> </ul> <ul class="devsite-nav-responsive-tabs"> <li class="devsite-nav-item"> <a href="/docs" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Tab: Overview" track-name="overview" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Overview" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Overview </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/guides" class="devsite-nav-title gc-analytics-event devsite-nav-has-children " data-category="Site-Wide Custom Events" data-label="Tab: Fundamentals" track-name="fundamentals" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Fundamentals" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Fundamentals </span> <span class="devsite-nav-icon material-icons" data-icon="forward" > </span> </a> <ul class="devsite-nav-responsive-tabs devsite-nav-has-menu devsite-lower-tab-item"> <li class="devsite-nav-item"> <span class="devsite-nav-title" tooltip data-category="Site-Wide Custom Events" data-label="Tab: Fundamentals" track-name="fundamentals" > <span class="devsite-nav-text" tooltip menu="Fundamentals"> More </span> <span class="devsite-nav-icon material-icons" data-icon="forward" menu="Fundamentals"> </span> </span> </li> </ul> </li> <li class="devsite-nav-item"> <a href="/docs/build" class="devsite-nav-title gc-analytics-event devsite-nav-has-children " data-category="Site-Wide Custom Events" data-label="Tab: Build" track-name="build" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Build" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Build </span> <span class="devsite-nav-icon material-icons" data-icon="forward" > </span> </a> <ul class="devsite-nav-responsive-tabs devsite-nav-has-menu devsite-lower-tab-item"> <li class="devsite-nav-item"> <span class="devsite-nav-title" tooltip data-category="Site-Wide Custom Events" data-label="Tab: Build" track-name="build" > <span class="devsite-nav-text" tooltip menu="Build"> More </span> <span class="devsite-nav-icon material-icons" data-icon="forward" menu="Build"> </span> </span> </li> </ul> </li> <li class="devsite-nav-item"> <a href="/docs/run" class="devsite-nav-title gc-analytics-event devsite-nav-has-children devsite-nav-active" data-category="Site-Wide Custom Events" data-label="Tab: Run" track-name="run" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Run" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip menu="_book"> Run </span> <span class="devsite-nav-icon material-icons" data-icon="forward" menu="_book"> </span> </a> <ul class="devsite-nav-responsive-tabs devsite-nav-has-menu devsite-lower-tab-item"> <li class="devsite-nav-item"> <span class="devsite-nav-title" tooltip data-category="Site-Wide Custom Events" data-label="Tab: Run" track-name="run" > <span class="devsite-nav-text" tooltip menu="Run"> More </span> <span class="devsite-nav-icon material-icons" data-icon="forward" menu="Run"> </span> </span> </li> </ul> </li> <li class="devsite-nav-item"> <a href="/docs/reference" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Tab: Reference" track-name="reference" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Reference" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Reference </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/samples" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Tab: Samples" track-name="samples" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Samples" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Samples </span> </a> </li> </ul> </li> <li class="devsite-nav-item"> <a href="/community" class="devsite-nav-title gc-analytics-event devsite-nav-has-children " data-category="Site-Wide Custom Events" data-label="Tab: Community" track-name="community" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Community" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Community </span> <span class="devsite-nav-icon material-icons" data-icon="forward" > </span> </a> <ul class="devsite-nav-responsive-tabs devsite-nav-has-menu "> <li class="devsite-nav-item"> <span class="devsite-nav-title" tooltip data-category="Site-Wide Custom Events" data-label="Tab: Community" track-name="community" > <span class="devsite-nav-text" tooltip menu="Community"> More </span> <span class="devsite-nav-icon material-icons" data-icon="forward" menu="Community"> </span> </span> </li> </ul> </li> <li class="devsite-nav-item"> <a href="/support" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Tab: Support" track-name="support" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Support" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Support </span> </a> </li> <li class="devsite-nav-item"> <a href="//console.firebase.google.com" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Go to console" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Go to console </span> </a> </li> </ul> </div> <div class="devsite-mobile-nav-bottom"> <ul class="devsite-nav-list" menu="_book"> <li class="devsite-nav-item"><a href="/docs/run" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/run" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/run" ><span class="devsite-nav-text" tooltip>Overview</span></a></li> <li class="devsite-nav-item devsite-nav-divider devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Release</span> </div></li> <li class="devsite-nav-item devsite-nav-expandable devsite-nav-accordion"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Test Lab</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/test-lab" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/test-lab" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/test-lab" ><span class="devsite-nav-text" tooltip>Introduction</span></a></li><li class="devsite-nav-item"><a href="/docs/test-lab/flutter/integration-testing-with-flutter" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/test-lab/flutter/integration-testing-with-flutter" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/test-lab/flutter/integration-testing-with-flutter" ><span class="devsite-nav-text" tooltip>Integration testing with Flutter</span></a></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>iOS+</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/test-lab/ios/get-started" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/test-lab/ios/get-started" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/test-lab/ios/get-started" ><span class="devsite-nav-text" tooltip>Get started</span></a></li><li class="devsite-nav-item"><a href="/docs/test-lab/ios/robo-ux-test" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/test-lab/ios/robo-ux-test" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/test-lab/ios/robo-ux-test" ><span class="devsite-nav-text" tooltip>Run a Robo test</span></a></li><li class="devsite-nav-item"><a href="/docs/test-lab/ios/run-robo-scripts" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/test-lab/ios/run-robo-scripts" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/test-lab/ios/run-robo-scripts" ><span class="devsite-nav-text" tooltip>Run a Robo script</span></a></li><li class="devsite-nav-item"><a href="/docs/test-lab/ios/run-game-loop-test" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/test-lab/ios/run-game-loop-test" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/test-lab/ios/run-game-loop-test" ><span class="devsite-nav-text" tooltip>Run a Game Loop test</span></a></li><li class="devsite-nav-item"><a href="/docs/test-lab/ios/run-xctest" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/test-lab/ios/run-xctest" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/test-lab/ios/run-xctest" ><span class="devsite-nav-text" tooltip>Run an XCTest</span></a></li><li class="devsite-nav-item"><a href="/docs/test-lab/ios/firebase-console" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/test-lab/ios/firebase-console" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/test-lab/ios/firebase-console" ><span class="devsite-nav-text" tooltip>Test with the Firebase console</span></a></li><li class="devsite-nav-item"><a href="/docs/test-lab/ios/command-line" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/test-lab/ios/command-line" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/test-lab/ios/command-line" ><span class="devsite-nav-text" tooltip>Test with the gcloud CLI</span></a></li><li class="devsite-nav-item"><a href="/docs/test-lab/ios/available-testing-devices" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/test-lab/ios/available-testing-devices" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/test-lab/ios/available-testing-devices" ><span class="devsite-nav-text" tooltip>Test on available devices</span></a></li><li class="devsite-nav-item"><a href="/docs/test-lab/ios/analyzing-results" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/test-lab/ios/analyzing-results" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/test-lab/ios/analyzing-results" ><span class="devsite-nav-text" tooltip>Analyze test results</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Android</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/test-lab/android/get-started" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/test-lab/android/get-started" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/test-lab/android/get-started" ><span class="devsite-nav-text" tooltip>Get started</span></a></li><li class="devsite-nav-item"><a href="/docs/test-lab/android/instrumentation-test" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/test-lab/android/instrumentation-test" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/test-lab/android/instrumentation-test" ><span class="devsite-nav-text" tooltip>Run an instrumentation test</span></a></li><li class="devsite-nav-item"><a href="/docs/test-lab/android/robo-ux-test" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/test-lab/android/robo-ux-test" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/test-lab/android/robo-ux-test" ><span class="devsite-nav-text" tooltip>Run a Robo test</span></a></li><li class="devsite-nav-item"><a href="/docs/test-lab/android/run-robo-scripts" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/test-lab/android/run-robo-scripts" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/test-lab/android/run-robo-scripts" ><span class="devsite-nav-text" tooltip>Run a Robo script</span></a></li><li class="devsite-nav-item"><a href="/docs/test-lab/android/game-loop" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/test-lab/android/game-loop" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/test-lab/android/game-loop" ><span class="devsite-nav-text" tooltip>Run a Game Loop test</span></a></li><li class="devsite-nav-item"><a href="/docs/test-lab/android/firebase-console" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/test-lab/android/firebase-console" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/test-lab/android/firebase-console" ><span class="devsite-nav-text" tooltip>Test with the Firebase console</span></a></li><li class="devsite-nav-item"><a href="/docs/test-lab/android/command-line" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/test-lab/android/command-line" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/test-lab/android/command-line" ><span class="devsite-nav-text" tooltip>Test with the gcloud CLI</span></a></li><li class="devsite-nav-item"><a href="/docs/test-lab/android/android-studio" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/test-lab/android/android-studio" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/test-lab/android/android-studio" ><span class="devsite-nav-text" tooltip>Test with Android Studio</span></a></li><li class="devsite-nav-item"><a href="/docs/test-lab/android/available-testing-devices" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/test-lab/android/available-testing-devices" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/test-lab/android/available-testing-devices" ><span class="devsite-nav-text" tooltip>Test on available devices</span></a></li><li class="devsite-nav-item"><a href="/docs/test-lab/android/avds" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/test-lab/android/avds" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/test-lab/android/avds" ><span class="devsite-nav-text" tooltip>Test with virtual devices</span></a></li><li class="devsite-nav-item"><a href="/docs/test-lab/android/analyzing-results" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/test-lab/android/analyzing-results" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/test-lab/android/analyzing-results" ><span class="devsite-nav-text" tooltip>Analyze test results</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-new"><a href="/docs/test-lab/usage-quotas-pricing" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/test-lab/usage-quotas-pricing" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/test-lab/usage-quotas-pricing" ><span class="devsite-nav-text" tooltip>Usage, quotas, &amp; pricing</span><span class="devsite-nav-icon material-icons" data-icon="new" data-title="New!" aria-hidden="true"></span></a></li><li class="devsite-nav-item"><a href="/docs/test-lab/android/continuous" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/test-lab/android/continuous" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/test-lab/android/continuous" ><span class="devsite-nav-text" tooltip>Test with CI systems</span></a></li><li class="devsite-nav-item"><a href="/docs/test-lab/extend-with-functions" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/test-lab/extend-with-functions" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/test-lab/extend-with-functions" ><span class="devsite-nav-text" tooltip>Extend with Cloud Functions</span></a></li><li class="devsite-nav-item"><a href="/docs/test-lab/android/android-device-streaming" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/test-lab/android/android-device-streaming" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/test-lab/android/android-device-streaming" ><span class="devsite-nav-text" tooltip>Test with Android Device Streaming</span></a></li><li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Reference</span> </div></li><li class="devsite-nav-item"><a href="/docs/test-lab/android/robo-scripts-reference" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/test-lab/android/robo-scripts-reference" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/test-lab/android/robo-scripts-reference" ><span class="devsite-nav-text" tooltip>Robo scripts reference guide</span></a></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>REST API reference</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/test-lab/reference/testing/rest" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/test-lab/reference/testing/rest" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/test-lab/reference/testing/rest" ><span class="devsite-nav-text" tooltip>Testing (submit test &amp; monitor)</span></a></li><li class="devsite-nav-item"><a href="/docs/test-lab/reference/toolresults/rest" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/test-lab/reference/toolresults/rest" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/test-lab/reference/toolresults/rest" ><span class="devsite-nav-text" tooltip>ToolResults (retrieve results)</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-new"><a href="/docs/test-lab/android/iam-permissions-reference" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/test-lab/android/iam-permissions-reference" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/test-lab/android/iam-permissions-reference" ><span class="devsite-nav-text" tooltip>Test Lab IAM permissions reference guide</span><span class="devsite-nav-icon material-icons" data-icon="new" data-title="New!" aria-hidden="true"></span></a></li><li class="devsite-nav-item devsite-nav-break"></li><li class="devsite-nav-item"><a href="/docs/test-lab/troubleshooting" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/test-lab/troubleshooting" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/test-lab/troubleshooting" ><span class="devsite-nav-text" tooltip>Troubleshooting &amp; FAQ</span></a></li></ul></div></li> <li class="devsite-nav-item devsite-nav-expandable devsite-nav-accordion"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>App Distribution</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/app-distribution" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/app-distribution" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/app-distribution" ><span class="devsite-nav-text" tooltip>Introduction</span></a></li><li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Distribute iOS apps</span> </div></li><li class="devsite-nav-item"><a href="/docs/app-distribution/ios/distribute-console" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/app-distribution/ios/distribute-console" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/app-distribution/ios/distribute-console" ><span class="devsite-nav-text" tooltip>Use the Firebase console</span></a></li><li class="devsite-nav-item"><a href="/docs/app-distribution/ios/distribute-cli" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/app-distribution/ios/distribute-cli" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/app-distribution/ios/distribute-cli" ><span class="devsite-nav-text" tooltip>Use the Firebase CLI</span></a></li><li class="devsite-nav-item"><a href="/docs/app-distribution/ios/distribute-fastlane" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/app-distribution/ios/distribute-fastlane" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/app-distribution/ios/distribute-fastlane" ><span class="devsite-nav-text" tooltip>Use fastlane</span></a></li><li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Distribute Android apps</span> </div></li><li class="devsite-nav-item"><a href="/docs/app-distribution/android/distribute-console" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/app-distribution/android/distribute-console" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/app-distribution/android/distribute-console" ><span class="devsite-nav-text" tooltip>Use the Firebase console</span></a></li><li class="devsite-nav-item"><a href="/docs/app-distribution/android/distribute-cli" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/app-distribution/android/distribute-cli" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/app-distribution/android/distribute-cli" ><span class="devsite-nav-text" tooltip>Use the Firebase CLI</span></a></li><li class="devsite-nav-item"><a href="/docs/app-distribution/android/distribute-fastlane" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/app-distribution/android/distribute-fastlane" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/app-distribution/android/distribute-fastlane" ><span class="devsite-nav-text" tooltip>Use fastlane</span></a></li><li class="devsite-nav-item"><a href="/docs/app-distribution/android/distribute-gradle" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/app-distribution/android/distribute-gradle" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/app-distribution/android/distribute-gradle" ><span class="devsite-nav-text" tooltip>Use Gradle</span></a></li><li class="devsite-nav-item devsite-nav-beta"><a href="/docs/app-distribution/android-automated-tester" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/app-distribution/android-automated-tester" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/app-distribution/android-automated-tester" ><span class="devsite-nav-text" tooltip>Use Automated tester</span><span class="devsite-nav-icon material-icons" data-icon="beta" data-title="Beta" aria-hidden="true"></span></a></li><li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Manage testers</span> </div></li><li class="devsite-nav-item"><a href="/docs/app-distribution/add-remove-search-testers" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/app-distribution/add-remove-search-testers" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/app-distribution/add-remove-search-testers" ><span class="devsite-nav-text" tooltip>Add, remove, and search for testers</span></a></li><li class="devsite-nav-item"><a href="/docs/app-distribution/import-testers-csv-files" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/app-distribution/import-testers-csv-files" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/app-distribution/import-testers-csv-files" ><span class="devsite-nav-text" tooltip>Import testers from CSV files</span></a></li><li class="devsite-nav-item"><a href="/docs/app-distribution/register-additional-devices" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/app-distribution/register-additional-devices" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/app-distribution/register-additional-devices" ><span class="devsite-nav-text" tooltip>Register additional iOS devices</span></a></li><li class="devsite-nav-item"><a href="/docs/app-distribution/create-invite-links" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/app-distribution/create-invite-links" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/app-distribution/create-invite-links" ><span class="devsite-nav-text" tooltip>Create invite links</span></a></li><li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Install &amp; test apps</span> </div></li><li class="devsite-nav-item"><a href="/docs/app-distribution/get-set-up-as-a-tester" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/app-distribution/get-set-up-as-a-tester" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/app-distribution/get-set-up-as-a-tester" ><span class="devsite-nav-text" tooltip>Get set up as a tester</span></a></li><li class="devsite-nav-item devsite-nav-beta"><a href="/docs/app-distribution/collect-feedback-from-testers" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/app-distribution/collect-feedback-from-testers" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/app-distribution/collect-feedback-from-testers" ><span class="devsite-nav-text" tooltip>Collect feedback from testers</span><span class="devsite-nav-icon material-icons" data-icon="beta" data-title="Beta" aria-hidden="true"></span></a></li><li class="devsite-nav-item devsite-nav-beta"><a href="/docs/app-distribution/set-up-alerts" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/app-distribution/set-up-alerts" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/app-distribution/set-up-alerts" ><span class="devsite-nav-text" tooltip>Notify testers about new builds</span><span class="devsite-nav-icon material-icons" data-icon="beta" data-title="Beta" aria-hidden="true"></span></a></li><li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Solutions</span> </div></li><li class="devsite-nav-item"><a href="/docs/app-distribution/best-practices-distributing-apple-apps-to-qa-testers-with-ci-cd-fastlane" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/app-distribution/best-practices-distributing-apple-apps-to-qa-testers-with-ci-cd-fastlane" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/app-distribution/best-practices-distributing-apple-apps-to-qa-testers-with-ci-cd-fastlane" ><span class="devsite-nav-text" tooltip>Best practices for distributing Apple apps to QA testers using CI/CD and fastlane</span></a></li><li class="devsite-nav-item"><a href="/docs/app-distribution/best-practices-distributing-android-apps-to-qa-testers-with-ci-cd" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/app-distribution/best-practices-distributing-android-apps-to-qa-testers-with-ci-cd" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/app-distribution/best-practices-distributing-android-apps-to-qa-testers-with-ci-cd" ><span class="devsite-nav-text" tooltip>Best practices for distributing Android apps to QA testers using CI/CD</span></a></li><li class="devsite-nav-item devsite-nav-break"></li><li class="devsite-nav-item"><a href="/docs/app-distribution/troubleshooting" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/app-distribution/troubleshooting" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/app-distribution/troubleshooting" ><span class="devsite-nav-text" tooltip>Troubleshooting &amp; FAQ</span></a></li></ul></div></li> <li class="devsite-nav-item devsite-nav-divider devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Monitor</span> </div></li> <li class="devsite-nav-item devsite-nav-expandable devsite-nav-accordion"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Crashlytics</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/crashlytics" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/crashlytics" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/crashlytics" ><span class="devsite-nav-text" tooltip>Introduction</span></a></li><li class="devsite-nav-item"><a href="/docs/crashlytics/get-started" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/crashlytics/get-started" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/crashlytics/get-started" ><span class="devsite-nav-text" tooltip>Get started</span></a></li><li class="devsite-nav-item"><a href="/docs/crashlytics/ndk-reports" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/crashlytics/ndk-reports" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/crashlytics/ndk-reports" ><span class="devsite-nav-text" tooltip>Get Android NDK crash reports</span></a></li><li class="devsite-nav-item"><a href="/docs/crashlytics/test-implementation" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/crashlytics/test-implementation" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/crashlytics/test-implementation" ><span class="devsite-nav-text" tooltip>Test your implementation</span></a></li><li class="devsite-nav-item"><a href="/docs/crashlytics/get-deobfuscated-reports" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/crashlytics/get-deobfuscated-reports" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/crashlytics/get-deobfuscated-reports" ><span class="devsite-nav-text" tooltip>Get readable crash reports</span></a></li><li class="devsite-nav-item"><a href="/docs/crashlytics/customize-crash-reports" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/crashlytics/customize-crash-reports" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/crashlytics/customize-crash-reports" ><span class="devsite-nav-text" tooltip>Customize crash reports</span></a></li><li class="devsite-nav-item devsite-nav-new"><a href="/docs/crashlytics/crash-free-metrics" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/crashlytics/crash-free-metrics" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/crashlytics/crash-free-metrics" ><span class="devsite-nav-text" tooltip>Understand crash-free metrics</span><span class="devsite-nav-icon material-icons" data-icon="new" data-title="New!" aria-hidden="true"></span></a></li><li class="devsite-nav-item"><a href="/docs/crashlytics/integrate-with-google-play" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/crashlytics/integrate-with-google-play" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/crashlytics/integrate-with-google-play" ><span class="devsite-nav-text" tooltip>Filter events by Play track</span></a></li><li class="devsite-nav-item"><a href="/docs/crashlytics/debug-anr-errors" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/crashlytics/debug-anr-errors" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/crashlytics/debug-anr-errors" ><span class="devsite-nav-text" tooltip>Debug ANR errors in Android app</span></a></li><li class="devsite-nav-item devsite-nav-new"><a href="/docs/release/release-monitoring" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/release/release-monitoring" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/release/release-monitoring" ><span class="devsite-nav-text" tooltip>Monitor your latest release</span><span class="devsite-nav-icon material-icons" data-icon="new" data-title="New!" aria-hidden="true"></span></a></li><li class="devsite-nav-item"><a href="/docs/crashlytics/velocity-alerts" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/crashlytics/velocity-alerts" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/crashlytics/velocity-alerts" ><span class="devsite-nav-text" tooltip>Customize velocity alerts</span></a></li><li class="devsite-nav-item devsite-nav-new"><a href="/docs/crashlytics/ai-assistance" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/crashlytics/ai-assistance" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/crashlytics/ai-assistance" ><span class="devsite-nav-text" tooltip>Get AI assistance</span><span class="devsite-nav-icon material-icons" data-icon="new" data-title="New!" aria-hidden="true"></span></a></li><li class="devsite-nav-item"><a href="/docs/crashlytics/bigquery-export" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/crashlytics/bigquery-export" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/crashlytics/bigquery-export" ><span class="devsite-nav-text" tooltip>Export data to BigQuery</span></a></li><li class="devsite-nav-item devsite-nav-new"><a href="/docs/crashlytics/upgrade-to-crashlytics-gradle-plugin-v3" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/crashlytics/upgrade-to-crashlytics-gradle-plugin-v3" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/crashlytics/upgrade-to-crashlytics-gradle-plugin-v3" ><span class="devsite-nav-text" tooltip>Upgrade to Gradle plugin v3</span><span class="devsite-nav-icon material-icons" data-icon="new" data-title="New!" aria-hidden="true"></span></a></li><li class="devsite-nav-item"><a href="/docs/crashlytics/troubleshooting" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/crashlytics/troubleshooting" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/crashlytics/troubleshooting" ><span class="devsite-nav-text" tooltip>Troubleshooting &amp; FAQ for setup</span></a></li></ul></div></li> <li class="devsite-nav-item devsite-nav-expandable devsite-nav-accordion"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Performance Monitoring</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/perf-mon" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/perf-mon" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/perf-mon" ><span class="devsite-nav-text" tooltip>Introduction</span></a></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Get started</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/perf-mon/get-started-ios" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/perf-mon/get-started-ios" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/perf-mon/get-started-ios" ><span class="devsite-nav-text" tooltip>iOS+</span></a></li><li class="devsite-nav-item"><a href="/docs/perf-mon/get-started-android" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/perf-mon/get-started-android" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/perf-mon/get-started-android" ><span class="devsite-nav-text" tooltip>Android</span></a></li><li class="devsite-nav-item devsite-nav-beta"><a href="/docs/perf-mon/get-started-web" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/perf-mon/get-started-web" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/perf-mon/get-started-web" ><span class="devsite-nav-text" tooltip>Web</span><span class="devsite-nav-icon material-icons" data-icon="beta" data-title="Beta" aria-hidden="true"></span></a></li><li class="devsite-nav-item"><a href="/docs/perf-mon/flutter/get-started" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/perf-mon/flutter/get-started" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/perf-mon/flutter/get-started" ><span class="devsite-nav-text" tooltip>Flutter</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Learn about automatically collected data</span> </div></li><li class="devsite-nav-item"><a href="/docs/perf-mon/app-start-foreground-background-traces" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/perf-mon/app-start-foreground-background-traces" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/perf-mon/app-start-foreground-background-traces" ><span class="devsite-nav-text" tooltip>App start, foreground, background (iOS+ &amp; Android)</span></a></li><li class="devsite-nav-item"><a href="/docs/perf-mon/screen-traces" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/perf-mon/screen-traces" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/perf-mon/screen-traces" ><span class="devsite-nav-text" tooltip>Screen rendering (iOS+ &amp; Android)</span></a></li><li class="devsite-nav-item devsite-nav-beta"><a href="/docs/perf-mon/page-load-traces" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/perf-mon/page-load-traces" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/perf-mon/page-load-traces" ><span class="devsite-nav-text" tooltip>Page loading (web)</span><span class="devsite-nav-icon material-icons" data-icon="beta" data-title="Beta" aria-hidden="true"></span></a></li><li class="devsite-nav-item"><a href="/docs/perf-mon/network-traces" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/perf-mon/network-traces" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/perf-mon/network-traces" ><span class="devsite-nav-text" tooltip>HTTP/S network requests</span></a></li><li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Customize data collection and aggregation</span> </div></li><li class="devsite-nav-item"><a href="/docs/perf-mon/custom-code-traces" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/perf-mon/custom-code-traces" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/perf-mon/custom-code-traces" ><span class="devsite-nav-text" tooltip>Add monitoring for specific code</span></a></li><li class="devsite-nav-item"><a href="/docs/perf-mon/custom-network-traces" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/perf-mon/custom-network-traces" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/perf-mon/custom-network-traces" ><span class="devsite-nav-text" tooltip>Add monitoring for specific network requests</span></a></li><li class="devsite-nav-item"><a href="/docs/perf-mon/custom-url-patterns" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/perf-mon/custom-url-patterns" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/perf-mon/custom-url-patterns" ><span class="devsite-nav-text" tooltip>Customize network request data aggregation</span></a></li><li class="devsite-nav-item"><a href="/docs/perf-mon/disable-sdk" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/perf-mon/disable-sdk" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/perf-mon/disable-sdk" ><span class="devsite-nav-text" tooltip>Disable Performance Monitoring</span></a></li><li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Track, view, and filter data</span> </div></li><li class="devsite-nav-item"><a href="/docs/perf-mon/console" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/perf-mon/console" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/perf-mon/console" ><span class="devsite-nav-text" tooltip>Overview of the console</span></a></li><li class="devsite-nav-item"><a href="/docs/perf-mon/attributes" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/perf-mon/attributes" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/perf-mon/attributes" ><span class="devsite-nav-text" tooltip>Filter data using attributes</span></a></li><li class="devsite-nav-item"><a href="/docs/perf-mon/alerts" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/perf-mon/alerts" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/perf-mon/alerts" ><span class="devsite-nav-text" tooltip>Set up alerts for performance issues</span></a></li><li class="devsite-nav-item"><a href="/docs/perf-mon/bigquery-export" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/perf-mon/bigquery-export" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/perf-mon/bigquery-export" ><span class="devsite-nav-text" tooltip>Export data to BigQuery</span></a></li><li class="devsite-nav-item devsite-nav-break"></li><li class="devsite-nav-item"><a href="/docs/perf-mon/troubleshooting" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/perf-mon/troubleshooting" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/perf-mon/troubleshooting" ><span class="devsite-nav-text" tooltip>Troubleshooting &amp; FAQ</span></a></li></ul></div></li> <li class="devsite-nav-item devsite-nav-divider devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Iterate</span> </div></li> <li class="devsite-nav-item devsite-nav-expandable devsite-nav-accordion"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Remote Config</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/remote-config" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/remote-config" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/remote-config" ><span class="devsite-nav-text" tooltip>Introduction</span></a></li><li class="devsite-nav-item"><a href="/docs/remote-config/get-started" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/remote-config/get-started" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/remote-config/get-started" ><span class="devsite-nav-text" tooltip>Get started</span></a></li><li class="devsite-nav-item"><a href="/docs/remote-config/real-time" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/remote-config/real-time" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/remote-config/real-time" ><span class="devsite-nav-text" tooltip>Understand real-time Remote Config</span></a></li><li class="devsite-nav-item"><a href="/docs/remote-config/use-cases" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/remote-config/use-cases" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/remote-config/use-cases" ><span class="devsite-nav-text" tooltip>Explore use cases</span></a></li><li class="devsite-nav-item"><a href="/docs/remote-config/parameters" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/remote-config/parameters" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/remote-config/parameters" ><span class="devsite-nav-text" tooltip>Understand parameters and conditions</span></a></li><li class="devsite-nav-item"><a href="/docs/remote-config/templates" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/remote-config/templates" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/remote-config/templates" ><span class="devsite-nav-text" tooltip>Manage Remote Config templates</span></a></li><li class="devsite-nav-item"><a href="/docs/remote-config/automate-rc" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/remote-config/automate-rc" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/remote-config/automate-rc" ><span class="devsite-nav-text" tooltip>Modify Remote Config programmatically</span></a></li><li class="devsite-nav-item"><a href="/docs/remote-config/loading" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/remote-config/loading" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/remote-config/loading" ><span class="devsite-nav-text" tooltip>Explore loading strategies</span></a></li><li class="devsite-nav-item"><a href="/docs/remote-config/config-analytics" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/remote-config/config-analytics" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/remote-config/config-analytics" ><span class="devsite-nav-text" tooltip>Use Remote Config with Analytics</span></a></li><li class="devsite-nav-item"><a href="/docs/remote-config/extend-with-functions" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/remote-config/extend-with-functions" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/remote-config/extend-with-functions" ><span class="devsite-nav-text" tooltip>Extend with Cloud Functions</span></a></li><li class="devsite-nav-item"><a href="/docs/remote-config/case-studies" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/remote-config/case-studies" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/remote-config/case-studies" ><span class="devsite-nav-text" tooltip>Case studies</span></a></li><li class="devsite-nav-item devsite-nav-expandable devsite-nav-preview"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Rollouts</span><span class="devsite-nav-icon material-icons" data-icon="preview" data-title="Preview" aria-hidden="true"></span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/remote-config/rollouts" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/remote-config/rollouts" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/remote-config/rollouts" ><span class="devsite-nav-text" tooltip>Introduction</span></a></li><li class="devsite-nav-item"><a href="/docs/remote-config/rollouts/get-started" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/remote-config/rollouts/get-started" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/remote-config/rollouts/get-started" ><span class="devsite-nav-text" tooltip>Get started</span></a></li><li class="devsite-nav-item"><a href="/docs/remote-config/rollouts/about" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/remote-config/rollouts/about" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/remote-config/rollouts/about" ><span class="devsite-nav-text" tooltip>About Remote Config rollouts</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable devsite-nav-beta"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Personalization</span><span class="devsite-nav-icon material-icons" data-icon="beta" data-title="Beta" aria-hidden="true"></span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/remote-config/personalization" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/remote-config/personalization" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/remote-config/personalization" ><span class="devsite-nav-text" tooltip>Introduction</span></a></li><li class="devsite-nav-item"><a href="/docs/remote-config/personalization/get-started" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/remote-config/personalization/get-started" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/remote-config/personalization/get-started" ><span class="devsite-nav-text" tooltip>Get started</span></a></li><li class="devsite-nav-item"><a href="/docs/remote-config/personalization/about" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/remote-config/personalization/about" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/remote-config/personalization/about" ><span class="devsite-nav-text" tooltip>About Remote Config personalization</span></a></li><li class="devsite-nav-item"><a href="/docs/remote-config/personalization/use-cases" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/remote-config/personalization/use-cases" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/remote-config/personalization/use-cases" ><span class="devsite-nav-text" tooltip>Explore use cases</span></a></li><li class="devsite-nav-item"><a href="/docs/remote-config/personalization/bigquery" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/remote-config/personalization/bigquery" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/remote-config/personalization/bigquery" ><span class="devsite-nav-text" tooltip>Export to BigQuery</span></a></li><li class="devsite-nav-item"><a href="/docs/remote-config/personalization/csindex" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/remote-config/personalization/csindex" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/remote-config/personalization/csindex" ><span class="devsite-nav-text" tooltip>Case studies</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable devsite-nav-preview"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Server environments</span><span class="devsite-nav-icon material-icons" data-icon="preview" data-title="Preview" aria-hidden="true"></span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/remote-config/server" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/remote-config/server" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/remote-config/server" ><span class="devsite-nav-text" tooltip>Use Remote Config in server environments</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Solutions</span> </div></li><li class="devsite-nav-item"><a href="/docs/remote-config/solution-server" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/remote-config/solution-server" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/remote-config/solution-server" ><span class="devsite-nav-text" tooltip>Use server-side Remote Config with Cloud Functions and Vertex AI</span></a></li><li class="devsite-nav-item devsite-nav-new"><a href="/docs/remote-config/solutions/vertexai" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/remote-config/solutions/vertexai" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/remote-config/solutions/vertexai" ><span class="devsite-nav-text" tooltip>Dynamically update your Vertex AI in Firebase app with Remote Config</span><span class="devsite-nav-icon material-icons" data-icon="new" data-title="New!" aria-hidden="true"></span></a></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>API reference</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/reference/remote-config/rest" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/reference/remote-config/rest" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/reference/remote-config/rest" ><span class="devsite-nav-text" tooltip>REST API reference</span></a></li><li class="devsite-nav-item"><a href="/docs/remote-config/condition-reference" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/remote-config/condition-reference" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/remote-config/condition-reference" ><span class="devsite-nav-text" tooltip>Conditional expression reference</span></a></li><li class="devsite-nav-item"><a href="/docs/reference/android/com/google/firebase/remoteconfig/package-summary" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/reference/android/com/google/firebase/remoteconfig/package-summary" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/reference/android/com/google/firebase/remoteconfig/package-summary" ><span class="devsite-nav-text" tooltip>Android SDK reference</span></a></li><li class="devsite-nav-item"><a href="/docs/reference/swift/firebaseremoteconfig/api/reference/Classes" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/reference/swift/firebaseremoteconfig/api/reference/Classes" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/reference/swift/firebaseremoteconfig/api/reference/Classes" ><span class="devsite-nav-text" tooltip>Swift SDK reference</span></a></li><li class="devsite-nav-item"><a href="/docs/reference/ios/firebasecore/api/reference/Classes" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/reference/ios/firebasecore/api/reference/Classes" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/reference/ios/firebasecore/api/reference/Classes" ><span class="devsite-nav-text" tooltip>Obj-C SDK reference</span></a></li><li class="devsite-nav-item devsite-nav-external"><a href="https://pub.dev/documentation/firebase_remote_config/latest/" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: https://pub.dev/documentation/firebase_remote_config/latest/" track-type="bookNav" track-name="click" track-metadata-eventdetail="https://pub.dev/documentation/firebase_remote_config/latest/" ><span class="devsite-nav-text" tooltip>Flutter reference</span><span class="devsite-nav-icon material-icons" data-icon="external" data-title="External" aria-hidden="true"></span></a></li><li class="devsite-nav-item"><a href="/docs/reference/unity/namespace/firebase/remote-config" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/reference/unity/namespace/firebase/remote-config" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/reference/unity/namespace/firebase/remote-config" ><span class="devsite-nav-text" tooltip>Unity reference</span></a></li><li class="devsite-nav-item"><a href="/docs/reference/cpp/namespace/firebase/remote-config" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/reference/cpp/namespace/firebase/remote-config" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/reference/cpp/namespace/firebase/remote-config" ><span class="devsite-nav-text" tooltip>C++ reference</span></a></li><li class="devsite-nav-item"><a href="/docs/reference/js/remote-config" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/reference/js/remote-config" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/reference/js/remote-config" ><span class="devsite-nav-text" tooltip>Web modular reference</span></a></li><li class="devsite-nav-item"><a href="/docs/reference/js/v8/firebase.remoteconfig" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/reference/js/v8/firebase.remoteconfig" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/reference/js/v8/firebase.remoteconfig" ><span class="devsite-nav-text" tooltip>Web namespaced reference</span></a></li></ul></div></li></ul></div></li> <li class="devsite-nav-item devsite-nav-expandable devsite-nav-accordion devsite-nav-beta"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>A/B Testing</span><span class="devsite-nav-icon material-icons" data-icon="beta" data-title="Beta" aria-hidden="true"></span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/ab-testing" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ab-testing" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ab-testing" ><span class="devsite-nav-text" tooltip>Introduction</span></a></li><li class="devsite-nav-item"><a href="/docs/ab-testing/ab-concepts" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ab-testing/ab-concepts" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ab-testing/ab-concepts" ><span class="devsite-nav-text" tooltip>About Firebase A/B tests</span></a></li><li class="devsite-nav-item"><a href="/docs/ab-testing/abtest-config" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ab-testing/abtest-config" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ab-testing/abtest-config" ><span class="devsite-nav-text" tooltip>Create Remote Config Experiments with A/B Testing</span></a></li><li class="devsite-nav-item"><a href="/docs/ab-testing/abtest-with-console" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ab-testing/abtest-with-console" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ab-testing/abtest-with-console" ><span class="devsite-nav-text" tooltip>Create Messaging Experiments with A/B Testing</span></a></li><li class="devsite-nav-item"><a href="/docs/ab-testing/abtest-inappmessaging" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ab-testing/abtest-inappmessaging" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ab-testing/abtest-inappmessaging" ><span class="devsite-nav-text" tooltip>Create In-App Messaging Experiments with A/B Testing</span></a></li><li class="devsite-nav-item devsite-nav-new"><a href="/docs/ab-testing/bigquery" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ab-testing/bigquery" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ab-testing/bigquery" ><span class="devsite-nav-text" tooltip>Export to BigQuery</span><span class="devsite-nav-icon material-icons" data-icon="new" data-title="New!" aria-hidden="true"></span></a></li><li class="devsite-nav-item"><a href="/docs/ab-testing/case-studies" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ab-testing/case-studies" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ab-testing/case-studies" ><span class="devsite-nav-text" tooltip>Case studies</span></a></li></ul></div></li> <li class="devsite-nav-item devsite-nav-divider devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Engage</span> </div></li> <li class="devsite-nav-item devsite-nav-expandable devsite-nav-accordion"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Analytics</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/analytics" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/analytics" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/analytics" ><span class="devsite-nav-text" tooltip>Introduction</span></a></li><li class="devsite-nav-item"><a href="/docs/analytics/get-started" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/analytics/get-started" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/analytics/get-started" ><span class="devsite-nav-text" tooltip>Get started</span></a></li><li class="devsite-nav-item"><a href="/docs/analytics/reports" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/analytics/reports" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/analytics/reports" ><span class="devsite-nav-text" tooltip>Understand your reports</span></a></li><li class="devsite-nav-item"><a href="/docs/analytics/events" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/analytics/events" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/analytics/events" ><span class="devsite-nav-text" tooltip>Log events</span></a></li><li class="devsite-nav-item"><a href="/docs/analytics/user-properties" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/analytics/user-properties" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/analytics/user-properties" ><span class="devsite-nav-text" tooltip>Set user properties</span></a></li><li class="devsite-nav-item"><a href="/docs/analytics/debugview" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/analytics/debugview" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/analytics/debugview" ><span class="devsite-nav-text" tooltip>Debug events</span></a></li><li class="devsite-nav-item"><a href="/docs/analytics/screenviews" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/analytics/screenviews" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/analytics/screenviews" ><span class="devsite-nav-text" tooltip>Measure screenviews</span></a></li><li class="devsite-nav-item"><a href="/docs/analytics/userid" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/analytics/userid" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/analytics/userid" ><span class="devsite-nav-text" tooltip>Set a user ID</span></a></li><li class="devsite-nav-item"><a href="/docs/analytics/measure-ecommerce" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/analytics/measure-ecommerce" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/analytics/measure-ecommerce" ><span class="devsite-nav-text" tooltip>Measure ecommerce</span></a></li><li class="devsite-nav-item"><a href="/docs/analytics/measure-ad-revenue" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/analytics/measure-ad-revenue" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/analytics/measure-ad-revenue" ><span class="devsite-nav-text" tooltip>Measure ad revenue</span></a></li><li class="devsite-nav-item"><a href="/docs/analytics/measure-in-app-purchases" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/analytics/measure-in-app-purchases" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/analytics/measure-in-app-purchases" ><span class="devsite-nav-text" tooltip>Measure in-app purchases</span></a></li><li class="devsite-nav-item"><a href="/docs/analytics/webview" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/analytics/webview" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/analytics/webview" ><span class="devsite-nav-text" tooltip>Use in a WebView</span></a></li><li class="devsite-nav-item"><a href="/docs/analytics/extend-with-functions" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/analytics/extend-with-functions" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/analytics/extend-with-functions" ><span class="devsite-nav-text" tooltip>Extend with Cloud Functions</span></a></li><li class="devsite-nav-item"><a href="/docs/analytics/configure-data-collection" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/analytics/configure-data-collection" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/analytics/configure-data-collection" ><span class="devsite-nav-text" tooltip>Configure data collection and usage</span></a></li><li class="devsite-nav-item"><a href="/docs/analytics/errors" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/analytics/errors" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/analytics/errors" ><span class="devsite-nav-text" tooltip>Error codes</span></a></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>C++</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/analytics/cpp/start" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/analytics/cpp/start" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/analytics/cpp/start" ><span class="devsite-nav-text" tooltip>Get started</span></a></li><li class="devsite-nav-item"><a href="/docs/analytics/cpp/events" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/analytics/cpp/events" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/analytics/cpp/events" ><span class="devsite-nav-text" tooltip>Log events</span></a></li><li class="devsite-nav-item"><a href="/docs/analytics/cpp/properties" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/analytics/cpp/properties" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/analytics/cpp/properties" ><span class="devsite-nav-text" tooltip>Set user properties</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Unity</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/analytics/unity/start" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/analytics/unity/start" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/analytics/unity/start" ><span class="devsite-nav-text" tooltip>Get started</span></a></li><li class="devsite-nav-item"><a href="/docs/analytics/unity/events" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/analytics/unity/events" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/analytics/unity/events" ><span class="devsite-nav-text" tooltip>Log events</span></a></li><li class="devsite-nav-item"><a href="/docs/analytics/unity/properties" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/analytics/unity/properties" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/analytics/unity/properties" ><span class="devsite-nav-text" tooltip>Set user properties</span></a></li></ul></div></li></ul></div></li> <li class="devsite-nav-item devsite-nav-expandable devsite-nav-accordion"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Cloud Messaging</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/cloud-messaging" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/cloud-messaging" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/cloud-messaging" ><span class="devsite-nav-text" tooltip>Introduction</span></a></li><li class="devsite-nav-item devsite-nav-new"><a href="/docs/cloud-messaging/migrate-v1" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/cloud-messaging/migrate-v1" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/cloud-messaging/migrate-v1" ><span class="devsite-nav-text" tooltip>Migrate to the HTTP v1 API</span><span class="devsite-nav-icon material-icons" data-icon="new" data-title="New!" aria-hidden="true"></span></a></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Concepts and best practices</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/cloud-messaging/fcm-architecture" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/cloud-messaging/fcm-architecture" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/cloud-messaging/fcm-architecture" ><span class="devsite-nav-text" tooltip>FCM Architectural Overview</span></a></li><li class="devsite-nav-item"><a href="/docs/cloud-messaging/concept-options" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/cloud-messaging/concept-options" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/cloud-messaging/concept-options" ><span class="devsite-nav-text" tooltip>About FCM messages</span></a></li><li class="devsite-nav-item"><a href="/docs/cloud-messaging/understand-delivery" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/cloud-messaging/understand-delivery" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/cloud-messaging/understand-delivery" ><span class="devsite-nav-text" tooltip>Understanding message delivery</span></a></li><li class="devsite-nav-item"><a href="/docs/cloud-messaging/scale-fcm" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/cloud-messaging/scale-fcm" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/cloud-messaging/scale-fcm" ><span class="devsite-nav-text" tooltip>Send messages at scale</span></a></li><li class="devsite-nav-item"><a href="/docs/cloud-messaging/manage-tokens" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/cloud-messaging/manage-tokens" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/cloud-messaging/manage-tokens" ><span class="devsite-nav-text" tooltip>Manage FCM registration tokens</span></a></li><li class="devsite-nav-item"><a href="/docs/cloud-messaging/ai-insights" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/cloud-messaging/ai-insights" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/cloud-messaging/ai-insights" ><span class="devsite-nav-text" tooltip>Get AI insights for messaging campaigns</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>iOS+</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/cloud-messaging/ios/client" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/cloud-messaging/ios/client" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/cloud-messaging/ios/client" ><span class="devsite-nav-text" tooltip>Set up an Apple platforms client</span></a></li><li class="devsite-nav-item"><a href="/docs/cloud-messaging/ios/first-message" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/cloud-messaging/ios/first-message" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/cloud-messaging/ios/first-message" ><span class="devsite-nav-text" tooltip>Send a test message</span></a></li><li class="devsite-nav-item"><a href="/docs/cloud-messaging/ios/send-multiple" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/cloud-messaging/ios/send-multiple" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/cloud-messaging/ios/send-multiple" ><span class="devsite-nav-text" tooltip>Send messages to multiple devices</span></a></li><li class="devsite-nav-item"><a href="/docs/cloud-messaging/ios/send-image" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/cloud-messaging/ios/send-image" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/cloud-messaging/ios/send-image" ><span class="devsite-nav-text" tooltip>Send an image in the notification payload</span></a></li><li class="devsite-nav-item"><a href="/docs/cloud-messaging/ios/receive" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/cloud-messaging/ios/receive" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/cloud-messaging/ios/receive" ><span class="devsite-nav-text" tooltip>Receive messages</span></a></li><li class="devsite-nav-item devsite-nav-new"><a href="/docs/cloud-messaging/ios/live-activity" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/cloud-messaging/ios/live-activity" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/cloud-messaging/ios/live-activity" ><span class="devsite-nav-text" tooltip>Get started with Live Activity</span><span class="devsite-nav-icon material-icons" data-icon="new" data-title="New!" aria-hidden="true"></span></a></li><li class="devsite-nav-item"><a href="/docs/cloud-messaging/ios/topic-messaging" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/cloud-messaging/ios/topic-messaging" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/cloud-messaging/ios/topic-messaging" ><span class="devsite-nav-text" tooltip>Send messages to topics</span></a></li><li class="devsite-nav-item"><a href="/docs/cloud-messaging/ios/device-group" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/cloud-messaging/ios/device-group" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/cloud-messaging/ios/device-group" ><span class="devsite-nav-text" tooltip>Send to device groups</span></a></li><li class="devsite-nav-item"><a href="/docs/cloud-messaging/ios/send-with-console" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/cloud-messaging/ios/send-with-console" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/cloud-messaging/ios/send-with-console" ><span class="devsite-nav-text" tooltip>Send messages with the Firebase Console</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Android</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/cloud-messaging/android/client" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/cloud-messaging/android/client" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/cloud-messaging/android/client" ><span class="devsite-nav-text" tooltip>Set up an Android client</span></a></li><li class="devsite-nav-item"><a href="/docs/cloud-messaging/android/first-message" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/cloud-messaging/android/first-message" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/cloud-messaging/android/first-message" ><span class="devsite-nav-text" tooltip>Send a test message</span></a></li><li class="devsite-nav-item"><a href="/docs/cloud-messaging/android/send-multiple" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/cloud-messaging/android/send-multiple" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/cloud-messaging/android/send-multiple" ><span class="devsite-nav-text" tooltip>Send messages to multiple devices</span></a></li><li class="devsite-nav-item"><a href="/docs/cloud-messaging/android/send-image" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/cloud-messaging/android/send-image" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/cloud-messaging/android/send-image" ><span class="devsite-nav-text" tooltip>Send an image in the notification payload</span></a></li><li class="devsite-nav-item"><a href="/docs/cloud-messaging/android/receive" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/cloud-messaging/android/receive" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/cloud-messaging/android/receive" ><span class="devsite-nav-text" tooltip>Receive messages</span></a></li><li class="devsite-nav-item"><a href="/docs/cloud-messaging/android/message-priority" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/cloud-messaging/android/message-priority" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/cloud-messaging/android/message-priority" ><span class="devsite-nav-text" tooltip>Set and manage message priority</span></a></li><li class="devsite-nav-item"><a href="/docs/cloud-messaging/android/topic-messaging" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/cloud-messaging/android/topic-messaging" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/cloud-messaging/android/topic-messaging" ><span class="devsite-nav-text" tooltip>Send messages to topics</span></a></li><li class="devsite-nav-item"><a href="/docs/cloud-messaging/android/device-group" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/cloud-messaging/android/device-group" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/cloud-messaging/android/device-group" ><span class="devsite-nav-text" tooltip>Send to device groups</span></a></li><li class="devsite-nav-item"><a href="/docs/cloud-messaging/android/upstream" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/cloud-messaging/android/upstream" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/cloud-messaging/android/upstream" ><span class="devsite-nav-text" tooltip>Send upstream messages</span></a></li><li class="devsite-nav-item"><a href="/docs/cloud-messaging/android/send-with-console" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/cloud-messaging/android/send-with-console" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/cloud-messaging/android/send-with-console" ><span class="devsite-nav-text" tooltip>Send messages with the Firebase Console</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Flutter</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/cloud-messaging/flutter/client" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/cloud-messaging/flutter/client" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/cloud-messaging/flutter/client" ><span class="devsite-nav-text" tooltip>Set up a Flutter client</span></a></li><li class="devsite-nav-item"><a href="/docs/cloud-messaging/flutter/first-message" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/cloud-messaging/flutter/first-message" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/cloud-messaging/flutter/first-message" ><span class="devsite-nav-text" tooltip>Send a test message</span></a></li><li class="devsite-nav-item"><a href="/docs/cloud-messaging/flutter/receive" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/cloud-messaging/flutter/receive" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/cloud-messaging/flutter/receive" ><span class="devsite-nav-text" tooltip>Receive messages</span></a></li><li class="devsite-nav-item"><a href="/docs/cloud-messaging/flutter/topic-messaging" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/cloud-messaging/flutter/topic-messaging" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/cloud-messaging/flutter/topic-messaging" ><span class="devsite-nav-text" tooltip>Subscribe to topics</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>C++</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/cloud-messaging/cpp/client" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/cloud-messaging/cpp/client" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/cloud-messaging/cpp/client" ><span class="devsite-nav-text" tooltip>Set up a C++ client</span></a></li><li class="devsite-nav-item"><a href="/docs/cloud-messaging/cpp/receive" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/cloud-messaging/cpp/receive" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/cloud-messaging/cpp/receive" ><span class="devsite-nav-text" tooltip>Receive messages</span></a></li><li class="devsite-nav-item"><a href="/docs/cloud-messaging/cpp/topic-messaging" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/cloud-messaging/cpp/topic-messaging" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/cloud-messaging/cpp/topic-messaging" ><span class="devsite-nav-text" tooltip>Send messages to topics</span></a></li><li class="devsite-nav-item"><a href="/docs/cloud-messaging/cpp/device-group" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/cloud-messaging/cpp/device-group" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/cloud-messaging/cpp/device-group" ><span class="devsite-nav-text" tooltip>Send to device groups</span></a></li><li class="devsite-nav-item"><a href="/docs/cloud-messaging/cpp/send-with-console" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/cloud-messaging/cpp/send-with-console" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/cloud-messaging/cpp/send-with-console" ><span class="devsite-nav-text" tooltip>Send messages with the Firebase Console</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Unity</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/cloud-messaging/unity/client" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/cloud-messaging/unity/client" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/cloud-messaging/unity/client" ><span class="devsite-nav-text" tooltip>Set up a Unity client</span></a></li><li class="devsite-nav-item"><a href="/docs/cloud-messaging/unity/receive" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/cloud-messaging/unity/receive" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/cloud-messaging/unity/receive" ><span class="devsite-nav-text" tooltip>Receive messages</span></a></li><li class="devsite-nav-item"><a href="/docs/cloud-messaging/unity/topic-messaging" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/cloud-messaging/unity/topic-messaging" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/cloud-messaging/unity/topic-messaging" ><span class="devsite-nav-text" tooltip>Send messages to topics</span></a></li><li class="devsite-nav-item"><a href="/docs/cloud-messaging/unity/device-group" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/cloud-messaging/unity/device-group" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/cloud-messaging/unity/device-group" ><span class="devsite-nav-text" tooltip>Send to device groups</span></a></li><li class="devsite-nav-item"><a href="/docs/cloud-messaging/unity/upstream" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/cloud-messaging/unity/upstream" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/cloud-messaging/unity/upstream" ><span class="devsite-nav-text" tooltip>Send upstream messages</span></a></li><li class="devsite-nav-item"><a href="/docs/cloud-messaging/unity/send-with-console" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/cloud-messaging/unity/send-with-console" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/cloud-messaging/unity/send-with-console" ><span class="devsite-nav-text" tooltip>Send messages with the Firebase Console</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Web (JavaScript)</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/cloud-messaging/js/client" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/cloud-messaging/js/client" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/cloud-messaging/js/client" ><span class="devsite-nav-text" tooltip>Set up a JavaScript client</span></a></li><li class="devsite-nav-item"><a href="/docs/cloud-messaging/js/first-message" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/cloud-messaging/js/first-message" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/cloud-messaging/js/first-message" ><span class="devsite-nav-text" tooltip>Send a test message</span></a></li><li class="devsite-nav-item"><a href="/docs/cloud-messaging/js/send-multiple" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/cloud-messaging/js/send-multiple" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/cloud-messaging/js/send-multiple" ><span class="devsite-nav-text" tooltip>Send messages to multiple devices</span></a></li><li class="devsite-nav-item"><a href="/docs/cloud-messaging/js/receive" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/cloud-messaging/js/receive" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/cloud-messaging/js/receive" ><span class="devsite-nav-text" tooltip>Receive messages</span></a></li><li class="devsite-nav-item"><a href="/docs/cloud-messaging/js/topic-messaging" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/cloud-messaging/js/topic-messaging" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/cloud-messaging/js/topic-messaging" ><span class="devsite-nav-text" tooltip>Send messages to topics</span></a></li><li class="devsite-nav-item"><a href="/docs/cloud-messaging/js/device-group" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/cloud-messaging/js/device-group" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/cloud-messaging/js/device-group" ><span class="devsite-nav-text" tooltip>Send to device groups</span></a></li><li class="devsite-nav-item"><a href="/docs/cloud-messaging/js/send-with-console" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/cloud-messaging/js/send-with-console" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/cloud-messaging/js/send-with-console" ><span class="devsite-nav-text" tooltip>Send messages with the Firebase Console</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Server environments</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/cloud-messaging/server" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/cloud-messaging/server" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/cloud-messaging/server" ><span class="devsite-nav-text" tooltip>Your server environment and FCM</span></a></li><li class="devsite-nav-item"><a href="/docs/cloud-messaging/migrate-v1" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/cloud-messaging/migrate-v1" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/cloud-messaging/migrate-v1" ><span class="devsite-nav-text" tooltip>Migrate to the HTTP v1 API</span></a></li><li class="devsite-nav-item"><a href="/docs/cloud-messaging/auth-server" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/cloud-messaging/auth-server" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/cloud-messaging/auth-server" ><span class="devsite-nav-text" tooltip>Authorize send requests</span></a></li><li class="devsite-nav-item"><a href="/docs/cloud-messaging/send-message" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/cloud-messaging/send-message" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/cloud-messaging/send-message" ><span class="devsite-nav-text" tooltip>Build send requests</span></a></li><li class="devsite-nav-item"><a href="/docs/cloud-messaging/manage-topics" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/cloud-messaging/manage-topics" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/cloud-messaging/manage-topics" ><span class="devsite-nav-text" tooltip>Manage topics from the server</span></a></li></ul></div></li></ul></div></li> <li class="devsite-nav-item devsite-nav-expandable devsite-nav-accordion devsite-nav-beta"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>In-App Messaging</span><span class="devsite-nav-icon material-icons" data-icon="beta" data-title="Beta" aria-hidden="true"></span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/in-app-messaging" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/in-app-messaging" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/in-app-messaging" ><span class="devsite-nav-text" tooltip>Introduction</span></a></li><li class="devsite-nav-item"><a href="/docs/in-app-messaging/get-started" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/in-app-messaging/get-started" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/in-app-messaging/get-started" ><span class="devsite-nav-text" tooltip>Get started</span></a></li><li class="devsite-nav-item"><a href="/docs/in-app-messaging/explore-use-cases" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/in-app-messaging/explore-use-cases" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/in-app-messaging/explore-use-cases" ><span class="devsite-nav-text" tooltip>Explore use cases</span></a></li><li class="devsite-nav-item"><a href="/docs/in-app-messaging/compose-campaign" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/in-app-messaging/compose-campaign" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/in-app-messaging/compose-campaign" ><span class="devsite-nav-text" tooltip>Compose a campaign</span></a></li><li class="devsite-nav-item"><a href="/docs/in-app-messaging/modify-message-behavior" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/in-app-messaging/modify-message-behavior" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/in-app-messaging/modify-message-behavior" ><span class="devsite-nav-text" tooltip>Modify message behavior</span></a></li><li class="devsite-nav-item"><a href="/docs/in-app-messaging/customize-messages" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/in-app-messaging/customize-messages" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/in-app-messaging/customize-messages" ><span class="devsite-nav-text" tooltip>Customize messages</span></a></li></ul></div></li> <li class="devsite-nav-item devsite-nav-expandable devsite-nav-accordion"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Dynamic Links</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/dynamic-links" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/dynamic-links" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/dynamic-links" ><span class="devsite-nav-text" tooltip>Introduction</span></a></li><li class="devsite-nav-item"><a href="/docs/dynamic-links/operating-system-integrations" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/dynamic-links/operating-system-integrations" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/dynamic-links/operating-system-integrations" ><span class="devsite-nav-text" tooltip>Operating System Integrations</span></a></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Create Dynamic Links</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/dynamic-links/create-links" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/dynamic-links/create-links" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/dynamic-links/create-links" ><span class="devsite-nav-text" tooltip>Introduction</span></a></li><li class="devsite-nav-item"><a href="/docs/dynamic-links/ios/create" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/dynamic-links/ios/create" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/dynamic-links/ios/create" ><span class="devsite-nav-text" tooltip>iOS</span></a></li><li class="devsite-nav-item"><a href="/docs/dynamic-links/android/create" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/dynamic-links/android/create" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/dynamic-links/android/create" ><span class="devsite-nav-text" tooltip>Android</span></a></li><li class="devsite-nav-item"><a href="/docs/dynamic-links/flutter/create" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/dynamic-links/flutter/create" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/dynamic-links/flutter/create" ><span class="devsite-nav-text" tooltip>Flutter</span></a></li><li class="devsite-nav-item"><a href="/docs/dynamic-links/cpp/create" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/dynamic-links/cpp/create" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/dynamic-links/cpp/create" ><span class="devsite-nav-text" tooltip>C++</span></a></li><li class="devsite-nav-item"><a href="/docs/dynamic-links/unity/create" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/dynamic-links/unity/create" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/dynamic-links/unity/create" ><span class="devsite-nav-text" tooltip>Unity</span></a></li><li class="devsite-nav-item"><a href="/docs/dynamic-links/rest" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/dynamic-links/rest" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/dynamic-links/rest" ><span class="devsite-nav-text" tooltip>REST</span></a></li><li class="devsite-nav-item"><a href="/docs/dynamic-links/create-manually" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/dynamic-links/create-manually" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/dynamic-links/create-manually" ><span class="devsite-nav-text" tooltip>Manual URL Construction</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Receive Dynamic Links</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/dynamic-links/ios/receive" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/dynamic-links/ios/receive" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/dynamic-links/ios/receive" ><span class="devsite-nav-text" tooltip>iOS</span></a></li><li class="devsite-nav-item"><a href="/docs/dynamic-links/android/receive" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/dynamic-links/android/receive" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/dynamic-links/android/receive" ><span class="devsite-nav-text" tooltip>Android</span></a></li><li class="devsite-nav-item"><a href="/docs/dynamic-links/flutter/receive" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/dynamic-links/flutter/receive" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/dynamic-links/flutter/receive" ><span class="devsite-nav-text" tooltip>Flutter</span></a></li><li class="devsite-nav-item"><a href="/docs/dynamic-links/cpp/receive" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/dynamic-links/cpp/receive" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/dynamic-links/cpp/receive" ><span class="devsite-nav-text" tooltip>C++</span></a></li><li class="devsite-nav-item"><a href="/docs/dynamic-links/unity/receive" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/dynamic-links/unity/receive" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/dynamic-links/unity/receive" ><span class="devsite-nav-text" tooltip>Unity</span></a></li></ul></div></li><li class="devsite-nav-item"><a href="/docs/dynamic-links/custom-domains" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/dynamic-links/custom-domains" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/dynamic-links/custom-domains" ><span class="devsite-nav-text" tooltip>Use a Custom Domain</span></a></li><li class="devsite-nav-item"><a href="/docs/dynamic-links/allow-specific-url-patterns" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/dynamic-links/allow-specific-url-patterns" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/dynamic-links/allow-specific-url-patterns" ><span class="devsite-nav-text" tooltip>Allow specific URL patterns</span></a></li><li class="devsite-nav-item"><a href="/docs/dynamic-links/analytics" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/dynamic-links/analytics" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/dynamic-links/analytics" ><span class="devsite-nav-text" tooltip>View Analytics Data</span></a></li><li class="devsite-nav-item"><a href="/docs/dynamic-links/debug" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/dynamic-links/debug" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/dynamic-links/debug" ><span class="devsite-nav-text" tooltip>Debug Dynamic Links</span></a></li><li class="devsite-nav-item"><a href="/docs/dynamic-links/link-previews" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/dynamic-links/link-previews" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/dynamic-links/link-previews" ><span class="devsite-nav-text" tooltip>Link Previews &amp; Social Metadata</span></a></li></ul></div></li> <li class="devsite-nav-item devsite-nav-expandable devsite-nav-accordion"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Google AdMob</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/admob" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/admob" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/admob" ><span class="devsite-nav-text" tooltip>Introduction</span></a></li><li class="devsite-nav-item"><a href="/docs/admob/ios/quick-start" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/admob/ios/quick-start" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/admob/ios/quick-start" ><span class="devsite-nav-text" tooltip>Get started for iOS</span></a></li><li class="devsite-nav-item"><a href="/docs/admob/android/quick-start" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/admob/android/quick-start" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/admob/android/quick-start" ><span class="devsite-nav-text" tooltip>Get started for Android</span></a></li><li class="devsite-nav-item"><a href="/docs/admob/analytics-and-firebase" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/admob/analytics-and-firebase" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/admob/analytics-and-firebase" ><span class="devsite-nav-text" tooltip>Use Analytics and Firebase with AdMob apps</span></a></li><li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Use AdMob in a game</span> </div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>C++</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/admob/cpp/quick-start" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/admob/cpp/quick-start" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/admob/cpp/quick-start" ><span class="devsite-nav-text" tooltip>Get started</span></a></li><li class="devsite-nav-item"><a href="/docs/admob/cpp/admob-migration" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/admob/cpp/admob-migration" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/admob/cpp/admob-migration" ><span class="devsite-nav-text" tooltip>AdMob Migration Guide</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Unity</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item devsite-nav-external"><a href="//developers.google.com/admob/unity/start" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: //developers.google.com/admob/unity/start" track-type="bookNav" track-name="click" track-metadata-eventdetail="//developers.google.com/admob/unity/start" ><span class="devsite-nav-text" tooltip>Get started</span><span class="devsite-nav-icon material-icons" data-icon="external" data-title="External" aria-hidden="true"></span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Solutions</span> </div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Test adoption of new ad formats</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/tutorials/test-ad-format-adoption/solution-overview" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/tutorials/test-ad-format-adoption/solution-overview" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/tutorials/test-ad-format-adoption/solution-overview" ><span class="devsite-nav-text" tooltip>Solution overview</span></a></li><li class="devsite-nav-item"><a href="/docs/tutorials/test-ad-format-adoption" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/tutorials/test-ad-format-adoption" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/tutorials/test-ad-format-adoption" alt-paths=" /docs/tutorials/test-ad-format-adoption/step-1 /docs/tutorials/test-ad-format-adoption/step-2 /docs/tutorials/test-ad-format-adoption/step-3 /docs/tutorials/test-ad-format-adoption/step-4 /docs/tutorials/test-ad-format-adoption/step-5 "><span class="devsite-nav-text" tooltip>Solution tutorial</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Optimize ad frequency</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/tutorials/optimize-ad-frequency/solution-overview" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/tutorials/optimize-ad-frequency/solution-overview" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/tutorials/optimize-ad-frequency/solution-overview" ><span class="devsite-nav-text" tooltip>Solution overview</span></a></li><li class="devsite-nav-item"><a href="/docs/tutorials/optimize-ad-frequency" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/tutorials/optimize-ad-frequency" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/tutorials/optimize-ad-frequency" alt-paths=" /docs/tutorials/optimize-ad-frequency/step-1 /docs/tutorials/optimize-ad-frequency/step-2 /docs/tutorials/optimize-ad-frequency/step-3 /docs/tutorials/optimize-ad-frequency/step-4 /docs/tutorials/optimize-ad-frequency/step-5 "><span class="devsite-nav-text" tooltip>Solution tutorial</span></a></li></ul></div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Optimize hybrid monetization</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/tutorials/optimize-hybrid-monetization" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/tutorials/optimize-hybrid-monetization" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/tutorials/optimize-hybrid-monetization" alt-paths=" /docs/tutorials/optimize-hybrid-monetization/step-1 /docs/tutorials/optimize-hybrid-monetization/step-2 /docs/tutorials/optimize-hybrid-monetization/step-3 "><span class="devsite-nav-text" tooltip>Solution tutorial</span></a></li></ul></div></li></ul></div></li> <li class="devsite-nav-item devsite-nav-expandable devsite-nav-accordion"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Google Ads</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/ads" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/ads" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/ads" ><span class="devsite-nav-text" tooltip>Introduction</span></a></li><li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Solutions</span> </div></li><li class="devsite-nav-item devsite-nav-expandable"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>Measure iOS Ads conversions</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/docs/tutorials/ads-ios-on-device-measurement" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/tutorials/ads-ios-on-device-measurement" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/tutorials/ads-ios-on-device-measurement" alt-paths=" /docs/tutorials/ads-ios-on-device-measurement/step-1 /docs/tutorials/ads-ios-on-device-measurement/step-2 /docs/tutorials/ads-ios-on-device-measurement/step-3 /docs/tutorials/ads-ios-on-device-measurement/step-4 "><span class="devsite-nav-text" tooltip>Solution tutorial</span></a></li></ul></div></li></ul></div></li> <li class="devsite-nav-item devsite-nav-expandable devsite-nav-accordion"><div class="devsite-expandable-nav"> <a class="devsite-nav-toggle" aria-hidden="true"></a><div class="devsite-nav-title devsite-nav-title-no-path" tabindex="0" role="button"> <span class="devsite-nav-text" tooltip>App Indexing</span> </div><ul class="devsite-nav-section"><li class="devsite-nav-item devsite-nav-deprecated"><a href="/docs/app-indexing" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /docs/app-indexing" track-type="bookNav" track-name="click" track-metadata-eventdetail="/docs/app-indexing" ><span class="devsite-nav-text" tooltip>Overview</span><span class="devsite-nav-icon material-icons" data-icon="deprecated" data-title="Deprecated" aria-hidden="true"></span></a></li></ul></div></li> <li class="devsite-nav-item devsite-nav-divider devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"> <span class="devsite-nav-text" tooltip>Related products</span> </div></li> <li class="devsite-nav-item"><a href="//firebase.google.com/docs/auth/" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: //firebase.google.com/docs/auth/" track-type="bookNav" track-name="click" track-metadata-eventdetail="//firebase.google.com/docs/auth/" ><span class="devsite-nav-text" tooltip>Authentication</span></a></li> <li class="devsite-nav-item"><a href="//firebase.google.com/docs/extensions/" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: //firebase.google.com/docs/extensions/" track-type="bookNav" track-name="click" track-metadata-eventdetail="//firebase.google.com/docs/extensions/" ><span class="devsite-nav-text" tooltip>Extensions</span></a></li> </ul> <ul class="devsite-nav-list" menu="Build" aria-label="Side menu" hidden> <li class="devsite-nav-item devsite-nav-heading"> <span class="devsite-nav-title" tooltip > <span class="devsite-nav-text" tooltip > Build </span> </span> </li> <li class="devsite-nav-item"> <a href="/products-build" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Go to Build" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Go to Build </span> </a> </li> <li class="devsite-nav-item devsite-nav-heading"> <span class="devsite-nav-title" tooltip > <span class="devsite-nav-text" tooltip > Build Products </span> </span> </li> <li class="devsite-nav-item"> <a href="/products/app-check" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: App Check" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > App Check </span> </a> </li> <li class="devsite-nav-item"> <a href="/products/app-hosting" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: App Hosting" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > App Hosting </span> </a> </li> <li class="devsite-nav-item"> <a href="/products/auth" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Authentication" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Authentication </span> </a> </li> <li class="devsite-nav-item"> <a href="/products/functions" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Cloud Functions" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Cloud Functions </span> </a> </li> <li class="devsite-nav-item"> <a href="/products/storage" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Cloud Storage" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Cloud Storage </span> </a> </li> <li class="devsite-nav-item"> <a href="/products/data-connect" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Data Connect" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Data Connect </span> </a> </li> <li class="devsite-nav-item"> <a href="/products/extensions" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Extensions" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Extensions </span> </a> </li> <li class="devsite-nav-item"> <a href="/products/ml" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Firebase ML" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Firebase ML </span> </a> </li> <li class="devsite-nav-item"> <a href="/products/firestore" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Firestore" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Firestore </span> </a> </li> <li class="devsite-nav-item"> <a href="/products/genkit" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Genkit" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Genkit </span> </a> </li> <li class="devsite-nav-item"> <a href="/products/hosting" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Hosting" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Hosting </span> </a> </li> <li class="devsite-nav-item"> <a href="/products/realtime-database" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Realtime Database" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Realtime Database </span> </a> </li> <li class="devsite-nav-item"> <a href="/products/vertex-ai-in-firebase" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Vertex AI in Firebase" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Vertex AI in Firebase </span> </a> </li> <li class="devsite-nav-item"> <a href="/products/generative-ai" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Generative AI" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Generative AI </span> </a> </li> </ul> <ul class="devsite-nav-list" menu="Run" aria-label="Side menu" hidden> <li class="devsite-nav-item devsite-nav-heading"> <span class="devsite-nav-title" tooltip > <span class="devsite-nav-text" tooltip > Run </span> </span> </li> <li class="devsite-nav-item"> <a href="/products-run" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Go to Run" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Go to Run </span> </a> </li> <li class="devsite-nav-item devsite-nav-heading"> <span class="devsite-nav-title" tooltip > <span class="devsite-nav-text" tooltip > Run Products </span> </span> </li> <li class="devsite-nav-item"> <a href="/products/ab-testing" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: A/B Testing" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > A/B Testing </span> </a> </li> <li class="devsite-nav-item"> <a href="/products/app-distribution" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: App Distribution" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > App Distribution </span> </a> </li> <li class="devsite-nav-item"> <a href="/products/cloud-messaging" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Cloud Messaging" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Cloud Messaging </span> </a> </li> <li class="devsite-nav-item"> <a href="/products/crashlytics" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Crashlytics" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Crashlytics </span> </a> </li> <li class="devsite-nav-item"> <a href="/products/analytics" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Google Analytics" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Google Analytics </span> </a> </li> <li class="devsite-nav-item"> <a href="/products/in-app-messaging" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: In-App Messaging" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > In-App Messaging </span> </a> </li> <li class="devsite-nav-item"> <a href="/products/performance" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Performance Monitoring" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Performance Monitoring </span> </a> </li> <li class="devsite-nav-item"> <a href="/products/remote-config" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Remote Config" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Remote Config </span> </a> </li> <li class="devsite-nav-item"> <a href="/products/test-lab" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Test Lab" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Test Lab </span> </a> </li> </ul> <ul class="devsite-nav-list" menu="Docs" aria-label="Side menu" hidden> <li class="devsite-nav-item"> <a href="/docs" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Overview" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Overview </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/guides" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Fundamentals" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Fundamentals </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/build" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Build" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Build </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/run" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Run" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Run </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/reference" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Reference" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Reference </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/samples" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Samples" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Samples </span> </a> </li> </ul> <ul class="devsite-nav-list" menu="Community" aria-label="Side menu" hidden> <li class="devsite-nav-item"> <a href="/community/learn" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Learn" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Learn </span> </a> </li> <li class="devsite-nav-item"> <a href="/community/events" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Events" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Events </span> </a> </li> <li class="devsite-nav-item"> <a href="/community/stories" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Stories" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Stories </span> </a> </li> </ul> <ul class="devsite-nav-list" menu="Fundamentals" aria-label="Side menu" hidden> <li class="devsite-nav-item"> <a href="/docs/ios/setup" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Add Firebase - Apple platforms (iOS+)" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Add Firebase - Apple platforms (iOS+) </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/android/setup" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Add Firebase - Android" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Add Firebase - Android </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/web/setup" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Add Firebase - Web" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Add Firebase - Web </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/flutter/setup" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Add Firebase - Flutter" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Add Firebase - Flutter </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/cpp/setup" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Add Firebase - C++" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Add Firebase - C++ </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/unity/setup" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Add Firebase - Unity" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Add Firebase - Unity </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/admin/setup" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Add Firebase - Server environments" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Add Firebase - Server environments </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/projects/learn-more" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Manage Firebase projects" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Manage Firebase projects </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/libraries" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Supported platforms &amp; frameworks" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Supported platforms &amp; frameworks </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/emulator-suite" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Use Emulator Suite" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Use Emulator Suite </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/gemini-in-firebase" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: AI assistance with Gemini in Firebase" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > AI assistance with Gemini in Firebase </span> </a> </li> </ul> <ul class="devsite-nav-list" menu="Build" aria-label="Side menu" hidden> <li class="devsite-nav-item"> <a href="/docs/emulator-suite" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Emulator Suite" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Emulator Suite </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/auth" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Authentication" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Authentication </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/app-check" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: App Check" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > App Check </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/data-connect" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Data Connect" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Data Connect </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/firestore" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Firestore" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Firestore </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/database" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Realtime Database" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Realtime Database </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/storage" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Storage" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Storage </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/rules" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Security Rules" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Security Rules </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/app-hosting" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: App Hosting" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > App Hosting </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/hosting" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Hosting" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Hosting </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/functions" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Cloud Functions" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Cloud Functions </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/extensions" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Extensions" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Extensions </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/vertex-ai" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Vertex AI in Firebase" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Vertex AI in Firebase </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/genkit" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Genkit" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Genkit </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/ml" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: ML" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > ML </span> </a> </li> </ul> <ul class="devsite-nav-list" menu="Run" aria-label="Side menu" hidden> <li class="devsite-nav-item"> <a href="/docs/test-lab" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Test Lab" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Test Lab </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/app-distribution" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: App Distribution" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > App Distribution </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/crashlytics" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Crashlytics" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Crashlytics </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/perf-mon" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Performance Monitoring" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Performance Monitoring </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/remote-config" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Remote Config" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Remote Config </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/ab-testing" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: A/B Testing" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > A/B Testing </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/analytics" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Analytics" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Analytics </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/cloud-messaging" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Cloud Messaging" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Cloud Messaging </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/in-app-messaging" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: In-App Messaging" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > In-App Messaging </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/dynamic-links" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Dynamic Links" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Dynamic Links </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/admob" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Google AdMob" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Google AdMob </span> </a> </li> <li class="devsite-nav-item"> <a href="/docs/ads" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Google Ads" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Google Ads </span> </a> </li> </ul> </div> </div> </nav> </devsite-book-nav> <section id="gc-wrapper"> <main role="main" id="main-content" class="devsite-main-content" has-book-nav > <devsite-content> <article class="devsite-article"><style> /* Styles inlined from /styles/docs.css */ .center { text-align: center } /* Used in AdMob code examples */ .oldcode { opacity: .40; /* IE 8 */ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=40)"; filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=40); /* IE <= 7 */ filter:alpha(opacity=40); } .newcode { font-weight: bold; } /* Device Screenshots */ .deviceshot { max-width: 700px; max-height: 400px; } /* Start Changelog styles */ .badge { position: relative; top: -3px; border-radius: 16px; display: inline-block; width: 110px; height: 32px; line-height: 32px; margin-right: 10px; text-transform: uppercase; font-size: 13px; font-weight: 700; text-align: center; color: var(--tenant-inverted-text-color); } .checklist > ul { padding-left: 125px; } .checklist > ul > li { list-style-type: none; margin-bottom: 22px; } .changelog > ul { padding-left: 0; } .changelog > ul > li { list-style-type: none; margin-bottom: 22px; } .firebase-support-release-page .changelog > ul { list-style-type: none; padding-left: 125px; } .firebase-release-roundup .changelog > ul { list-style-type: disc outside; padding-left: 40px; } .firebase-release-roundup .changelog > ul > li { list-style-type: disc outside; margin-bottom: 12px; } .generic-android::before, .generic-ios::before, .generic-mobile::before, .generic-web::before, .generic-flutter::before, .generic-unity::before, .generic-cpp::before, .generic-all::before, .release-changed::before, .release-deprecated::before, .release-feature::before, .release-fixed::before, .release-important::before, .release-issue::before, .release-removed::before, .release-unchanged::before, .release-android::before, .release-android-bom::before, .release-ios::before, .release-javascript::before, .release-flutter::before, .release-unity::before, .release-cpp::before, .release-admin::before, .release-functions::before, .release-cli::before, .release-rules::before { display: block; float: left; width: 110px; height: 32px; margin-left: -125px; margin-right: 10px; border-radius: 16px; text-transform: uppercase; font-size: 13px; font-weight: 700; text-align: center; color: var(--tenant-inverted-text-color); } .generic-android::before { content: "Android"; color: var(--tenant-secondary-text-color); border: 5px solid; border-color: #839e2e; } .generic-ios::before { text-transform: none; content: "iOS+"; color: var(--tenant-secondary-text-color); border: 5px solid; border-color: #003fdd; } .generic-mobile::before { content: "Mobile"; color: var(--tenant-secondary-text-color); border: 5px solid; border-color: #f4b400; } .generic-web::before { content: "Web"; color: var(--tenant-secondary-text-color); border: 5px solid; border-color: #7e57c2; } .generic-flutter::before { content: "Flutter"; color: var(--tenant-secondary-text-color); border: 5px solid; border-color: #29b6f6; } .generic-unity::before { content: "Unity"; color: var(--tenant-secondary-text-color); border: 5px solid; border-color: #7f6545; } .generic-cpp::before { content: "C++"; color: var(--tenant-secondary-text-color); border: 5px solid; border-color: #ff8c00; } .generic-all::before { content: "All"; color: var(--tenant-secondary-text-color); border: 5px solid; border-color: #ccc; } .release-changed::before { content: "changed"; background-color: #ff6961; padding-top: 4px; } .release-deprecated::before { content: "deprecated"; background-color: #d70015; padding-top: 4px; } .release-feature::before { content: "feature"; background-color: #0f9d58; padding-top: 4px; } .release-fixed::before { content: "fixed"; background-color: #4285f4; padding-top: 4px; } .release-important::before { content: "important"; background-color: #d70015; padding-top: 4px; } .release-issue::before { content: "issue"; background-color: #d70015; padding-top: 4px; } .release-removed::before { content: "removed"; background-color: #546e7a; padding-top: 4px; } .release-unchanged::before { content: "no change"; background-color: #ccc; padding-top: 4px; } .release-android::before { content: "Android"; color: var(--tenant-secondary-text-color); border: 5px solid; border-color: #839e2e; } .release-android-bom::before { content: "Android BoM"; color: var(--tenant-secondary-text-color); border: 5px solid; border-color: #839e2e; } .release-ios::before { text-transform: none; content: "iOS+"; color: var(--tenant-secondary-text-color); border: 5px solid; border-color: #003fdd; } .release-javascript::before { content: "JavaScript"; color: var(--tenant-secondary-text-color); border: 5px solid; border-color: #7e57c2; } .release-flutter::before { content: "Flutter"; color: var(--tenant-secondary-text-color); border: 5px solid; border-color: #29b6f6; } .release-unity::before { content: "Unity"; color: var(--tenant-secondary-text-color); border: 5px solid; border-color: #7f6545; } .release-cpp::before { content: "C++"; color: var(--tenant-secondary-text-color); border: 5px solid; border-color: #ff8c00; } .release-admin::before { content: "Admin"; color: var(--tenant-secondary-text-color); border: 5px solid; border-color: #909090; } .release-functions::before { content: "Functions"; color: var(--tenant-secondary-text-color); border: 5px solid; border-color: #2c384a; } .release-cli::before { text-transform: none; content: "CLI"; color: var(--tenant-secondary-text-color); border: 5px solid; border-color: #f4b400; } .release-rules::before { content: "Rules"; color: var(--tenant-secondary-text-color); border: 5px solid; border-color: #002991; } /* End Changelog styles */ /* Docs Overview page styles */ .docs-android, .docs-ios, .docs-web, .docs-cpp, .docs-unity { height: 64px; width: 64px; margin: 10px 16px 0 -16px; } .firebase-docs-overview .devsite-landing-row h2 { margin: 80px 0 -40px; } .devsite-landing-row-3-up .docs-landing-row-item { width: calc((100% - 80px)/2); display: inline-block; } .docs-landing-icon { font-size: 48px; height: 48px; margin: 11px; width: 48px; } .firebase-reference-list { display: -ms-flex; display: flex; -ms-flex-wrap: wrap; flex-wrap: wrap; list-style: none; margin: 0 0 40px; padding: 0; } .firebase-reference-list-item { -ms-flex: 0 0 50%; flex: 0 0 50%; margin: 40px 0 0; padding: 0; } .firebase-reference-list-item > a { -ms-flex-align: center; align-items: center; display: -ms-flex; display: flex; } .firebase-reference-list-item > a:not(:hover) h3 { color: var(--tenant-primary-text-color); } .firebase-reference-list-item > a:not(:hover) li, .firebase-reference-list-item > a:not(:hover) p { color: var(--tenant-secondary-text-color); } .firebase-reference-list-item .docs-landing-icon { -ms-flex-align: center; align-items: center; background-color: var(--tenant-docs-landing-icon-background, #f5f5f5); border-radius: 50%; -ms-flex: 0 0 88px; flex: 0 0 88px; height: 88px; -ms-justify-content: center; justify-content: center; margin: 0 16px 0 0; padding: 20px; } .firebase-reference-list-item h3 { -ms-flex: 0 0 auto; flex: 0 0 auto; font-size: 18px; line-height: 28px; margin: 0; } .firebase-reference-list-item ul { list-style: none; padding: 0; } .docs-android, .docs-ios, .docs-web, .docs-cpp, .docs-unity { height: 88px; width: auto; } .firebase-reference-list-item.docs-android .docs-landing-icon { color: #00bfa5; } .firebase-reference-list-item.docs-cpp .docs-landing-icon { color: #fd8c09; } .firebase-reference-list-item.docs-ios .docs-landing-icon { color: #16aaca; } .firebase-reference-list-item.docs-unity .docs-landing-icon { color: #000; } .firebase-reference-list-item.docs-web .docs-landing-icon { color: #c52062; } .firebase-reference-list-item.docs-http .docs-landing-icon { color: #3f51b5; } @media (max-width: 1000px) { .firebase-reference-list { -ms-flex-direction: column; flex-direction: column; } } /* end Docs Overview page styles */ /* Full-page platform selector for Crashlytics docs */ /* Note: h3 in selector content must include hide-from-toc */ .full-page-selector, .full-page-selector-content { border: none; font-size: inherit; } .full-page-selector > .kd-buttonbar { margin: 32px 0; } .full-page-selector > section { display: none; } .full-page-selector-content > .selected { padding: 0; font-size: inherit; } .full-page-selector-content > .kd-buttonbar { display: none; } .select-page { display: none; } .select-page + .ds-selector-tabs, .after-selection ~ .ds-selector-tabs { border: none; font-size: inherit; } .select-page + .ds-selector-tabs > .kd-buttonbar { margin: 32px 0; } .select-page + .ds-selector-tabs > section { display: none; } .after-selection ~ .ds-selector-tabs > .selected { padding: 0; font-size: inherit; } .after-selection ~ .ds-selector-tabs > section p { line-height: 24px; } .after-selection ~ .ds-selector-tabs > .kd-buttonbar { display: none; } /* End full-page platform selector */ /* Custom beta and alpha indicators */ .devsite-nav-icon[data-icon="alpha"]::before { content: url(data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='18' height='18' viewBox='0 0 18 18'><path d='M13.2,15c-0.3-0.9-0.6-1.7-0.9-2.6L12.1,12c0-0.1-0.1-0.3-0.1-0.4c-1.2,2.1-2.4,2.9-4.5,2.9C4.8,14.5,3,12.6,3,9s1.8-5.5,4.5-5.5c2.1,0,3.4,0.8,4.5,2.9L12.1,6l0.1-0.4c0.4-1.1,0.7-1.9,0.9-2.6h2.2c-0.4,0.8-0.7,1.7-1.2,3.2L14,6.6c-0.3,0.8-0.5,1.6-0.8,2.4c0.3,0.7,0.6,1.5,0.8,2.4l0.1,0.4c0.5,1.5,0.8,2.4,1.2,3.2C15.4,15,13.2,15,13.2,15z M7.5,5.5C5.9,5.5,5,6.5,5,9s0.9,3.5,2.5,3.5C9,12.5,9.9,11.6,11,9C9.9,6.4,9,5.5,7.5,5.5z' fill='%2354617d'/></svg>); } .color-scheme--dark .devsite-nav-icon[data-icon="alpha"]::before { content: url(data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='18' height='18' viewBox='0 0 18 18'><path d='M13.2,15c-0.3-0.9-0.6-1.7-0.9-2.6L12.1,12c0-0.1-0.1-0.3-0.1-0.4c-1.2,2.1-2.4,2.9-4.5,2.9C4.8,14.5,3,12.6,3,9s1.8-5.5,4.5-5.5c2.1,0,3.4,0.8,4.5,2.9L12.1,6l0.1-0.4c0.4-1.1,0.7-1.9,0.9-2.6h2.2c-0.4,0.8-0.7,1.7-1.2,3.2L14,6.6c-0.3,0.8-0.5,1.6-0.8,2.4c0.3,0.7,0.6,1.5,0.8,2.4l0.1,0.4c0.5,1.5,0.8,2.4,1.2,3.2C15.4,15,13.2,15,13.2,15z M7.5,5.5C5.9,5.5,5,6.5,5,9s0.9,3.5,2.5,3.5C9,12.5,9.9,11.6,11,9C9.9,6.4,9,5.5,7.5,5.5z' fill='%239eabc3'/></svg>); } .devsite-nav-icon[data-icon="beta"]::before { content: url(data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='18' height='18' viewBox='0 0 18 18'><path d='M12.2,7.7c1.8,1.2,2.3,3.7,1.1,5.6c-0.7,1.1-2,1.8-3.3,1.8H7v2H5V4c0-1.1,0.9-2,2-2h2.5C11.4,2,13,3.6,13,5.5C13,6.3,12.7,7.1,12.2,7.7z M7,13h3c1.1,0,2-0.9,2-2s-0.9-2-2-2H7V13z M7,7h2.5C10.3,7,11,6.3,11,5.5S10.3,4,9.5,4H7V7z' fill='%2354617d'/></svg>); } .color-scheme--dark .devsite-nav-icon[data-icon="beta"]::before { content: url(data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='18' height='18' viewBox='0 0 18 18'><path d='M12.2,7.7c1.8,1.2,2.3,3.7,1.1,5.6c-0.7,1.1-2,1.8-3.3,1.8H7v2H5V4c0-1.1,0.9-2,2-2h2.5C11.4,2,13,3.6,13,5.5C13,6.3,12.7,7.1,12.2,7.7z M7,13h3c1.1,0,2-0.9,2-2s-0.9-2-2-2H7V13z M7,7h2.5C10.3,7,11,6.3,11,5.5S10.3,4,9.5,4H7V7z' fill='%239eabc3'/></svg>); } .firebase-platform-label { font: 500 12px/24px Roboto,sans-serif; } /* Full-page platform selector dropdown */ /* Note: use menu variables in _elements.html file */ .full-page-selector-dropdown { border: none; position: relative; float: left; display: inline-block; } .full-page-selector-dropdown > .ds-selector-tabs { display: none; position: absolute; min-width: 160px; z-index: 1; } .full-page-selector-dropdown:hover .ds-selector-tabs { display: block; margin: 0; } .full-page-selector-dropdown:hover .kd-tabbutton { display: block; border: none; height: inherit; text-align: left; } .full-page-selector-dropdown:hover .kd-buttonbar { border: none; height: inherit; } .full-page-selector-dropdown h3:hover { color: var(--tenant-inverted-text-color); background-color: #039be5; } .full-page-selector-dropdown:hover .devsite-overflow-menu-button { display: none; } img.white-bg { padding: 5px; border-radius: 2px; background-color: #fff; } </style> <div class="devsite-banner devsite-banner-announcement nocontent" > <div class="devsite-banner-message"> <div class="devsite-banner-message-text"> <style> .devsite-banner-announcement a:link:not(.button), .devsite-banner-announcement a:visited:not(.button) { background: 0; } .devsite-banner-announcement a:hover, .devsite-banner-announcement a:focus { text-decoration: none; } .devsite-banner-announcement .devsite-banner-message-text { margin: 0 auto; } </style> Firebase is back at Cloud Next on April 9 - 11. <a href="https://cloud.withgoogle.com/next/25?utm_source=firebase&utm_medium=&utm_campaign=svd_firesite_banner&utm_content=">Register now.</a> </div> </div> </div> <div class="devsite-article-meta nocontent" role="navigation"> <ul class="devsite-breadcrumb-list" aria-label="Breadcrumb"> <li class="devsite-breadcrumb-item "> <a href="https://firebase.google.com/" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Breadcrumbs" data-value="1" track-type="globalNav" track-name="breadcrumb" track-metadata-position="1" track-metadata-eventdetail="Firebase" > Firebase </a> </li> <li class="devsite-breadcrumb-item "> <div class="devsite-breadcrumb-guillemet material-icons" aria-hidden="true"></div> <a href="https://firebase.google.com/docs" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Breadcrumbs" data-value="2" track-type="globalNav" track-name="breadcrumb" track-metadata-position="2" track-metadata-eventdetail="Firebase Documentation" > Documentation </a> </li> <li class="devsite-breadcrumb-item "> <div class="devsite-breadcrumb-guillemet material-icons" aria-hidden="true"></div> <a href="https://firebase.google.com/docs/cloud-messaging" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Breadcrumbs" data-value="3" track-type="globalNav" track-name="breadcrumb" track-metadata-position="3" track-metadata-eventdetail="Firebase Cloud Messaging" > FCM </a> </li> <li class="devsite-breadcrumb-item "> <div class="devsite-breadcrumb-guillemet material-icons" aria-hidden="true"></div> <a href="https://firebase.google.com/docs/run" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Breadcrumbs" data-value="4" track-type="globalNav" track-name="breadcrumb" track-metadata-position="4" track-metadata-eventdetail="" > Run </a> </li> </ul> <devsite-thumb-rating position="header"> </devsite-thumb-rating> </div> <devsite-feedback position="header" project-name="Firebase Cloud Messaging" product-id="719752" bucket="" context="" version="t-devsite-webserver-20250211-r00-rc00.466928320959134316" data-label="Send Feedback Button" track-type="feedback" track-name="sendFeedbackLink" track-metadata-position="header" class="nocontent" project-feedback-url="https://firebase.google.com/support/troubleshooter/fcm" project-icon="https://www.gstatic.com/devrel-devsite/prod/v38a693baeb774512feb42f10aac8f755d8791ed41119b5be7a531f8e16f8279f/firebase/images/touchicon-180.png" project-support-url="https://firebase.google.com/support/" > <button> Send feedback </button> </devsite-feedback> <h1 class="devsite-page-title" tabindex="-1"> Authorize send requests </h1> <devsite-feature-tooltip ack-key="AckCollectionsBookmarkTooltipDismiss" analytics-category="Site-Wide Custom Events" analytics-action-show="Callout Profile displayed" analytics-action-close="Callout Profile dismissed" analytics-label="Create Collection Callout" class="devsite-page-bookmark-tooltip nocontent" dismiss-button="true" id="devsite-collections-dropdown" dismiss-button-text="Dismiss" close-button-text="Got it"> <devsite-bookmark></devsite-bookmark> <span slot="popout-heading"> Stay organized with collections </span> <span slot="popout-contents"> Save and categorize content based on your preferences. </span> </devsite-feature-tooltip> <div class="devsite-page-title-meta"><devsite-view-release-notes></devsite-view-release-notes></div> <devsite-toc class="devsite-nav" depth="2" devsite-toc-embedded > </devsite-toc> <div class="devsite-article-body clearfix "> <!-- iOS --> <!-- Android --> <!-- Unity --> <!-- Web --> <p></p> <p> </p> <p>Requests sent to <span class="notranslate">FCM</span> from your app server or trusted environment must be authorized. Note these important differences between the deprecated legacy HTTP API and HTTP v1 API authorization:</p> <ul> <li>The <span class="notranslate">FCM</span> HTTP v1 API authorizes requests with a short-lived OAuth 2.0 access token. To mint this token, you can use Google Application Default Credentials (in Google server environments) and/or manually obtain the required credentials from a JSON private key file generated for a service account. If you are using the <span class="notranslate"><span class="notranslate">Firebase</span> Admin SDK</span> to send messages, the library handles the token for you.</li> <li>The deprecated legacy protocols can use only long-lived API keys obtained from the <span class="notranslate">Firebase</span> console.</li> </ul> <aside class="caution"><strong>Caution:</strong><span> Always make sure to use the right kind of credential. An API key will only work to authorize requests to the deprecated legacy API.</span></aside> <h2 id="authorize-http-v1-send-requests" data-text="Authorize HTTP v1 send requests" tabindex="-1">Authorize HTTP v1 send requests</h2> <p>Depending on the details of your server environment, use a combination of these strategies to authorize server requests to Firebase services:</p> <ul> <li>Google Application Default Credentials (ADC)</li> <li>A service account JSON file</li> <li>A short-lived OAuth 2.0 access token derived from a service account</li> </ul> <p><strong>If your application is running on <span class="notranslate">Compute Engine</span>, <span class="notranslate">Google Kubernetes Engine</span>, <span class="notranslate">App Engine</span>, or Cloud Functions</strong> (including <span class="notranslate">Cloud Functions for Firebase</span>), use Application Default Credentials (ADC). ADC uses your existing default service account to obtain credentials to authorize requests, and ADC enables flexible local testing via the environment variable <var translate="no">GOOGLE_APPLICATION_CREDENTIALS</var>. For the fullest automation of the authorization flow, use ADC together with Admin SDK server libraries.</p> <p><strong>If your application is running on a non-Google server environment</strong>, you&#39;ll need to download a service account JSON file from your Firebase project. As long as you have access to a file system containing the private key file, you can use the environment variable <var translate="no">GOOGLE_APPLICATION_CREDENTIALS</var> to authorize requests with these manually obtained credentials. If you lack such file access, you must reference the service account file in your code&mdash; which should be done with extreme care due to the risk of exposing your credentials.</p> <h3 id="provide-credentials-using-adc" data-text="Provide credentials using ADC" tabindex="-1">Provide credentials using ADC</h3> <p>Google Application Default Credentials (ADC) checks for your credentials in the following order:</p> <ol> <li><p>ADC checks whether the environment variable <var translate="no">GOOGLE_APPLICATION_CREDENTIALS</var> is set. If the variable is set, ADC uses the service account file that the variable points to.</p></li> <li><p>If the environment variable isn&#39;t set, ADC uses the default service account that <span class="notranslate">Compute Engine</span>, <span class="notranslate">Google Kubernetes Engine</span>, <span class="notranslate">App Engine</span>, and Cloud Functions provide for applications that run on those services.</p></li> <li><p>If ADC can&#39;t use either of the above credentials, the system throws an error.</p></li> </ol> <p>The following Admin SDK code example illustrates this strategy. The example doesn&#39;t explicitly specify the application credentials. However, ADC is able to implicitly find the credentials as long as the environment variable is set, or as long as the application is running on <span class="notranslate">Compute Engine</span>, <span class="notranslate">Google Kubernetes Engine</span>, <span class="notranslate">App Engine</span>, or Cloud Functions.</p> <div class="ds-selector-tabs" data-ds-scope="code-sample"> <section><h3 id="node.js" data-text="Node.js" tabindex="-1">Node.js</h3><div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="JavaScript"><code translate="no" dir="ltr"><span class="devsite-syntax-nx">admin</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">initializeApp</span><span class="devsite-syntax-p">({</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">credential</span><span class="devsite-syntax-o">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">admin</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">credential</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">applicationDefault</span><span class="devsite-syntax-p">(),</span> <span class="devsite-syntax-p">});</span> </code></pre></devsite-code></section> <section><h3 id="java" data-text="Java" tabindex="-1">Java</h3><div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Java"><code translate="no" dir="ltr"><span class="devsite-syntax-n">FirebaseOptions</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">options</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">FirebaseOptions</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">builder</span><span class="devsite-syntax-p">()</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">setCredentials</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">GoogleCredentials</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">getApplicationDefault</span><span class="devsite-syntax-p">())</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">setDatabaseUrl</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"https://&lt;DATABASE_NAME&gt;.firebaseio.com/"</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">build</span><span class="devsite-syntax-p">();</span> <span class="devsite-syntax-n">FirebaseApp</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">initializeApp</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">options</span><span class="devsite-syntax-p">);</span> </code></pre></devsite-code></section> <section><h3 id="python" data-text="Python" tabindex="-1">Python</h3><div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Python"><code translate="no" dir="ltr"><span class="devsite-syntax-n">default_app</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">firebase_admin</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">initialize_app</span><span class="devsite-syntax-p">()</span> </code></pre></devsite-code></section> <section><h3 id="go" data-text="Go" tabindex="-1">Go</h3><div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Go"><code translate="no" dir="ltr"><span class="devsite-syntax-nx">app</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">err</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">:=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">firebase</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">NewApp</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-nx">context</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">Background</span><span class="devsite-syntax-p">(),</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-kc">nil</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-k">if</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">err</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">!=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-kc">nil</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">log</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">Fatalf</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"error initializing app: %v\n"</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">err</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-p">}</span><div class="devsite-github-link nocode no-select"><a target="_top" href="https://github.com/firebase/firebase-admin-go/blob/570427a0f270b9adb061f54187a2b033548c3c9e/snippets/init.go#L60-L63" class="gc-analytics-event" data-category="github_link" data-label="firebase/firebase-admin-go/snippets/init.go#initialize_app_default_golang" data-code-snippet="true" data-github-path="firebase/firebase-admin-go/snippets/init.go" data-region-tag="initialize_app_default_golang"><span class="devsite-syntax-nx">init</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-k">go</span></a></div> </code></pre></devsite-code></section> <section><h3 id="c" data-text="C#" tabindex="-1">C#</h3><div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="C#"><code translate="no" dir="ltr"><span class="devsite-syntax-n">FirebaseApp</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">Create</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-k">new</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">AppOptions</span><span class="devsite-syntax-p">()</span> <span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Credential</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">GoogleCredential</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">GetApplicationDefault</span><span class="devsite-syntax-p">(),</span> <span class="devsite-syntax-p">});</span> </code></pre></devsite-code></section> </div> <h3 id="provide-credentials-manually" data-text="Provide credentials manually" tabindex="-1">Provide credentials manually</h3> <p>Firebase projects support Google <a href="//console.firebase.google.com/project/_/settings/serviceaccounts/adminsdk">service accounts</a>, which you can use to call Firebase server APIs from your app server or trusted environment. If you&#39;re developing code locally or deploying your application on-premises, you can use credentials obtained via this service account to authorize server requests.</p> <p>To authenticate a service account and authorize it to access Firebase services, you must generate a private key file in JSON format.</p> <p><strong>To generate a private key file for your service account:</strong></p> <ol> <li><p>In the <span class="notranslate">Firebase</span> console, open <strong>Settings &gt; <a href="//console.firebase.google.com/project/_/settings/serviceaccounts/adminsdk">Service Accounts</a></strong>.</p></li> <li><p>Click <strong>Generate New Private Key</strong>, then confirm by clicking <strong>Generate Key</strong>.</p></li> <li><p>Securely store the JSON file containing the key.</p></li> </ol> <p>When authorizing via a service account, you have two choices for providing the credentials to your application. You can either set the <var translate="no">GOOGLE_APPLICATION_CREDENTIALS</var> environment variable, or you can explicitly pass the path to the service account key in code. The first option is more secure and is strongly recommended.</p> <p><strong>To set the environment variable:</strong></p> <p>Set the environment variable <var translate="no">GOOGLE_APPLICATION_CREDENTIALS</var> to the file path of the JSON file that contains your service account key. This variable only applies to your current shell session, so if you open a new session, set the variable again.</p> <div class="ds-selector-tabs" data-ds-scope="code-sample"> <section><h3 id="linux-or-macos" data-text="Linux or macOS" tabindex="-1">Linux or macOS</h3><div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="GDScript"><code translate="no" dir="ltr"><span class="devsite-syntax-k">export</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">GOOGLE_APPLICATION_CREDENTIALS</span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-s2">"/home/user/Downloads/service-account-file.json"</span> </code></pre></devsite-code></section> <section><h3 id="windows" data-text="Windows" tabindex="-1">Windows</h3><p>With PowerShell:</p> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="GDScript"><code translate="no" dir="ltr"><span class="devsite-syntax-o">$</span><span class="devsite-syntax-n">env</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-n">GOOGLE_APPLICATION_CREDENTIALS</span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-s2">"C:\Users\username\Downloads\service-account-file.json"</span> </code></pre></devsite-code></section> </div> <p>After you&#39;ve completed the above steps, Application Default Credentials (ADC) is able to implicitly determine your credentials, allowing you to use service account credentials when testing or running in non-Google environments.</p> <h3 id="use-credentials-to-mint-access-tokens" data-text="Use credentials to mint access tokens" tabindex="-1">Use credentials to mint access tokens</h3> <p>Unless you are using the <a href="/docs/cloud-messaging/server#firebase-admin-sdk-for-fcm">Admin SDK</a>, which handle authorization automatically, you&#39;ll need to mint the access token and add it to send requests.</p> <p>Use your Firebase credentials together with the <a href="https://github.com/googleapis?q=auth">Google Auth Library</a> for your preferred language to retrieve a short-lived OAuth 2.0 access token:</p> <div class="ds-selector-tabs" data-ds-scope="code-sample"> <section><h3 id="node.js_1" data-text="node.js" tabindex="-1">node.js</h3><div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="JavaScript"><code translate="no" dir="ltr"><span class="devsite-syntax-w"> </span><span class="devsite-syntax-kd">function</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">getAccessToken</span><span class="devsite-syntax-p">()</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">return</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-ow">new</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nb">Promise</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-kd">function</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-nx">resolve</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">reject</span><span class="devsite-syntax-p">)</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-kd">const</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">key</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">require</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s1">'../placeholders/service-account.json'</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-kd">const</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">jwtClient</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-ow">new</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">google</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">auth</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">JWT</span><span class="devsite-syntax-p">(</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">key</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">client_email</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-kc">null</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">key</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">private_key</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">SCOPES</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-kc">null</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">jwtClient</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">authorize</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-kd">function</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-nx">err</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">tokens</span><span class="devsite-syntax-p">)</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">if</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-nx">err</span><span class="devsite-syntax-p">)</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">reject</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-nx">err</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">return</span><span class="devsite-syntax-p">;</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">}</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">resolve</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-nx">tokens</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">access_token</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">});</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">});</span> <span class="devsite-syntax-p">}</span><div class="devsite-github-link nocode no-select"><a target="_top" href="https://github.com/firebase/quickstart-nodejs/blob/55f2ff5c17c730f7fc352f51a5264011de92fed0/messaging/index.js#L22-L40" class="gc-analytics-event" data-category="github_link" data-label="firebase/quickstart-nodejs/messaging/index.js#retrieve_access_token" data-code-snippet="true" data-github-path="firebase/quickstart-nodejs/messaging/index.js" data-region-tag="retrieve_access_token"><span class="devsite-syntax-nx">index</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">js</span></a></div> </code></pre></devsite-code> <p>In this example, the Google API client library authenticates the request with a JSON web token, or JWT. For more information, see <a href="//github.com/googleapis/google-auth-library-nodejs/blob/d8c70b9d858e1ef07cb8ef2b5d5d560ac2b2600a/README.md#json-web-tokens">JSON web tokens</a>.</p></section> <section><h3 id="python_1" data-text="Python" tabindex="-1">Python</h3><div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Python"><code translate="no" dir="ltr"><span class="devsite-syntax-k">def</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nf">_get_access_token</span><span class="devsite-syntax-p">():</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-sd">"""Retrieve a valid access token that can be used to authorize requests.</span> <span class="devsite-syntax-sd"> :return: Access token.</span> <span class="devsite-syntax-sd"> """</span> <span class="devsite-syntax-n">credentials</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">service_account</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">Credentials</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">from_service_account_file</span><span class="devsite-syntax-p">(</span> <span class="devsite-syntax-s1">'service-account.json'</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-n">scopes</span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-n">SCOPES</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-n">request</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-n">google</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">auth</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">transport</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">requests</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">Request</span><span class="devsite-syntax-p">()</span> <span class="devsite-syntax-n">credentials</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">refresh</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">request</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-k">return</span> <span class="devsite-syntax-n">credentials</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">token<div class="devsite-github-link nocode no-select"><a target="_top" href="https://github.com/firebase/quickstart-python/blob/2c68e7c5020f4dbb072cca4da03dba389fbbe4ec/messaging/messaging.py#L26-L35" class="gc-analytics-event" data-category="github_link" data-label="firebase/quickstart-python/messaging/messaging.py#retrieve_access_token" data-code-snippet="true" data-github-path="firebase/quickstart-python/messaging/messaging.py" data-region-tag="retrieve_access_token">messaging</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">py</span></a></div> </code></pre></devsite-code></section> <section><h3 id="java_1" data-text="Java" tabindex="-1">Java</h3><div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Java"><code translate="no" dir="ltr"><span class="devsite-syntax-kd">private</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-kd">static</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">String</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nf">getAccessToken</span><span class="devsite-syntax-p">()</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-kd">throws</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">IOException</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">GoogleCredentials</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">googleCredentials</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">GoogleCredentials</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">fromStream</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-k">new</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">FileInputStream</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"service-account.json"</span><span class="devsite-syntax-p">))</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">createScoped</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">Arrays</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">asList</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">SCOPES</span><span class="devsite-syntax-p">));</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">googleCredentials</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">refresh</span><span class="devsite-syntax-p">();</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">return</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">googleCredentials</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">getAccessToken</span><span class="devsite-syntax-p">().</span><span class="devsite-syntax-na">getTokenValue</span><span class="devsite-syntax-p">();</span> <span class="devsite-syntax-p">}</span><div class="devsite-github-link nocode no-select"><a target="_top" href="https://github.com/firebase/quickstart-java/blob/254dd24fbc89e6b49e6c84ecbbcc1ba31975392c/messaging/src/main/java/com/google/firebase/quickstart/Messaging.java#L56-L62" class="gc-analytics-event" data-category="github_link" data-label="firebase/quickstart-java/messaging/src/main/java/com/google/firebase/quickstart/Messaging.java#retrieve_access_token" data-code-snippet="true" data-github-path="firebase/quickstart-java/messaging/src/main/java/com/google/firebase/quickstart/Messaging.java" data-region-tag="retrieve_access_token"><span class="devsite-syntax-n">Messaging</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">java</span></a></div> </code></pre></devsite-code></section> </div> <p>After your access token expires, the token refresh method is called automatically to retrieve an updated access token.</p> <p>To authorize access to <span class="notranslate">FCM</span>, request the scope <code translate="no" dir="ltr">https://www.googleapis.com/auth/firebase.messaging</code>.</p> <p><strong>To add the access token to an HTTP request header:</strong></p> <p>Add the token as the value of the <code translate="no" dir="ltr">Authorization</code> header in the format <code translate="no" dir="ltr">Authorization: Bearer &lt;access_token&gt;</code>:</p> <div class="ds-selector-tabs" data-ds-scope="code-sample"> <section><h3 id="node.js_2" data-text="node.js" tabindex="-1">node.js</h3><div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="JavaScript"><code translate="no" dir="ltr"><span class="devsite-syntax-nx">headers</span><span class="devsite-syntax-o">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-s1">'Authorization'</span><span class="devsite-syntax-o">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s1">'Bearer '</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">+</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">accessToken</span> <span class="devsite-syntax-p">}</span><div class="devsite-github-link nocode no-select"><a target="_top" href="https://github.com/firebase/quickstart-nodejs/blob/55f2ff5c17c730f7fc352f51a5264011de92fed0/messaging/index.js#L55-L57" class="gc-analytics-event" data-category="github_link" data-label="firebase/quickstart-nodejs/messaging/index.js#use_access_token" data-code-snippet="true" data-github-path="firebase/quickstart-nodejs/messaging/index.js" data-region-tag="use_access_token"><span class="devsite-syntax-nx">index</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">js</span></a></div> </code></pre></devsite-code></section> <section><h3 id="python_2" data-text="Python" tabindex="-1">Python</h3><div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Python"><code translate="no" dir="ltr"><span class="devsite-syntax-n">headers</span> <span class="devsite-syntax-o">=</span> <span class="devsite-syntax-p">{</span> <span class="devsite-syntax-s1">'Authorization'</span><span class="devsite-syntax-p">:</span> <span class="devsite-syntax-s1">'Bearer '</span> <span class="devsite-syntax-o">+</span> <span class="devsite-syntax-n">_get_access_token</span><span class="devsite-syntax-p">(),</span> <span class="devsite-syntax-s1">'Content-Type'</span><span class="devsite-syntax-p">:</span> <span class="devsite-syntax-s1">'application/json; UTF-8'</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-p">}</span><div class="devsite-github-link nocode no-select"><a target="_top" href="https://github.com/firebase/quickstart-python/blob/2c68e7c5020f4dbb072cca4da03dba389fbbe4ec/messaging/messaging.py#L45-L48" class="gc-analytics-event" data-category="github_link" data-label="firebase/quickstart-python/messaging/messaging.py#use_access_token" data-code-snippet="true" data-github-path="firebase/quickstart-python/messaging/messaging.py" data-region-tag="use_access_token"><span class="devsite-syntax-n">messaging</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">py</span></a></div> </code></pre></devsite-code></section> <section><h3 id="java_2" data-text="Java" tabindex="-1">Java</h3><div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Java"><code translate="no" dir="ltr"><span class="devsite-syntax-n">URL</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">url</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">new</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">URL</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">BASE_URL</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">+</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">FCM_SEND_ENDPOINT</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-n">HttpURLConnection</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">httpURLConnection</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">HttpURLConnection</span><span class="devsite-syntax-p">)</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">url</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">openConnection</span><span class="devsite-syntax-p">();</span> <span class="devsite-syntax-n">httpURLConnection</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">setRequestProperty</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"Authorization"</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"Bearer "</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">+</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">getServiceAccountAccessToken</span><span class="devsite-syntax-p">());</span> <span class="devsite-syntax-n">httpURLConnection</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">setRequestProperty</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s">"Content-Type"</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"application/json; UTF-8"</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-k">return</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">httpURLConnection</span><span class="devsite-syntax-p">;</span><div class="devsite-github-link nocode no-select"><a target="_top" href="https://github.com/firebase/snippets-java/blob/7051da2745f8f95b176c9c6347e0bb0db3de1112/admin/src/main/java/com/google/firebase/example/FirebaseMessagingSnippets.java#L243-L247" class="gc-analytics-event" data-category="github_link" data-label="firebase/snippets-java/admin/src/main/java/com/google/firebase/example/FirebaseMessagingSnippets.java#use_access_token" data-code-snippet="true" data-github-path="firebase/snippets-java/admin/src/main/java/com/google/firebase/example/FirebaseMessagingSnippets.java" data-region-tag="use_access_token"><span class="devsite-syntax-n">FirebaseMessagingSnippets</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-na">java</span></a></div> </code></pre></devsite-code></section> </div> <h2 id="authorize-legacy-protocol-send-requests" data-text="Authorize legacy protocol send requests" tabindex="-1">Authorize legacy protocol send requests</h2> <aside class="caution"><strong>Caution:</strong><span> Sending messages (including upstream messages) with the <span class="notranslate">FCM</span> XMPP and HTTP legacy APIs was deprecated on June 20, 2023, and <a href="/support/faq#deprecated-api-shutdown"><strong>will be removed starting June 2024</strong></a>. If you are using the legacy <span class="notranslate">FCM</span> send APIs, we strongly recommend that you <a href="/docs/cloud-messaging/migrate-v1">migrate to the HTTP v1 API</a> or consider using the <a href="/docs/cloud-messaging/server#choosing-a-server-option">Admin SDK</a> to build send requests.</span></aside> <p>With the HTTP legacy protocol, each request must contain the server key from the <a href="//console.firebase.google.com/project/_/settings/cloudmessaging/"> Cloud Messaging</a> tab of the <span class="notranslate">Firebase</span> console <strong>Settings</strong> pane. For XMPP, you must use the same server key to establish a connection.</p> <aside class="special"><strong>Important:</strong><span> The server key found in the console cannot authorize send requests made via the HTTP v1 API&mdash;it is used only for legacy HTTP and XMPP requests.</span></aside> <h3 id="migrate-legacy-server-keys" data-text="Migrate legacy server keys" tabindex="-1">Migrate legacy server keys</h3> <p>Starting from March 2020, <span class="notranslate">FCM</span> stopped creating legacy server keys. Existing legacy server keys will continue to work, but we recommend that you instead use the newer version of key labeled <strong>Server key</strong> in the <a href="//console.firebase.google.com/project/_/settings/cloudmessaging/"> <span class="notranslate">Firebase</span> console</a>.</p> <p>If you want to delete an existing legacy server key, you can do so in the <a href="//console.cloud.google.com/apis/credentials/"><span class="notranslate">Google Cloud</span> console</a>.</p> <aside class="caution"><strong>Caution:</strong><span> If you regenerate an API key in the <a href="//console.cloud.google.com/apis/credentials/"><span class="notranslate">Google Cloud</span> console</a>, it cannot be used for authorizing <span class="notranslate">FCM</span> requests.</span></aside> <h3 id="authorize-http-requests" data-text="Authorize HTTP requests" tabindex="-1">Authorize HTTP requests</h3> <p>A message request consists of two parts: the HTTP header and the HTTP body. The HTTP header must contain the following headers:</p> <ul> <li><code translate="no" dir="ltr">Authorization</code>: key=YOUR_SERVER_KEY <br>Make sure this is the <strong>server</strong> key, whose value is available in the <a href="//console.firebase.google.com/project/_/settings/cloudmessaging/"> Cloud Messaging</a> tab of the <span class="notranslate">Firebase</span> console <strong>Settings</strong> pane. Android, Apple platform, and browser keys are rejected by <span class="notranslate">FCM</span>.</li> <li><code translate="no" dir="ltr">Content-Type</code>: <code translate="no" dir="ltr">application/json</code> for JSON; <code translate="no" dir="ltr">application/x-www-form-urlencoded;charset=UTF-8</code> for plain text. <br>If <code translate="no" dir="ltr">Content-Type</code> is omitted, the format is assumed to be plain text. </li> </ul> <p>For example: </p> <div></div><devsite-code><pre class="devsite-click-to-copy notranslate" translate="no" dir="ltr" is-upgraded syntax="scdoc">Content-Type:application/json Authorization:key=AIzaSyZ-1u...0GBYzPu7Udno5aA { "to" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...", "data" : { ... }, }</pre></devsite-code> <p> See <a href="/docs/cloud-messaging/send-message#send_messages_using_the_legacy_app_server_protocols"> Build Send Requests</a> for full detail on creating send requests. The <a href="/docs/cloud-messaging/http-server-ref">Legacy HTTP Protocol Reference</a> provides a list of all the parameters your message can contain.</p> <h4 id="checkAPIkey" data-text="Checking the validity of a server key" tabindex="-1">Checking the validity of a server key</h4> <p>If you receive authentication errors when sending messages, check the validity of your Server key. For example, on Linux, run the following command:</p> <div></div><devsite-code><pre class="devsite-click-to-copy notranslate" translate="no" dir="ltr" is-upgraded syntax="verilog"><span class="devsite-syntax-n">api_key</span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-n">YOUR_SERVER_KEY</span> <span class="devsite-syntax-n">curl</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">--</span><span class="devsite-syntax-n">header</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s">"Authorization: key=$api_key"</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-se">\</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">--</span><span class="devsite-syntax-n">header</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Content</span><span class="devsite-syntax-o">-</span><span class="devsite-syntax-nl">Type:</span><span class="devsite-syntax-s">"application/json"</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-se">\</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nl">https:</span><span class="devsite-syntax-c1">//fcm.googleapis.com/fcm/send \</span> <span class="devsite-syntax-c1"> -d "{\"registration_ids\":[\"ABC\"]}"</span></pre></devsite-code> <p> If you receive a 401 HTTP status code, your Server key is not valid. </p> <h3 id="authorize-an-xmpp-connection" data-text="Authorize an XMPP connection" tabindex="-1">Authorize an XMPP connection</h3> <aside class="caution"><strong>Caution:</strong><span> Sending messages (including upstream messages) with the <span class="notranslate">FCM</span> XMPP and HTTP legacy APIs was deprecated on June 20, 2023, and <a href="/support/faq#deprecated-api-shutdown"><strong>will be removed starting June 2024</strong></a>. If you are using the legacy <span class="notranslate">FCM</span> send APIs, we strongly recommend that you <a href="/docs/cloud-messaging/migrate-v1">migrate to the HTTP v1 API</a> or consider using the <a href="/docs/cloud-messaging/server#choosing-a-server-option">Admin SDK</a> to build send requests.</span></aside> <p>With XMPP, you can maintain a persistent, asynchronous, bidirectional connection to <span class="notranslate">FCM</span> servers. The connection can be used to send and receive messages between your server and your users' <span class="notranslate">FCM</span>-connected devices.</p> <p>You can use most XMPP libraries to manage a long-lived connection to <span class="notranslate">FCM</span>. XMPP endpoint runs at <code translate="no" dir="ltr">fcm-xmpp.googleapis.com:5235</code>. When testing functionality with non-production users, you should instead connect to the pre-production server at <code translate="no" dir="ltr">fcm-xmpp.googleapis.com:5236</code> (note the different port).</p> <p>Regular testing on pre-production (a smaller environment where the latest <span class="notranslate">FCM</span> builds run) is beneficial for isolating real users from test code. Test devices and test code connecting to <code translate="no" dir="ltr">fcm-xmpp.googleapis.com:5236</code> should use a different <span class="notranslate">FCM</span> sender ID to avoid any risks of sending test messages to production users or sending upstream messages from production traffic over test connections.</p> <p>The connection has two important requirements:</p> <ul> <li>You must initiate a Transport Layer Security (TLS) connection. Note that <span class="notranslate">FCM</span> doesn't currently support the <a href="http://xmpp.org/rfcs/rfc3920.html" class="external-link" target="_android">STARTTLS extension</a>.</li> <li><span class="notranslate">FCM</span> requires a SASL PLAIN authentication mechanism using <code translate="no" dir="ltr">&lt;your_<span class="notranslate">FCM</span>_Sender_Id&gt;&#64;fcm.googleapis.com</code> (<span class="notranslate">FCM</span> <a href="/docs/cloud-messaging/concept-options#senderid">sender ID</a>) and the Server key as the password. These values are available in the <a href="//console.firebase.google.com/project/_/settings/cloudmessaging/"> Cloud Messaging</a> tab of the <span class="notranslate">Firebase</span> console <strong>Settings</strong> pane.</li> </ul> <p>If at any point the connection fails, you should immediately reconnect. There is no need to back off after a disconnect that happens after authentication. For each <a href="/docs/cloud-messaging/concept-options#senderid">sender ID</a>, <span class="notranslate">FCM</span> allows 2500 connections in parallel.</p> <p>The following snippets illustrate how to perform authentication and authorization for an XMPP connection to <span class="notranslate">FCM</span>.</p> <h4 id="xmpp-server" data-text="XMPP server" tabindex="-1">XMPP server</h4> <p>The XMPP server requests a connection to <span class="notranslate">FCM</span></p> <div></div><devsite-code><pre class="devsite-click-to-copy notranslate" translate="no" dir="ltr" is-upgraded syntax="ActionScript 3">&lt;<span class="devsite-syntax-n">stream</span><span class="devsite-syntax-o">:</span><span class="devsite-syntax-n">stream</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">to</span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-s2">"fcm.googleapis.com"</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">version</span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-s2">"1.0"</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">xmlns</span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-s2">"jabber:client"</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">xmlns</span><span class="devsite-syntax-o">:</span><span class="devsite-syntax-n">stream</span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-s2">"http://etherx.jabber.org/streams"</span>&gt;</pre></devsite-code> <h4 id="fcm" data-text="FCM" tabindex="-1"><span class="notranslate">FCM</span></h4> <p><span class="notranslate">FCM</span> opens the connection and requests an auth mechanism, including the <code translate="no" dir="ltr">PLAIN</code> method.</p> <div></div><devsite-code><pre class="devsite-click-to-copy notranslate" translate="no" dir="ltr" is-upgraded syntax="ActionScript 3">&lt;<span class="devsite-syntax-n">stream</span><span class="devsite-syntax-o">:</span><span class="devsite-syntax-n">features</span>&gt; <span class="devsite-syntax-w"> </span>&lt;<span class="devsite-syntax-n">mechanisms</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">xmlns</span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-s2">"urn:ietf:params:xml:ns:xmpp-sasl"</span>&gt; <span class="devsite-syntax-w"> </span>&lt;<span class="devsite-syntax-n">mechanism&gt;X</span><span class="devsite-syntax-o">-</span><span class="devsite-syntax-n">OAUTH2</span>&lt;<span class="devsite-syntax-o">/</span><span class="devsite-syntax-n">mechanism</span>&gt; <span class="devsite-syntax-w"> </span>&lt;<span class="devsite-syntax-n">mechanism&gt;X</span><span class="devsite-syntax-o">-</span><span class="devsite-syntax-n">GOOGLE</span><span class="devsite-syntax-o">-</span><span class="devsite-syntax-n">TOKEN</span>&lt;<span class="devsite-syntax-o">/</span><span class="devsite-syntax-n">mechanism</span>&gt; <span class="devsite-syntax-w"> </span>&lt;<span class="devsite-syntax-n">mechanism&gt;PLAIN</span>&lt;<span class="devsite-syntax-o">/</span><span class="devsite-syntax-n">mechanism</span>&gt; <span class="devsite-syntax-w"> </span>&lt;<span class="devsite-syntax-o">/</span><span class="devsite-syntax-n">mechanisms</span>&gt; &lt;<span class="devsite-syntax-o">/</span><span class="devsite-syntax-n">stream</span><span class="devsite-syntax-o">:</span><span class="devsite-syntax-n">features</span>&gt;</pre></devsite-code> <h4 id="xmpp-server_1" data-text="XMPP server" tabindex="-1">XMPP server</h4> <p>The XMPP server must respond using the <code translate="no" dir="ltr">PLAIN</code> auth method, providing the server key from the <a href="//console.firebase.google.com/project/_/settings/cloudmessaging/"> Cloud Messaging</a> tab of the <span class="notranslate">Firebase</span> console <strong>Settings</strong> pane.</p> <div></div><devsite-code><pre class="devsite-click-to-copy notranslate" translate="no" dir="ltr" is-upgraded syntax="Text only">&lt;auth mechanism="PLAIN" xmlns="urn:ietf:params:xml:ns:xmpp-sasl"&gt;MTI2MjAwMzQ3OTMzQHByb2plY3RzLmdjbS5hb mFTeUIzcmNaTmtmbnFLZEZiOW1oekNCaVlwT1JEQTJKV1d0dw==&lt;/auth&gt;</pre></devsite-code> <h4 id="fcm_1" data-text="FCM" tabindex="-1"><span class="notranslate">FCM</span></h4> <div></div><devsite-code><pre class="devsite-click-to-copy notranslate" translate="no" dir="ltr" is-upgraded syntax="Text only">&lt;success xmlns="urn:ietf:params:xml:ns:xmpp-sasl"/&gt;</pre></devsite-code> <h4 id="xmpp-server_2" data-text="XMPP server" tabindex="-1">XMPP server</h4> <div></div><devsite-code><pre class="devsite-click-to-copy notranslate" translate="no" dir="ltr" is-upgraded syntax="ActionScript 3">&lt;<span class="devsite-syntax-n">stream</span><span class="devsite-syntax-o">:</span><span class="devsite-syntax-n">stream</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">to</span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-s2">"fcm.googleapis.com"</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">version</span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-s2">"1.0"</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">xmlns</span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-s2">"jabber:client"</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">xmlns</span><span class="devsite-syntax-o">:</span><span class="devsite-syntax-n">stream</span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-s2">"http://etherx.jabber.org/streams"</span>&gt;</pre></devsite-code> <h4 id="fcm_2" data-text="FCM" tabindex="-1"><span class="notranslate">FCM</span></h4> <div></div><devsite-code><pre class="devsite-click-to-copy notranslate" translate="no" dir="ltr" is-upgraded syntax="ActionScript 3">&lt;<span class="devsite-syntax-n">stream</span><span class="devsite-syntax-o">:</span><span class="devsite-syntax-n">features</span>&gt; <span class="devsite-syntax-w"> </span>&lt;<span class="devsite-syntax-n">bind</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">xmlns</span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-s2">"urn:ietf:params:xml:ns:xmpp-bind"</span><span class="devsite-syntax-o">/</span>&gt; <span class="devsite-syntax-w"> </span>&lt;<span class="devsite-syntax-n">session</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">xmlns</span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-s2">"urn:ietf:params:xml:ns:xmpp-session"</span><span class="devsite-syntax-o">/</span>&gt; &lt;<span class="devsite-syntax-o">/</span><span class="devsite-syntax-n">stream</span><span class="devsite-syntax-o">:</span><span class="devsite-syntax-n">features</span>&gt;</pre></devsite-code> <h4 id="xmpp-server_3" data-text="XMPP server" tabindex="-1">XMPP server</h4> <div></div><devsite-code><pre class="devsite-click-to-copy notranslate" translate="no" dir="ltr" is-upgraded syntax="Carbon">&lt;<span class="devsite-syntax-nx">iq</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">type</span><span class="devsite-syntax-p">=</span><span class="devsite-syntax-s">"set"</span>&gt; <span class="devsite-syntax-w"> </span>&lt;<span class="devsite-syntax-nx">bind</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">xmlns</span><span class="devsite-syntax-p">=</span><span class="devsite-syntax-s">"urn:ietf:params:xml:ns:xmpp-bind"</span>&gt;&lt;<span class="devsite-syntax-o">/</span><span class="devsite-syntax-nx">bind</span>&gt; &lt;<span class="devsite-syntax-o">/</span><span class="devsite-syntax-nx">iq</span>&gt;</pre></devsite-code> <h4 id="fcm_3" data-text="FCM" tabindex="-1"><span class="notranslate">FCM</span></h4> <div></div><devsite-code><pre class="devsite-click-to-copy notranslate" translate="no" dir="ltr" is-upgraded syntax="Carbon">&lt;<span class="devsite-syntax-nx">iq</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">type</span><span class="devsite-syntax-p">=</span><span class="devsite-syntax-s">"result"</span>&gt; <span class="devsite-syntax-w"> </span>&lt;<span class="devsite-syntax-nx">bind</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">xmlns</span><span class="devsite-syntax-p">=</span><span class="devsite-syntax-s">"urn:ietf:params:xml:ns:xmpp-bind"</span>&gt; <span class="devsite-syntax-w"> </span>&lt;<span class="devsite-syntax-nx">jid&gt;SENDER_ID</span><span class="devsite-syntax-err">@</span><span class="devsite-syntax-nx">fcm</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">googleapis</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nx">com</span><span class="devsite-syntax-o">/</span><span class="devsite-syntax-nx">RESOURCE</span>&lt;<span class="devsite-syntax-o">/</span><span class="devsite-syntax-nx">jid</span>&gt; <span class="devsite-syntax-w"> </span>&lt;<span class="devsite-syntax-o">/</span><span class="devsite-syntax-nx">bind</span>&gt; &lt;<span class="devsite-syntax-o">/</span><span class="devsite-syntax-nx">iq</span>&gt;</pre></devsite-code> <p>Note: <span class="notranslate">FCM</span> does not use the bound resource while routing messages.</p> <p> See <a href="/docs/cloud-messaging/send-message#send_messages_using_the_legacy_app_server_protocols"> Build Send Requests</a> for full detail on creating send requests. The <a href="/docs/cloud-messaging/xmpp-server-ref">Legacy XMPP Protocol Reference</a> provides a list of all the parameters your message can contain.</p> <devsite-hats-survey class="nocontent" hats-id="Eo9GZTcG10ncf3CThQj0SEgFWynR" listnr-id="5244646"></devsite-hats-survey> </div> <devsite-thumb-rating position="footer"> </devsite-thumb-rating> <devsite-feedback position="footer" project-name="Firebase Cloud Messaging" product-id="719752" bucket="" context="" version="t-devsite-webserver-20250211-r00-rc00.466928320959134316" data-label="Send Feedback Button" track-type="feedback" track-name="sendFeedbackLink" track-metadata-position="footer" class="nocontent" project-feedback-url="https://firebase.google.com/support/troubleshooter/fcm" project-icon="https://www.gstatic.com/devrel-devsite/prod/v38a693baeb774512feb42f10aac8f755d8791ed41119b5be7a531f8e16f8279f/firebase/images/touchicon-180.png" project-support-url="https://firebase.google.com/support/" > <button> Send feedback </button> </devsite-feedback> <div class="devsite-floating-action-buttons"> </div> </article> <devsite-content-footer class="nocontent"> <p>Except as otherwise noted, the content of this page is licensed under the <a href="https://creativecommons.org/licenses/by/4.0/">Creative Commons Attribution 4.0 License</a>, and code samples are licensed under the <a href="https://www.apache.org/licenses/LICENSE-2.0">Apache 2.0 License</a>. For details, see the <a href="https://developers.google.com/site-policies">Google Developers Site Policies</a>. Java is a registered trademark of Oracle and/or its affiliates.</p> <p>Last updated 2025-02-13 UTC.</p> </devsite-content-footer> <devsite-notification > </devsite-notification> <div class="devsite-content-data"> <template class="devsite-thumb-rating-feedback"> <devsite-feedback position="thumb-rating" project-name="Firebase Cloud Messaging" product-id="719752" bucket="" context="" version="t-devsite-webserver-20250211-r00-rc00.466928320959134316" data-label="Send Feedback Button" track-type="feedback" track-name="sendFeedbackLink" track-metadata-position="thumb-rating" class="nocontent" project-feedback-url="https://firebase.google.com/support/troubleshooter/fcm" project-icon="https://www.gstatic.com/devrel-devsite/prod/v38a693baeb774512feb42f10aac8f755d8791ed41119b5be7a531f8e16f8279f/firebase/images/touchicon-180.png" project-support-url="https://firebase.google.com/support/" > <button> Need to tell us more? </button> </devsite-feedback> </template> <template class="devsite-content-data-template"> [[["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 2025-02-13 UTC."],[],[]] </template> </div> </devsite-content> </main> <devsite-footer-promos class="devsite-footer"> </devsite-footer-promos> <devsite-footer-linkboxes class="devsite-footer"> <nav class="devsite-footer-linkboxes nocontent" aria-label="Footer links"> <ul class="devsite-footer-linkboxes-list"> <li class="devsite-footer-linkbox "> <h3 class="devsite-footer-linkbox-heading no-link">Learn</h3> <ul class="devsite-footer-linkbox-list"> <li class="devsite-footer-linkbox-item"> <a href="/docs/" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 1)" > Developer guides </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/docs/reference/" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 2)" > SDK & API reference </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/docs/samples/" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 3)" > Samples </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/docs/libraries/" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 4)" > Libraries </a> </li> <li class="devsite-footer-linkbox-item"> <a href="//github.com/firebase/" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 5)" > GitHub </a> </li> </ul> </li> <li class="devsite-footer-linkbox "> <h3 class="devsite-footer-linkbox-heading no-link">Stay connected</h3> <ul class="devsite-footer-linkbox-list"> <li class="devsite-footer-linkbox-item"> <a href="//firebase.blog" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 1)" > Check out the blog </a> </li> <li class="devsite-footer-linkbox-item"> <a href="//www.reddit.com/r/Firebase" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 2)" > Find us on Reddit </a> </li> <li class="devsite-footer-linkbox-item"> <a href="//x.com/Firebase" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 3)" > Follow on X </a> </li> <li class="devsite-footer-linkbox-item"> <a href="//www.youtube.com/user/Firebase" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 4)" > Subscribe on YouTube </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/community/events" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 5)" > Attend an event </a> </li> </ul> </li> <li class="devsite-footer-linkbox "> <h3 class="devsite-footer-linkbox-heading no-link">Support</h3> <ul class="devsite-footer-linkbox-list"> <li class="devsite-footer-linkbox-item"> <a href="/support/" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 1)" > Contact support </a> </li> <li class="devsite-footer-linkbox-item"> <a href="//stackoverflow.com/questions/tagged/firebase" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 2)" > Stack Overflow </a> </li> <li class="devsite-footer-linkbox-item"> <a href="//firebase.community/" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 3)" > Slack community </a> </li> <li class="devsite-footer-linkbox-item"> <a href="//groups.google.com/forum/#!forum/firebase-talk" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 4)" > Google group </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/support/releases" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 5)" > Release notes </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/brand-guidelines/" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 6)" > Brand guidelines </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/support/faq/" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 7)" > FAQs </a> </li> </ul> </li> </ul> </nav> </devsite-footer-linkboxes> <devsite-footer-utility class="devsite-footer"> <div class="devsite-footer-utility nocontent"> <nav class="devsite-footer-sites" aria-label="Other Google Developers websites"> <a href="https://developers.google.com/" class="devsite-footer-sites-logo-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Google Developers Link"> <picture> <source srcset="https://www.gstatic.com/devrel-devsite/prod/v38a693baeb774512feb42f10aac8f755d8791ed41119b5be7a531f8e16f8279f/firebase/images/lockup-google-for-developers-dark-theme.svg" media="(prefers-color-scheme: none)" class="devsite-dark-theme" loading="lazy" alt="Google Developers"> <img class="devsite-footer-sites-logo" src="https://www.gstatic.com/devrel-devsite/prod/v38a693baeb774512feb42f10aac8f755d8791ed41119b5be7a531f8e16f8279f/firebase/images/lockup-google-for-developers.svg" loading="lazy" alt="Google Developers"> </picture> </a> <ul class="devsite-footer-sites-list"> <li class="devsite-footer-sites-item"> <a href="//developer.android.com" class="devsite-footer-sites-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Android Link" > Android </a> </li> <li class="devsite-footer-sites-item"> <a href="//developer.chrome.com/home" class="devsite-footer-sites-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Chrome Link" > Chrome </a> </li> <li class="devsite-footer-sites-item"> <a href="//firebase.google.com" class="devsite-footer-sites-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Firebase Link" > Firebase </a> </li> <li class="devsite-footer-sites-item"> <a href="//cloud.google.com" class="devsite-footer-sites-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Google Cloud Platform Link" > Google Cloud Platform </a> </li> <li class="devsite-footer-sites-item"> <a href="//developers.google.com/products/" class="devsite-footer-sites-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer All products Link" > All products </a> </li> </ul> </nav> <nav class="devsite-footer-utility-links" aria-label="Utility links"> <ul class="devsite-footer-utility-list"> <li class="devsite-footer-utility-item "> <a class="devsite-footer-utility-link gc-analytics-event" href="/terms/" data-category="Site-Wide Custom Events" data-label="Footer Terms link" > Terms </a> </li> <li class="devsite-footer-utility-item "> <a class="devsite-footer-utility-link gc-analytics-event" href="//policies.google.com/privacy" data-category="Site-Wide Custom Events" data-label="Footer Privacy link" > Privacy </a> </li> <li class="devsite-footer-utility-item glue-cookie-notification-bar-control"> <a class="devsite-footer-utility-link gc-analytics-event" href="#" data-category="Site-Wide Custom Events" data-label="Footer Manage cookies link" aria-hidden="true" > Manage cookies </a> </li> </ul> <devsite-language-selector> <ul role="presentation"> <li role="presentation"> <a role="menuitem" lang="en" >English</a> </li> <li role="presentation"> <a role="menuitem" lang="de" >Deutsch</a> </li> <li role="presentation"> <a role="menuitem" lang="es_419" >Español – América Latina</a> </li> <li role="presentation"> <a role="menuitem" lang="fr" >Français</a> </li> <li role="presentation"> <a role="menuitem" lang="id" >Indonesia</a> </li> <li role="presentation"> <a role="menuitem" lang="it" >Italiano</a> </li> <li role="presentation"> <a role="menuitem" lang="pl" >Polski</a> </li> <li role="presentation"> <a role="menuitem" lang="pt_br" >Português – Brasil</a> </li> <li role="presentation"> <a role="menuitem" lang="vi" >Tiếng Việt</a> </li> <li role="presentation"> <a role="menuitem" lang="tr" >Türkçe</a> </li> <li role="presentation"> <a role="menuitem" lang="ru" >Русский</a> </li> <li role="presentation"> <a role="menuitem" lang="he" >עברית</a> </li> <li role="presentation"> <a role="menuitem" lang="ar" >العربيّة</a> </li> <li role="presentation"> <a role="menuitem" lang="fa" >فارسی</a> </li> <li role="presentation"> <a role="menuitem" lang="hi" >हिंदी</a> </li> <li role="presentation"> <a role="menuitem" lang="bn" >বাংলা</a> </li> <li role="presentation"> <a role="menuitem" lang="th" >ภาษาไทย</a> </li> <li role="presentation"> <a role="menuitem" lang="zh_cn" >中文 – 简体</a> </li> <li role="presentation"> <a role="menuitem" lang="zh_tw" >中文 – 繁體</a> </li> <li role="presentation"> <a role="menuitem" lang="ja" >日本語</a> </li> <li role="presentation"> <a role="menuitem" lang="ko" >한국어</a> </li> </ul> </devsite-language-selector> </nav> </div> </devsite-footer-utility> <devsite-panel></devsite-panel> <devsite-concierge data-info-panel data-ai-panel > </devsite-concierge> </section></section> <devsite-sitemask></devsite-sitemask> <devsite-snackbar></devsite-snackbar> <devsite-tooltip ></devsite-tooltip> <devsite-heading-link></devsite-heading-link> <devsite-analytics> <script type="application/json" analytics>[]</script> <script type="application/json" tag-management>{&#34;at&#34;: &#34;True&#34;, &#34;ga4&#34;: [], &#34;ga4p&#34;: [], &#34;gtm&#34;: [{&#34;id&#34;: &#34;GTM-N84485&#34;, &#34;purpose&#34;: 0}], &#34;parameters&#34;: {&#34;internalUser&#34;: &#34;False&#34;, &#34;language&#34;: {&#34;machineTranslated&#34;: &#34;False&#34;, &#34;requested&#34;: &#34;en&#34;, &#34;served&#34;: &#34;en&#34;}, &#34;pageType&#34;: &#34;guide&#34;, &#34;projectName&#34;: &#34;Firebase Cloud Messaging&#34;, &#34;signedIn&#34;: &#34;False&#34;, &#34;tenant&#34;: &#34;firebase&#34;, &#34;recommendations&#34;: {&#34;sourcePage&#34;: &#34;&#34;, &#34;sourceType&#34;: 0, &#34;sourceRank&#34;: 0, &#34;sourceIdenticalDescriptions&#34;: 0, &#34;sourceTitleWords&#34;: 0, &#34;sourceDescriptionWords&#34;: 0, &#34;experiment&#34;: &#34;&#34;}, &#34;experiment&#34;: {&#34;ids&#34;: &#34;&#34;}}}</script> </devsite-analytics> <devsite-badger></devsite-badger> <firebase-gtm></firebase-gtm> <firebase-utm></firebase-utm> <script nonce="zViGPpTCJbW20W/gyaP9OVl/7EyLrh"> (function(d,e,v,s,i,t,E){d['GoogleDevelopersObject']=i; t=e.createElement(v);t.async=1;t.src=s;E=e.getElementsByTagName(v)[0]; E.parentNode.insertBefore(t,E);})(window, document, 'script', 'https://www.gstatic.com/devrel-devsite/prod/v38a693baeb774512feb42f10aac8f755d8791ed41119b5be7a531f8e16f8279f/firebase/js/app_loader.js', '[4,"en",null,"/js/devsite_app_module.js","https://www.gstatic.com/devrel-devsite/prod/v38a693baeb774512feb42f10aac8f755d8791ed41119b5be7a531f8e16f8279f","https://www.gstatic.com/devrel-devsite/prod/v38a693baeb774512feb42f10aac8f755d8791ed41119b5be7a531f8e16f8279f/firebase","https://firebase-dot-devsite-v2-prod.appspot.com",null,null,["/_pwa/firebase/manifest.json","https://www.gstatic.com/devrel-devsite/prod/v38a693baeb774512feb42f10aac8f755d8791ed41119b5be7a531f8e16f8279f/images/video-placeholder.svg","https://www.gstatic.com/devrel-devsite/prod/v38a693baeb774512feb42f10aac8f755d8791ed41119b5be7a531f8e16f8279f/firebase/images/favicon.png","https://www.gstatic.com/devrel-devsite/prod/v38a693baeb774512feb42f10aac8f755d8791ed41119b5be7a531f8e16f8279f/firebase/images/lockup.svg","https://fonts.googleapis.com/css?family=Google+Sans:400,500|Roboto:400,400italic,500,500italic,700,700italic|Roboto+Mono:400,500,700&display=swap"],1,null,[1,6,8,12,14,17,21,25,50,52,63,70,75,76,80,87,91,92,93,97,98,100,101,102,103,104,105,107,108,109,110,112,113,117,118,120,122,124,125,126,127,129,130,131,132,133,134,135,136,138,140,141,147,148,149,151,152,156,157,158,159,161,163,164,168,169,170,179,180,182,183,186,191,193,196],"AIzaSyAP-jjEJBzmIyKR4F-3XITp8yM9T1gEEI8","AIzaSyB6xiKGDR5O3Ak2okS4rLkauxGUG7XP0hg","firebase.google.com","AIzaSyAQk0fBONSGUqCNznf6Krs82Ap1-NV6J4o","AIzaSyCCxcqdrZ_7QMeLCRY20bh_SXdAYqy70KY",null,null,null,["MiscFeatureFlags__enable_view_transitions","Cloud__enable_cloud_shell","Cloud__enable_cloud_shell_fte_user_flow","Profiles__enable_completecodelab_endpoint","Significatio__enable_by_tenant","Search__enable_ai_search_summaries","BookNav__enable_tenant_cache_key","Profiles__enable_public_developer_profiles","DevPro__enable_cloud_innovators_plus","Search__enable_page_map","Cloud__enable_free_trial_server_call","MiscFeatureFlags__developers_footer_dark_image","MiscFeatureFlags__developers_footer_image","MiscFeatureFlags__enable_project_variables","Search__enable_dynamic_content_confidential_banner","MiscFeatureFlags__enable_variable_operator","DevPro__enable_developer_subscriptions","Experiments__reqs_query_experiments","Cloud__enable_cloudx_ping","Profiles__enable_page_saving","MiscFeatureFlags__enable_dark_theme","Profiles__enable_developer_profiles_callout","Profiles__enable_complete_playlist_endpoint","Profiles__require_profile_eligibility_for_signin","CloudShell__cloud_code_overflow_menu","EngEduTelemetry__enable_engedu_telemetry","CloudShell__cloud_shell_button","Search__enable_suggestions_from_borg","TpcFeatures__enable_mirror_tenant_redirects","MiscFeatureFlags__emergency_css","Profiles__enable_stripe_subscription_management","Profiles__enable_awarding_url","Profiles__enable_recognition_badges","Profiles__enable_profile_collections","Cloud__enable_llm_concierge_chat","TpcFeatures__enable_unmirrored_page_left_nav","Analytics__enable_clearcut_logging","Profiles__enable_join_program_group_endpoint","Cloud__enable_cloud_facet_chat","Concierge__enable_concierge","Concierge__enable_pushui","Cloud__enable_cloudx_experiment_ids","MiscFeatureFlags__enable_firebase_utm","Cloud__enable_cloud_dlp_service","Search__enable_ai_eligibility_checks","Profiles__enable_completequiz_endpoint","Profiles__enable_dashboard_curated_recommendations","Profiles__enable_release_notes_notifications","Cloud__enable_legacy_calculator_redirect","MiscFeatureFlags__enable_explain_this_code"],null,null,"AIzaSyBLEMok-5suZ67qRPzx0qUtbnLmyT_kCVE","https://developerscontentserving-pa.clients6.google.com","AIzaSyCM4QpTRSqP5qI4Dvjt4OAScIN8sOUlO-k","https://developerscontentsearch-pa.clients6.google.com",1,4,null,"https://developerprofiles-pa.clients6.google.com",[4,"firebase","Firebase","firebase.google.com",null,"firebase-dot-devsite-v2-prod.appspot.com",null,null,[1,1,null,null,null,null,null,null,null,null,null,[1],null,null,null,null,null,null,[1],[1,null,null,[1]],null,null,null,[1,null,1],[1,1,null,null,1]],null,[68,null,null,null,null,null,"/images/lockup.svg","/images/touchicon-180.png",null,null,null,1,1,1,null,null,null,null,null,null,null,2,null,null,null,"/images/lockup.svg",[]],[],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[6,1,20,22,23,29,37],null,[[],[1,1]],[[null,null,null,null,["UA-24532603-9"],["GTM-N84485"],null,null,null,null,[["UA-24532603-9",1]],[["GTM-N84485",1]],1],[[2,5],[46,8],[36,4],[17,1],[16,2]],null,1],null,4],null,"pk_live_5170syrHvgGVmSx9sBrnWtA5luvk9BwnVcvIi7HizpwauFG96WedXsuXh790rtij9AmGllqPtMLfhe2RSwD6Pn38V00uBCydV4m",1]') </script> <devsite-a11y-announce></devsite-a11y-announce> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10