CINXE.COM
Firebase FAQ
<!doctype html> <html lang="en" dir="ltr"> <head><script type="text/javascript" src="/_static/js/bundle-playback.js?v=HxkREWBo" charset="utf-8"></script> <script type="text/javascript" src="/_static/js/wombat.js?v=txqj7nKC" charset="utf-8"></script> <script>window.RufflePlayer=window.RufflePlayer||{};window.RufflePlayer.config={"autoplay":"on","unmuteOverlay":"hidden"};</script> <script type="text/javascript" src="/_static/js/ruffle/ruffle.js"></script> <script type="text/javascript"> __wm.init("https://web.archive.org/web"); __wm.wombat("https://firebase.google.com/support/faq/","20210126130738","https://web.archive.org/","web","/_static/", "1611666458"); </script> <link rel="stylesheet" type="text/css" href="/_static/css/banner-styles.css?v=S1zqJCYt" /> <link rel="stylesheet" type="text/css" href="/_static/css/iconochive.css?v=3PDvdIFv" /> <!-- End Wayback Rewrite JS Include --> <meta name="google-signin-client-id" content="721724668570-nbkv1cfusk7kk4eni4pjvepaus73b13t.apps.googleusercontent.com"> <meta name="google-signin-scope" content="profile email"> <meta property="og:site_name" content="Firebase"> <meta property="og:type" content="website"> <meta name="theme-color" content="#039be5"> <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="/web/20210126130738/https://firebase.google.com/_pwa/firebase/manifest.json" crossorigin="use-credentials"> <link rel="preconnect" href="//web.archive.org/web/20210126130738/https://www.gstatic.com/" crossorigin> <link rel="preconnect" href="//web.archive.org/web/20210126130738/https://fonts.gstatic.com/" crossorigin> <link rel="preconnect" href="//web.archive.org/web/20210126130738/https://fonts.googleapis.com/" crossorigin> <link rel="preconnect" href="//web.archive.org/web/20210126130738/https://apis.google.com/" crossorigin> <link rel="preconnect" href="//web.archive.org/web/20210126130738/https://www.google-analytics.com/" crossorigin> <link rel="stylesheet" href="//web.archive.org/web/20210126130738cs_/https://fonts.googleapis.com/css?family=Google+Sans:400,500|Roboto:400,400italic,500,500italic,700,700italic|Roboto+Mono:400,500,700|Material+Icons"> <link rel="stylesheet" href="https://web.archive.org/web/20210126130738cs_/https://www.gstatic.com/devrel-devsite/prod/vbd4700e58d826f0eab371eadc20e0e343567df356800794a790eebf2ac059db2/firebase/css/app.css"> <noscript> </noscript> <link rel="shortcut icon" href="https://web.archive.org/web/20210126130738im_/https://www.gstatic.com/devrel-devsite/prod/vbd4700e58d826f0eab371eadc20e0e343567df356800794a790eebf2ac059db2/firebase/images/favicon.png"> <link rel="apple-touch-icon" href="https://web.archive.org/web/20210126130738im_/https://www.gstatic.com/devrel-devsite/prod/vbd4700e58d826f0eab371eadc20e0e343567df356800794a790eebf2ac059db2/firebase/images/touchicon-180.png"><link rel="canonical" href="https://web.archive.org/web/20210126130738/https://firebase.google.com/support/faq"><link rel="search" type="application/opensearchdescription+xml" title="Firebase" href="https://web.archive.org/web/20210126130738/https://firebase.google.com/s/opensearch.xml"> <title>Firebase FAQ</title> <meta property="og:title" content="Firebase FAQ"> <meta property="og:url" content="https://web.archive.org/web/20210126130738/https://firebase.google.com/support/faq"> <meta property="og:locale" content="en"> </head> <body type="article" theme="firebase-theme" class="" layout="docs" pending> <devsite-progress type="indeterminate" id="app-progress"></devsite-progress> <section class="devsite-wrapper"><devsite-header> <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="/web/20210126130738/https://firebase.google.com/" 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"> <img src="https://web.archive.org/web/20210126130738im_/https://www.gstatic.com/devrel-devsite/prod/vbd4700e58d826f0eab371eadc20e0e343567df356800794a790eebf2ac059db2/firebase/images/lockup.png" class="devsite-site-logo" alt="Firebase"> </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 dropdown> <a href="https://web.archive.org/web/20210126130738/https://firebase.google.com/products-build" class="gc-analytics-event " track-type="globalNav" track-metadata-position="nav" track-metadata-eventdetail="nav" track-name="products" aria-haspopup="true" aria-expanded="false" data-category="Site-Wide Custom Events" data-label="Tab: Products"> Products </a> <a href="#" aria-haspopup="true" aria-expanded="false" aria-label="Dropdown menu" role="button" track-type="globalNav" track-metadata-position="nav" track-metadata-eventdetail="nav" track-name="products" data-category="Site-Wide Custom Events" data-label="Tab: Products" tabindex="-1" class="devsite-tabs-dropdown-toggle devsite-icon devsite-icon-arrow-drop-down"></a> <div class="devsite-tabs-dropdown" aria-label="submenu"> <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://web.archive.org/web/20210126130738/https://firebase.google.com/products-build" track-type="navMenu" track-name="Build" track-metadata-position="nav" track-metadata-href="https://firebase.google.com/products-build" tooltip> <div class="devsite-nav-item-title"> Build </div> </a> </li> <li class="devsite-nav-item"> <a href="https://web.archive.org/web/20210126130738/https://firebase.google.com/products-release" track-type="navMenu" track-name="Release & Monitor" track-metadata-position="nav" track-metadata-href="https://firebase.google.com/products-release" tooltip> <div class="devsite-nav-item-title"> Release & Monitor </div> </a> </li> <li class="devsite-nav-item"> <a href="https://web.archive.org/web/20210126130738/https://firebase.google.com/products-engage" track-type="navMenu" track-name="Engage" track-metadata-position="nav" track-metadata-href="https://firebase.google.com/products-engage" tooltip> <div class="devsite-nav-item-title"> Engage </div> </a> </li> </ul> </div> </div> </div> </tab> <tab> <a href="https://web.archive.org/web/20210126130738/https://firebase.google.com/use-cases" class="gc-analytics-event " track-type="globalNav" track-metadata-position="nav" track-metadata-eventdetail="nav" track-name="useCases" data-category="Site-Wide Custom Events" data-label="Tab: Use Cases"> Use Cases </a> </tab> <tab> <a href="https://web.archive.org/web/20210126130738/https://firebase.google.com/pricing" class="gc-analytics-event " track-type="globalNav" track-metadata-position="nav" track-metadata-eventdetail="nav" track-name="pricing" data-category="Site-Wide Custom Events" data-label="Tab: Pricing"> Pricing </a> </tab> <tab> <a href="https://web.archive.org/web/20210126130738/https://firebase.google.com/docs" class="gc-analytics-event " track-type="globalNav" track-metadata-position="nav" track-metadata-eventdetail="nav" track-name="docs" data-category="Site-Wide Custom Events" data-label="Tab: Docs"> Docs </a> </tab> <tab> <a href="https://web.archive.org/web/20210126130738/https://firebase.google.com/community" class="gc-analytics-event " track-type="globalNav" track-metadata-position="nav" track-metadata-eventdetail="nav" track-name="community" data-category="Site-Wide Custom Events" data-label="Tab: Community"> Community </a> </tab> <tab active> <a href="https://web.archive.org/web/20210126130738/https://firebase.google.com/support" class="gc-analytics-event " track-type="globalNav" track-metadata-position="nav" track-metadata-eventdetail="nav" track-name="support" aria-label="Support, selected" data-category="Site-Wide Custom Events" data-label="Tab: Support"> Support </a> </tab> </nav> </devsite-tabs> </div> <devsite-search aria-expanded="false" aria-haspopup="listbox" enable-signin enable-search enable-suggestions enable-query-completion project-name="Firebase" tenant-name="Firebase" role="combobox"> <form class="devsite-search-form" action="https://web.archive.org/web/20210126130738/https://firebase.google.com/s/results" method="GET"> <div class="devsite-search-container"> <div class="devsite-searchbox"> <input aria-activedescendant="" aria-autocomplete="list" aria-label="Search" aria-haspopup="false" aria-multiline="false" aria-label="Search box" autocomplete="off" class="devsite-search-field devsite-search-query" name="q" placeholder="Search" type="text" value=""> <div class="devsite-search-image material-icons" aria-hidden="true"></div> </div> <button type="button" search-open class="devsite-search-button devsite-header-icon-button button-flat material-icons" aria-label="Open search"></button> </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-language-selector> <devsite-select class="devsite-language-selector-menu"> <select aria-label="Select your language preference." class="devsite-language-selector-select" name="language" track-name="click" track-type="languageSelector"> <option>Language</option> <option value="en" lang="en" track-metadata-original-language="en" track-metadata-selected-language="en" track-name="changed" track-type="languageSelector"> English </option> <option value="id" lang="id" track-metadata-original-language="en" track-metadata-selected-language="id" track-name="changed" track-type="languageSelector"> Bahasa Indonesia </option> <option value="de" lang="de" track-metadata-original-language="en" track-metadata-selected-language="de" track-name="changed" track-type="languageSelector"> Deutsch </option> <option value="es_419" lang="es_419" track-metadata-original-language="en" track-metadata-selected-language="es_419" track-name="changed" track-type="languageSelector"> Español – América Latina </option> <option value="fr" lang="fr" track-metadata-original-language="en" track-metadata-selected-language="fr" track-name="changed" track-type="languageSelector"> Français </option> <option value="it" lang="it" track-metadata-original-language="en" track-metadata-selected-language="it" track-name="changed" track-type="languageSelector"> Italiano </option> <option value="pl" lang="pl" track-metadata-original-language="en" track-metadata-selected-language="pl" track-name="changed" track-type="languageSelector"> Polski </option> <option value="pt_br" lang="pt_br" track-metadata-original-language="en" track-metadata-selected-language="pt_br" track-name="changed" track-type="languageSelector"> Português – Brasil </option> <option value="vi" lang="vi" track-metadata-original-language="en" track-metadata-selected-language="vi" track-name="changed" track-type="languageSelector"> Tiếng Việt </option> <option value="tr" lang="tr" track-metadata-original-language="en" track-metadata-selected-language="tr" track-name="changed" track-type="languageSelector"> Türkçe </option> <option value="ru" lang="ru" track-metadata-original-language="en" track-metadata-selected-language="ru" track-name="changed" track-type="languageSelector"> Русский </option> <option value="he" lang="he" track-metadata-original-language="en" track-metadata-selected-language="he" track-name="changed" track-type="languageSelector"> עברית' </option> <option value="ar" lang="ar" track-metadata-original-language="en" track-metadata-selected-language="ar" track-name="changed" track-type="languageSelector"> العربيّة </option> <option value="fa" lang="fa" track-metadata-original-language="en" track-metadata-selected-language="fa" track-name="changed" track-type="languageSelector"> فارسی </option> <option value="hi" lang="hi" track-metadata-original-language="en" track-metadata-selected-language="hi" track-name="changed" track-type="languageSelector"> हिंदी </option> <option value="bn" lang="bn" track-metadata-original-language="en" track-metadata-selected-language="bn" track-name="changed" track-type="languageSelector"> বাংলা </option> <option value="th" lang="th" track-metadata-original-language="en" track-metadata-selected-language="th" track-name="changed" track-type="languageSelector"> ภาษาไทย </option> <option value="zh_cn" lang="zh_cn" track-metadata-original-language="en" track-metadata-selected-language="zh_cn" track-name="changed" track-type="languageSelector"> 中文 – 简体 </option> <option value="zh_tw" lang="zh_tw" track-metadata-original-language="en" track-metadata-selected-language="zh_tw" track-name="changed" track-type="languageSelector"> 中文 – 繁體 </option> <option value="ja" lang="ja" track-metadata-original-language="en" track-metadata-selected-language="ja" track-name="changed" track-type="languageSelector"> 日本語 </option> <option value="ko" lang="ko" track-metadata-original-language="en" track-metadata-selected-language="ko" track-name="changed" track-type="languageSelector"> 한국어 </option> </select> </devsite-select> </devsite-language-selector> <a class="devsite-header-link devsite-top-button button gc-analytics-event" href="//web.archive.org/web/20210126130738/https://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"></devsite-user> </div> </div> </div> <div class="devsite-collapsible-section devsite-header-no-lower-tabs "> <div class="devsite-header-background"> <div class="devsite-product-id-row"> <div class="devsite-product-description-row"> <ul class="devsite-breadcrumb-list"> <li class="devsite-breadcrumb-item "> <a href="https://web.archive.org/web/20210126130738/https://firebase.google.com/support" 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=""> Support </a> </li> </ul> </div> </div> </div> </div> </div> </devsite-header> <devsite-book-nav scrollbars> <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="/web/20210126130738/https://firebase.google.com/" 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"> <img src="https://web.archive.org/web/20210126130738im_/https://www.gstatic.com/devrel-devsite/prod/vbd4700e58d826f0eab371eadc20e0e343567df356800794a790eebf2ac059db2/firebase/images/lockup.png" class="devsite-site-logo" alt="Firebase"> </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="/web/20210126130738/https://firebase.google.com/products-build" class="devsite-nav-title gc-analytics-event devsite-nav-has-children " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Products" track-type="globalNav" track-metadata-eventdetail="globalMenu" track-metadata-position="nav" track-name="products"> <span class="devsite-nav-text" tooltip> Products </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> <span class="devsite-nav-text" tooltip menu="Products"> More </span> <span class="devsite-nav-icon material-icons" data-icon="forward" menu="Products"> </span> </span> </li> </ul> </li> <li class="devsite-nav-item"> <a href="/web/20210126130738/https://firebase.google.com/use-cases" class="devsite-nav-title gc-analytics-event devsite-nav-has-children " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Use Cases" track-type="globalNav" track-metadata-eventdetail="globalMenu" track-metadata-position="nav" track-name="useCases"> <span class="devsite-nav-text" tooltip> Use Cases </span> <span class="devsite-nav-icon material-icons" data-icon="forward"> </span> </a> </li> <li class="devsite-nav-item"> <a href="/web/20210126130738/https://firebase.google.com/pricing" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Pricing" track-type="globalNav" track-metadata-eventdetail="globalMenu" track-metadata-position="nav" track-name="pricing"> <span class="devsite-nav-text" tooltip> Pricing </span> </a> </li> <li class="devsite-nav-item"> <a href="/web/20210126130738/https://firebase.google.com/docs" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Docs" track-type="globalNav" track-metadata-eventdetail="globalMenu" track-metadata-position="nav" track-name="docs"> <span class="devsite-nav-text" tooltip> Docs </span> </a> </li> <li class="devsite-nav-item"> <a href="/web/20210126130738/https://firebase.google.com/community" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Community" track-type="globalNav" track-metadata-eventdetail="globalMenu" track-metadata-position="nav" track-name="community"> <span class="devsite-nav-text" tooltip> Community </span> </a> </li> <li class="devsite-nav-item"> <a href="/web/20210126130738/https://firebase.google.com/support" class="devsite-nav-title gc-analytics-event devsite-nav-has-children devsite-nav-active" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Support" track-type="globalNav" track-metadata-eventdetail="globalMenu" track-metadata-position="nav" track-name="support"> <span class="devsite-nav-text" tooltip> Support </span> <span class="devsite-nav-icon material-icons" data-icon="forward"> </span> </a> </li> <li class="devsite-nav-item"> <a href="//web.archive.org/web/20210126130738/https://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" track-name="goToConsole"> <span class="devsite-nav-text" tooltip> Go to console </span> </a> </li> </ul> </div> <div class="devsite-mobile-nav-bottom" role="navigation"> <ul class="devsite-nav-list" menu="_book"> <li class="devsite-nav-item devsite-nav-heading"><div class="devsite-nav-title devsite-nav-title-no-path"><span class="devsite-nav-text" tooltip>Developer Support</span></div></li> <li class="devsite-nav-item"><a href="/web/20210126130738/https://firebase.google.com/support" class="devsite-nav-title"><span class="devsite-nav-text" tooltip>Contact Support</span></a></li> <li class="devsite-nav-item"><a href="/web/20210126130738/https://firebase.google.com/support/scope" class="devsite-nav-title"><span class="devsite-nav-text" tooltip>Scope of free support</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>Support Guides</span></div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/web/20210126130738/https://firebase.google.com/support/guides" class="devsite-nav-title"><span class="devsite-nav-text" tooltip>Overview</span></a></li><li class="devsite-nav-item"><a href="/web/20210126130738/https://firebase.google.com/support/faq" class="devsite-nav-title"><span class="devsite-nav-text" tooltip>FAQ</span></a></li><li class="devsite-nav-item"><a href="/web/20210126130738/https://firebase.google.com/support/guides/security-checklist" class="devsite-nav-title"><span class="devsite-nav-text" tooltip>Security checklist</span></a></li><li class="devsite-nav-item"><a href="/web/20210126130738/https://firebase.google.com/support/guides/launch-checklist" class="devsite-nav-title"><span class="devsite-nav-text" tooltip>Launch checklist</span></a></li><li class="devsite-nav-item"><a href="/web/20210126130738/https://firebase.google.com/support/guides/service-accounts" class="devsite-nav-title"><span class="devsite-nav-text" tooltip>Firebase service accounts</span></a></li><li class="devsite-nav-item"><a href="/web/20210126130738/https://firebase.google.com/support/guides/analytics-adsupport" class="devsite-nav-title"><span class="devsite-nav-text" tooltip>Enable the AdSupport framework</span></a></li><li class="devsite-nav-item"><a href="/web/20210126130738/https://firebase.google.com/support/guides/url-shortener" class="devsite-nav-title"><span class="devsite-nav-text" tooltip>Migrate from Google URL Shortener</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>Migrate from Parse</span></div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/web/20210126130738/https://firebase.google.com/support/guides/parse-android" class="devsite-nav-title"><span class="devsite-nav-text" tooltip>Android</span></a></li><li class="devsite-nav-item"><a href="/web/20210126130738/https://firebase.google.com/support/guides/parse-ios" class="devsite-nav-title"><span class="devsite-nav-text" tooltip>iOS</span></a></li></ul></li></ul></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>Cloud Audit Logs</span></div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/web/20210126130738/https://firebase.google.com/support/guides/cloud-audit-logging/firebase-management" class="devsite-nav-title"><span class="devsite-nav-text" tooltip>Firebase Management</span></a></li></ul></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>Recent Changes and Updates</span></div></li> <li class="devsite-nav-item"><a href="/web/20210126130738/https://firebase.google.com/support/releases" class="devsite-nav-title"><span class="devsite-nav-text" tooltip>Release Notes</span></a></li> <li class="devsite-nav-item"><a href="/web/20210126130738/https://firebase.google.com/support/release-notes/ios" class="devsite-nav-title"><span class="devsite-nav-text" tooltip>iOS Release Notes</span></a></li> <li class="devsite-nav-item"><a href="/web/20210126130738/https://firebase.google.com/support/release-notes/android" class="devsite-nav-title"><span class="devsite-nav-text" tooltip>Android Release Notes</span></a></li> <li class="devsite-nav-item"><a href="/web/20210126130738/https://firebase.google.com/support/release-notes/js" class="devsite-nav-title"><span class="devsite-nav-text" tooltip>JavaScript Release Notes</span></a></li> <li class="devsite-nav-item"><a href="/web/20210126130738/https://firebase.google.com/support/release-notes/cpp-relnotes" class="devsite-nav-title"><span class="devsite-nav-text" tooltip>C++ Release Notes</span></a></li> <li class="devsite-nav-item"><a href="/web/20210126130738/https://firebase.google.com/support/release-notes/unity" class="devsite-nav-title"><span class="devsite-nav-text" tooltip>Unity Release Notes</span></a></li> <li class="devsite-nav-item"><a href="/web/20210126130738/https://firebase.google.com/support/release-notes/admin/node" class="devsite-nav-title"><span class="devsite-nav-text" tooltip>Admin Node.js Release Notes</span></a></li> <li class="devsite-nav-item"><a href="/web/20210126130738/https://firebase.google.com/support/release-notes/admin/java" class="devsite-nav-title"><span class="devsite-nav-text" tooltip>Admin Java Release Notes</span></a></li> <li class="devsite-nav-item"><a href="/web/20210126130738/https://firebase.google.com/support/release-notes/admin/python" class="devsite-nav-title"><span class="devsite-nav-text" tooltip>Admin Python Release Notes</span></a></li> <li class="devsite-nav-item"><a href="/web/20210126130738/https://firebase.google.com/support/release-notes/admin/go" class="devsite-nav-title"><span class="devsite-nav-text" tooltip>Admin Go Release Notes</span></a></li> <li class="devsite-nav-item"><a href="/web/20210126130738/https://firebase.google.com/support/release-notes/admin/dotnet" class="devsite-nav-title"><span class="devsite-nav-text" tooltip>Admin .NET Release Notes</span></a></li> <li class="devsite-nav-item"><a href="/web/20210126130738/https://firebase.google.com/support/release-notes/security-rules" class="devsite-nav-title"><span class="devsite-nav-text" tooltip>Security Rules Release Notes</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>Legal Information</span></div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/web/20210126130738/https://firebase.google.com/terms" class="devsite-nav-title"><span class="devsite-nav-text" tooltip>Terms of Service</span></a></li><li class="devsite-nav-item"><a href="/web/20210126130738/https://firebase.google.com/terms/billing" class="devsite-nav-title"><span class="devsite-nav-text" tooltip>Paid Services Terms</span></a></li><li class="devsite-nav-item"><a href="/web/20210126130738/https://firebase.google.com/terms/data-processing-terms" class="devsite-nav-title"><span class="devsite-nav-text" tooltip>Data Processing and Security Terms</span></a></li><li class="devsite-nav-item"><a href="/web/20210126130738/https://firebase.google.com/terms/firebase-mcc" class="devsite-nav-title"><span class="devsite-nav-text" tooltip>Firebase DPST: Model Contract Clauses</span></a></li><li class="devsite-nav-item"><a href="/web/20210126130738/https://firebase.google.com/terms/service-level-agreement" class="devsite-nav-title"><span class="devsite-nav-text" tooltip>Service Level Agreement for Hosting and Realtime Database</span></a></li><li class="devsite-nav-item"><a href="/web/20210126130738/https://firebase.google.com/terms/service-level-agreement/cloud-storage" class="devsite-nav-title"><span class="devsite-nav-text" tooltip>Cloud Storage for Firebase Service Level Agreement</span></a></li><li class="devsite-nav-item"><a href="/web/20210126130738/https://firebase.google.com/terms/analytics" class="devsite-nav-title"><span class="devsite-nav-text" tooltip>Google Analytics for Firebase Terms</span></a></li><li class="devsite-nav-item"><a href="/web/20210126130738/https://firebase.google.com/policies/analytics" class="devsite-nav-title"><span class="devsite-nav-text" tooltip>Google Analytics for Firebase Use Policy</span></a></li><li class="devsite-nav-item"><a href="/web/20210126130738/https://firebase.google.com/policies/app-indexing" class="devsite-nav-title"><span class="devsite-nav-text" tooltip>Firebase App Indexing User Data Policy</span></a></li><li class="devsite-nav-item"><a href="/web/20210126130738/https://firebase.google.com/terms/crashlytics" class="devsite-nav-title"><span class="devsite-nav-text" tooltip>Crashlytics and App Distribution Terms</span></a></li><li class="devsite-nav-item"><a href="/web/20210126130738/https://firebase.google.com/terms/crashlytics-app-distribution-data-processing-terms" class="devsite-nav-title"><span class="devsite-nav-text" tooltip>Crashlytics and App Distribution Data Processing Terms</span></a></li><li class="devsite-nav-item"><a href="/web/20210126130738/https://firebase.google.com/terms/crashlytics-app-distribution-mcc" class="devsite-nav-title"><span class="devsite-nav-text" tooltip>Crashlytics and App Distributions DPST: Model Contract Clauses</span></a></li><li class="devsite-nav-item"><a href="/web/20210126130738/https://firebase.google.com/terms/subprocessors" class="devsite-nav-title"><span class="devsite-nav-text" tooltip>Firebase Subprocessors</span></a></li></ul></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>Privacy and Security Information</span></div><ul class="devsite-nav-section"><li class="devsite-nav-item"><a href="/web/20210126130738/https://firebase.google.com/support/privacy" class="devsite-nav-title"><span class="devsite-nav-text" tooltip>Privacy and Security in Firebase</span></a></li><li class="devsite-nav-item"><a href="/web/20210126130738/https://firebase.google.com/support/privacy/dpo_and_eu_rep" class="devsite-nav-title"><span class="devsite-nav-text" tooltip>Designate Data Protection Officers and EU Representatives</span></a></li><li class="devsite-nav-item"><a href="/web/20210126130738/https://firebase.google.com/support/privacy/dpo" class="devsite-nav-title"><span class="devsite-nav-text" tooltip>Firebase Data Privacy Inquiries</span></a></li><li class="devsite-nav-item"><a href="/web/20210126130738/https://firebase.google.com/support/privacy/manage-iids" class="devsite-nav-title"><span class="devsite-nav-text" tooltip>Manage Instance ID data</span></a></li><li class="devsite-nav-item"><a href="/web/20210126130738/https://firebase.google.com/support/privacy/clear-export-data" class="devsite-nav-title"><span class="devsite-nav-text" tooltip>Clear and export users' data</span></a></li><li class="devsite-nav-item"><a href="/web/20210126130738/https://firebase.google.com/support/privacy/storing-privacy-settings" class="devsite-nav-title"><span class="devsite-nav-text" tooltip>Storing privacy settings with Firebase</span></a></li><li class="devsite-nav-item"><a href="/web/20210126130738/https://firebase.google.com/support/privacy/init-options" class="devsite-nav-title"><span class="devsite-nav-text" tooltip>Troubleshoot initialization options</span></a></li></ul></li> </ul> <ul class="devsite-nav-list" menu="Products" aria-label="Side menu" hidden> <li class="devsite-nav-item"> <a href="/web/20210126130738/https://firebase.google.com/products-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" track-name="build"> <span class="devsite-nav-text" tooltip> Build </span> </a> </li> <li class="devsite-nav-item"> <a href="/web/20210126130738/https://firebase.google.com/products-release" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Release & Monitor" track-type="navMenu" track-metadata-eventdetail="globalMenu" track-metadata-position="nav" track-name="release&Monitor"> <span class="devsite-nav-text" tooltip> Release & Monitor </span> </a> </li> <li class="devsite-nav-item"> <a href="/web/20210126130738/https://firebase.google.com/products-engage" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Engage" track-type="navMenu" track-metadata-eventdetail="globalMenu" track-metadata-position="nav" track-name="engage"> <span class="devsite-nav-text" tooltip> Engage </span> </a> </li> </ul> </div> </div> </nav> </devsite-book-nav> <section id="gc-wrapper"> <main role="main" class="devsite-main-content" has-book-nav has-toc> <devsite-toc class="devsite-nav"></devsite-toc> <devsite-content> <article class="devsite-article"> <div class="devsite-banner devsite-banner-announcement"> <div class="devsite-banner-message"> <div class="devsite-banner-message-text"> <style> .devsite-banner-announcement:not(.devsite-banner-tenant) { background: #202124; color: white; font-weight: 500; } .devsite-banner-announcement a { color: white; font-weight: 700; } .devsite-banner-announcement a:link, .devsite-banner-announcement a:visited { 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> Google is committed to advancing racial equity for Black communities. <a href="https://web.archive.org/web/20210126130738/https://google.com/racialequity" class="gc-analytics-event" data-category="Announcement" data-label="Racial Equity">See how.</a> </div> </div> </div> <div class="devsite-article-meta" role="navigation"> <ul class="devsite-breadcrumb-list" aria-label="Breadcrumb"> <li class="devsite-breadcrumb-item "> <a href="https://web.archive.org/web/20210126130738/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://web.archive.org/web/20210126130738/https://firebase.google.com/support" 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=""> Support </a> </li> </ul> <devsite-page-rating position="header" selected-rating="0" hover-rating-star="0"> </devsite-page-rating> </div> <devsite-feedback position="header" project-name="Firebase" product-id="719752" bucket="" context="" version="t-devsite-webserver-20210114-r02-rc00.432497685912973661" data-label="Send Feedback Button" track-type="feedback" track-name="sendFeedbackLink" track-metadata-position="header" project-feedback-url="https://firebase.google.com/support/contact/bugs-features/" project-icon="https://firebase.google.com/_static/firebase/images/logo.png" project-support-url="https://firebase.google.com/support/" feedback-type="star-rating"> <button> Send feedback </button> </devsite-feedback> <h1 class="devsite-page-title">Firebase FAQ</h1> <devsite-toc class="devsite-nav" devsite-toc-embedded> </devsite-toc> <div class="devsite-article-body clearfix "> <p>Have other challenges or don't see your issue outlined below? Please <a href="/web/20210126130738/https://firebase.google.com/support/contact/bugs-features">report a bug or request a feature</a> and join the <a href="https://web.archive.org/web/20210126130738/https://stackoverflow.com/questions/tagged/firebase">Stack Overflow</a> discussions.</p> <h2 id="projects-and-apps" data-text="Firebase projects and Firebase apps">Firebase projects and Firebase apps</h2> <div class="expandable" id="what-is-a-project"> <h4 class="showalways" id="what-is-a-project" data-text=" What is a Firebase project? "> What is a Firebase project? </h4> <p>A project is a container for apps across iOS, Android and web. It supports sharing of features such as Database, Config and Notifications between your cross-platform apps.</p> <p>You should add iOS, Android and web app variants to a single project. You can use multiple projects to support multiple environments, such as development, staging and production.</p> </div> <div class="expandable" id="add-firebase-to-cloud-project"> <h4 class="showalways" id="add-firebase-to-cloud-project" data-text=" How do I add Firebase to an existing Google Cloud project? "> How do I add Firebase to an existing Google Cloud project? </h4> <p>You may have existing projects managed through the <a href="//web.archive.org/web/20210126130738/https://console.cloud.google.com/">Google Cloud console</a> or the <a href="//web.archive.org/web/20210126130738/https://console.developers.google.com/">Google APIs console</a>. By default, these projects are visible in the <a href="//web.archive.org/web/20210126130738/https://console.firebase.google.com/" class="link external gc-analytics-event" data-category="console" data-action="linkClick">Firebase console</a>, but are not considered to be Firebase projects.</p> <p>To add Firebase to your existing Google Cloud project, click <b>Add Project</b> on the <a href="//web.archive.org/web/20210126130738/https://console.firebase.google.com/" class="link external gc-analytics-event" data-category="console" data-action="linkClick">Firebase console</a> landing page, then select your project in the <b>Project name</b> menu.</p> </div> <div class="expandable" id="projects-per-account"> <h4 class="showalways" id="projects-per-account" data-text=" How many projects can I have per account? "> How many projects can I have per account? </h4> <ul> <li>Free-tier Spark plan — Your project quota is limited to a small number of projects (usually around 5-10).</li> <li>Paid plans — Your project quota per Cloud Billing account increases substantially as long as your Cloud Billing account is in good standing.</li> </ul> <p>The limit on project quota is rarely a concern for most developers, but if needed, you can <a href="https://web.archive.org/web/20210126130738/https://support.google.com/cloud/answer/6330231">request an increase in your project quota</a>.</p> <p>Note that the complete deletion of a project requires 30 days and counts toward your quota until it is fully deleted.</p> </div> <div class="expandable" id="apps-per-project"> <h4 class="showalways" id="apps-per-project" data-text=" How many Firebase Apps can I have in a Firebase project? "> How many Firebase Apps can I have in a Firebase project? </h4> <p>A Firebase project is a container for Firebase Apps across iOS, Android, and web. <strong>Firebase restricts the total number of Firebase Apps within a Firebase project to 30.</strong> </p> <p>After this number, performance starts to degrade (especially for Google Analytics) and eventually, at a higher number of apps, some product functionality stops working. Additionally, adding a Firebase App to a project creates one or more underlying OAuth 2.0 client IDs. There's a limit of around 30 client IDs that can be created within a single project. </p> <p>You should ensure that all Firebase Apps within a single Firebase project are platform variants of the same application from an end-user perspective. For example, if you develop a white label application, each independently labelled app should have its own Firebase project. Visit <a href="/web/20210126130738/https://firebase.google.com/docs/projects/learn-more#best-practices">Understand Firebase Projects</a> to learn more best practices about Firebase projects and Firebase Apps. </p> <p>If you determine that your Firebase project needs more than the 30 app limit, you can request an app limit increase via the <a href="//web.archive.org/web/20210126130738/https://console.cloud.google.com/admin/quotas?project=_" class="external">Google Cloud console</a>. Learn more about <a href="//web.archive.org/web/20210126130738/https://cloud.google.com/docs/quota#requesting_higher_quota" class="external">quota management</a> in the Google Cloud documentation. </p> </div> <div class="expandable" id="find-app-id"> <h4 class="showalways" id="find-app-id" data-text=" Where can I find the App ID for my Firebase app? "> Where can I find the App ID for my Firebase app? </h4> <p>In the Firebase console, go to your <span class="material-icons" aria-hidden="true" translate="no">settings</span> <a href="//web.archive.org/web/20210126130738/https://console.firebase.google.com/project/_/settings/general/" class="external"><b>Project settings</b></a>. Scroll down to the <i>Your apps</i> card, then click on the desired Firebase App to view the app's information, including its <i>App ID</i>. </p> <p>Here are some example App ID values:</p> <ul> <li> Firebase iOS Apps: <code translate="no" dir="ltr">1:1234567890:ios:321abc456def7890</code> </li> <li> Firebase Android Apps: <code translate="no" dir="ltr">1:1234567890:android:321abc456def7890</code> </li> <li> Firebase Web Apps: <code translate="no" dir="ltr">1:1234567890:web:321abc456def7890</code> </li> </ul> </div> <div class="expandable" id="android-sha1"> <h4 class="showalways" id="android-sha1" data-text=" Do I need to provide a SHA-1 when adding an Android app? "> Do I need to provide a SHA-1 when adding an Android app? </h4> <p><a class="external" href="//web.archive.org/web/20210126130738/https://developers.google.com/android/guides/client-auth">SHA-1 information</a> is required by Firebase Authentication (when using <a href="/web/20210126130738/https://firebase.google.com/docs/auth/android/google-signin">Google signin</a> or <a href="/web/20210126130738/https://firebase.google.com/docs/auth/android/phone-auth">phone number signin</a>) and <a href="/web/20210126130738/https://firebase.google.com/docs/dynamic-links">Firebase Dynamic Links</a>. If you're not using these features, you don't have to provide a SHA-1.</p> </div> <div class="expandable" id="error-oauth2-client"> <h4 class="showalways" id="error-oauth2-client" data-text=" How do I resolve this error: "An OAuth2 client already exists for this package name and SHA-1 in another project"? "> How do I resolve this error: "An OAuth2 client already exists for this package name and SHA-1 in another project"? </h4> <p>This error occurs if we detect that another Firebase or Google Cloud project contains an OAuth 2.0 client ID with the package name and SHA-1 that you specified. You can resolve this by <a href="https://web.archive.org/web/20210126130738/https://support.google.com/firebase/answer/6401008">following the instructions here</a>. </p> </div> <div class="expandable" id="gmaven-repo-error"> <h4 class="showalways" id="gmaven-repo-error" data-text=" When I add Firebase to my Android project, I get a "Could not find" error. "> When I add Firebase to my Android project, I get a "Could not find" error. </h4> <p>This error usually means that your app is missing one or more references to Google's Maven repository. In your <strong>project-level</strong> <code translate="no" dir="ltr">build.gradle</code> file, make sure to include Google's Maven repository (<code translate="no" dir="ltr">google()</code>) in both your <code translate="no" dir="ltr">buildscript</code> and <code translate="no" dir="ltr">allprojects</code> sections. </p> </div> <div class="expandable" id="integrations-linking-prereqs"> <h4 class="showalways" id="integrations-linking-prereqs" data-text=" What are the prerequisites for linking Play/AdMob/AdWords/BigQuery to my Firebase project? "> What are the prerequisites for linking Play/AdMob/AdWords/BigQuery to my Firebase project? </h4> <ul> <li>For linking your <strong>Play account</strong>, you need to be both a Firebase project owner and a Play account owner.</li> <li>For linking your <strong>AdMob app</strong>, you need to be both a Firebase project owner and an AdMob administrator.</li> <li>For linking your <strong>AdWords account</strong>, you need to be both a Firebase project owner and an AdWords administrator.</li> <li>For linking your <strong>BigQuery project</strong>, you need to be the Firebase project owner.</li> </ul> </div> <div class="expandable" id="oss-license"> <h4 class="showalways" id="oss-license" data-text=" What open source notices should I include in my app? "> What open source notices should I include in my app? </h4> <p>On iOS, the Firebase pod contains a NOTICES file which includes the relevant entries. The Android SDK contains contains a <a href="https://web.archive.org/web/20210126130738/https://developers.google.com/android/guides/opensource">helper activity</a> for showing license information. </p> </div> <div class="expandable" id="xcode-support"> <h4 class="showalways" id="xcode-support" data-text=" What versions of Xcode does Firebase support? "> What versions of Xcode does Firebase support? </h4> <p>Firebase supports up to two major versions of Xcode, not including versions of Xcode that Apple no longer supports. For example, starting in March 2019, Apple requires at least iOS 12 on all iOS apps, meaning Xcode 9 support will be dropped and Xcode 10 will be the only major version supported.</p> <p>Changes to support for specific minor or patch versions of Xcode (for example, 9.2.0 to 9.4.1) are determined based on the needs of the Firebase iOS SDK and a survey of developer usage. These changes are reflected in the <a href="//web.archive.org/web/20210126130738/https://firebase.google.com/support/release-notes/ios">Firebase iOS SDK release notes</a> and on the <a href="//web.archive.org/web/20210126130738/https://firebase.google.com/docs/ios">Firebase iOS SDK setup page</a>.</p> <p>To see the minimum Xcode version supported by the Firebase iOS SDK, check the requirements listed in <a href="//web.archive.org/web/20210126130738/https://firebase.google.com/docs/ios">Add Firebase to your iOS Project</a>.</p> <p>Firebase support for Beta releases of Xcode is available on a "best effort" basis. Developers can track and submit issues in the <a href="https://web.archive.org/web/20210126130738/https://github.com/firebase/firebase-ios-sdk/issues">Firebase iOS SDK repository on GitHub</a>.</p> </div> <h2 id="firebase-console" data-text="Firebase console">Firebase console</h2> <div class="expandable" id="platform-browser-support"> <h4 class="showalways" id="platform-browser-support" data-text=" What are the supported browsers for accessing Firebase console? "> What are the supported browsers for accessing Firebase console? </h4> <p>The Firebase console can be accessed from recent versions of popular desktop browsers such as Chrome, Firefox, Safari and Edge. Mobile browsers are currently not fully supported. </p> </div> <div class="expandable" id="console-language"> <h4 class="showalways" id="console-language" data-text=" How is my Firebase console language determined? "> How is my Firebase console language determined? </h4> <p>The language setting for the Firebase console is based on the language selected in your <a href="//web.archive.org/web/20210126130738/https://myaccount.google.com/language">Google account settings</a>. To change your language preference, see <a href="https://web.archive.org/web/20210126130738/https://support.google.com/accounts/answer/32047"> Change language</a>.</p> <p>The Firebase console is available in the following languages:</p> <ul> <li>English</li> <li>Brazilian Portuguese</li> <li>French</li> <li>German</li> <li>Indonesian</li> <li>Japanese</li> <li>Korean</li> <li>Russian</li> <li>Simplified Chinese</li> <li>Spanish</li> <li>Traditional Chinese</li> </ul> </div> <div class="expandable" id="console-roles"> <h4 class="showalways" id="console-roles" data-text=" What roles and permissions does the Firebase console support? "> What roles and permissions does the Firebase console support? </h4> <p>The Firebase console and Google Cloud console use the same underlying roles and permissions. Learn more about roles and permissions in the <a href="/web/20210126130738/https://firebase.google.com/docs/projects/iam/overview">Firebase IAM documentation</a>. </p> <p>Firebase supports the <a href="/web/20210126130738/https://firebase.google.com/docs/projects/iam/roles-basic">fundamental (basic) roles</a> of Owner, Editor, and Viewer: </p> <ul> <li>A project <strong>Owner</strong> can add other members to the project, set up <a href="//web.archive.org/web/20210126130738/https://console.firebase.google.com/project/_/settings/integrations" class="external">integrations</a> (project linking to services like BigQuery or Slack), and has full edit access for the project. </li> <li>A project <strong>Editor</strong> has full edit access for the project. </li> <li>A project <strong>Viewer</strong> has only read access for the project. Note that the Firebase console currently does not hide/disable edit UI controls from project Viewers, but these operations will fail for project members assigned the Viewer role. </li> </ul> <p>Firebase also supports:</p> <ul> <li><a href="/web/20210126130738/https://firebase.google.com/docs/projects/iam/roles-predefined"><strong>Firebase predefined roles</strong></a> — Curated Firebase-specific roles that enable more granular access control than the basic roles of Owner, Editor, and Viewer. </li> <li><a href="/web/20210126130738/https://firebase.google.com/docs/projects/iam/roles-custom"><strong>Custom roles</strong></a> — Fully customized IAM roles that you create to tailor a set of permissions that meet the specific requirements of your organization. </li> </ul> </div> <h2 id="pricing" data-text="Pricing">Pricing</h2> <p> <aside class="warning">As of January 2020, Firebase has started the process to retire the Flame billing plan.<br>Projects can no longer switch to or sign-up for the Flame plan, and references have been removed from documentation. <a href="#flame-plan-legacy">Learn more.</a> </aside> </p> <div class="expandable" id="pricing-paid-free-features"> <h4 class="showalways" id="pricing-paid-free-features" data-text=" Which products are paid? Which are free? "> Which products are paid? Which are free? </h4> <p> Firebase's paid infrastructure products are the Realtime Database, Storage, functions, Hosting, Test Lab, and phone authentication. We offer a free tier for all of these features. </p> <p> Firebase also has many free products: Analytics, Cloud Messaging, the Notifications composer, Remote Config, App Indexing, Dynamic Links, and Crash Reporting. You can use an unlimited amount of any of these products in all plans, including our free Spark plan. In addition, all Authentication features beyond phone authentication are free. </p> </div> <p><section class="expandable" id="pricing-free-trial"> <h4 class="showalways" id="pricing-free-trial" data-text=" Does Firebase offer free trial credits for paid products? "> Does Firebase offer free trial credits for paid products? </h4></p> <p>Firebase paid services can be used under the <a href="//web.archive.org/web/20210126130738/https://cloud.google.com/free/docs/gcp-free-tier#free-trial" class="external">Google Cloud Free Trial</a>. New Google Cloud and Firebase users can take advantage of a 90-day trial period that includes $300 in free Cloud Billing credits to explore and evaluate Google Cloud and Firebase products and services.</p> <p>During the Google Cloud Free Trial period, you'll be provided a Free Trial Cloud Billing account. Any Firebase project that uses that billing account will be on the Blaze billing plan during the free trial period.</p> <p>Don't worry, setting up this Free Trial Cloud Billing account does not enable us to charge you. You are not charged unless you explicitly enable billing by upgrading your Free Trial Cloud Billing account to a paid account. You can upgrade to a paid account at any time during the trial. After you've upgraded, you can still use any remaining credits (within the 90-day period).</p> <p>Once the free trial expires, you'll need to either downgrade your project to the Spark billing plan or <a href="//web.archive.org/web/20210126130738/https://console.firebase.google.com/project/_/overview?purchaseBillingPlan=metered">set up the Blaze pay-as-you-go billing plan</a> in the Firebase console to continue using your Firebase project.</p> <p>Learn more about the <a href="https://web.archive.org/web/20210126130738/https://cloud.google.com/free/docs/gcp-free-tier#free-trial">Google Cloud Free Trial</a>.</p> <p></section></p> <div class="expandable" id="pricing-right-plan"> <h4 class="showalways" id="pricing-right-plan" data-text=" How do I know which plan is right for me? "> How do I know which plan is right for me? </h4> <h5 id="spark-billing-plan" data-text="Spark billing plan">Spark billing plan</h5> <p> Our Spark plan is a great place to develop your app for free. You get all the free Firebase features (Analytics, the Notifications composer, Crash Reporting, and so on) and generous amounts of our paid infrastructure features. However, if you exceed your Spark plan resources in a calendar month, your app will be shut off for the remainder of that month. In addition, Google Cloud features are not available in the Spark tier. </p> <h5 id="blaze-billing-plan" data-text="Blaze billing plan">Blaze billing plan</h5> <p> Our Blaze plan is designed for production apps. The Blaze plan also allows you to extend your app with paid Google Cloud features. You pay only for the resources that you consume, allowing you to scale with demand. We strive to make our Blaze plan prices competitive with industry-leading cloud providers. </p> </div> <div class="expandable" id="monitor-usage-billing"> <h4 class="showalways" id="monitor-usage-billing" data-text=" How can I monitor my usage and billing? "> How can I monitor my usage and billing? </h4> <p> You can track your usage of project resources in the Firebase console on any of the following dashboards: </p> <ul> <li> <a href="//web.archive.org/web/20210126130738/https://console.firebase.google.com/project/_/usage">Usage and billing dashboard</a> </li> <li> <a href="//web.archive.org/web/20210126130738/https://console.firebase.google.com/project/_/storage/usage/current-billing/total_bytes">Cloud Storage Usage dashboard</a> </li> <li> <a href="//web.archive.org/web/20210126130738/https://console.firebase.google.com/project/_/database/usage/last-30d/bandwidth">Database Usage dashboard</a> (both Cloud Firestore and Realtime Database) </li> <li> <a href="//web.archive.org/web/20210126130738/https://console.firebase.google.com/project/_/hosting/usage/last-30d/bandwidth">Hosting Usage dashboard</a> </li> </ul> </div> <div class="expandable" id="flame-plan-legacy"> <h4 class="showalways" id="flame-plan-legacy" data-text=" What happened to the Flame billing plan? "> What happened to the Flame billing plan? </h4> <p> As of January 2020, the Flame billing plan ($25/mo of additional quota) is no longer available for new sign-ups. </p> <ul> <li>Existing Spark and Blaze plan projects and any new projects can no longer switch to or sign up for the Flame plan. </li> <li>If you move an existing Flame plan project to a different billing plan, the project cannot return to the Flame plan. </li> <li>Existing Flame plan projects can continue to use the Flame plan for now. However, you'll receive information in the coming months about the required timeline for moving to another billing plan. </li> <li>References to the Flame plan have been removed from documentation. </li> </ul> <p> Do you have more questions about the Flame plan retirement? Read some of the <a href="#flame-plan-legacy-additional-faqs">additional FAQs</a> below. </p> <p> Want to learn about the other billing plans offered by Firebase? Visit our <a href="/web/20210126130738/https://firebase.google.com/pricing">Firebase pricing page</a>! If you'd like to start moving any existing projects to another billing plan, you can do that in the <a href="https://web.archive.org/web/20210126130738/https://console.firebase.google.com/project/_/usage/details">Firebase console</a> for your project. </p> <div class="expandable"> <p class="showalways"> For existing Flame plan projects, plan quotas and feature availability remain in effect. </p> <ul> <li><b>The Flame plan does <em>not</em> provide any usage quota for the following products:</b><br> BigQuery and other Google Cloud IaaS </li> <li><b>The Flame plan includes free usage quota for the following products:</b><br> A/B Testing, Analytics, App Indexing, Cloud Messaging (FCM), Crashlytics, Dynamic Links, Performance Monitoring, Predictions, and Remote Config </li> <li><p><b>The Flame plan includes usage quota for the following products:</b></p> <table> <thead> <tr><th width="30%">Product</th><th>Feature</th><th>Included in the Flame plan</th></tr> </thead> <tbody> <tr class="alt"><td rowspan="4"><b>Authentication</b></td></tr> <tr class="alt"><td>Phone Auth - US, Canada, and India</td><td>10k/month</td></tr> <tr class="alt"><td>Phone Auth - All other countries</td><td>10k/month</td></tr> <tr class="alt"><td>Other Authentication services and features</td><td>✔ (free)</td></tr> <tr><td rowspan="6"><b>Cloud Firestore</b></td></tr> <tr><td>Data storage</td><td>2.5 GiB total</td></tr> <tr><td>Network egress</td><td>20 GiB/month</td></tr> <tr><td>Document writes</td><td>100k/day</td></tr> <tr><td>Document reads</td><td>250k/day</td></tr> <tr><td>Document deletes</td><td>100k/day</td></tr> <tr class="alt"><td rowspan="5"><b>Cloud Functions for Firebase</b></td></tr> <tr class="alt"><td>Invocations</td><td>2M/month</td></tr> <tr class="alt"><td>GB-seconds</td><td>400k/month</td></tr> <tr class="alt"><td>CPU-seconds</td><td>200k/month</td></tr> <tr class="alt"><td>Outbound networking</td><td>5 GB/month</td></tr> <tr><td rowspan="5"><b>Hosting</b></td></tr> <tr><td>Data storage</td><td>10 GB total</td></tr> <tr><td>Data transfer</td><td>50 GB/month</td></tr> <tr><td>Custom domain and SSL</td><td>✔ (free)</td></tr> <tr><td>Multiple sites per project</td><td>✔ (free)</td></tr> <tr class="alt"><td rowspan="5"><b>Firebase ML</b></td></tr> <tr class="alt"><td>Custom model hosting/serving</td><td>✔ (free)</td></tr> <tr class="alt"><td>AutoML Vision Edge dataset</td><td>1k images/project</td></tr> <tr class="alt"><td>AutoML Vision Edge training</td><td>3 hours/project</td></tr> <tr class="alt"><td>Cloud Vision APIs</td><td>not included</td></tr> <tr><td rowspan="5"><b>Realtime Database</b></td></tr> <tr><td>Simultaneous connections</td><td>200k</td></tr> <tr><td>Data storage</td><td>2.5 GB total</td></tr> <tr><td>Data download</td><td>20 GB/month</td></tr> <tr><td>Multiple databases per project</td><td>not included</td></tr> <tr class="alt"><td rowspan="6"><b>Cloud Storage</b></td></tr> <tr class="alt"><td>Data storage</td><td>50 GB total</td></tr> <tr class="alt"><td>Data download</td><td>50 GB/day</td></tr> <tr class="alt"><td>Upload operations</td><td>100k/day</td></tr> <tr class="alt"><td>Download operations</td><td>250k/day</td></tr> <tr class="alt"><td>Multiple buckets per project</td><td>not included</td></tr> <tr><td rowspan="3"><b>Test Lab</b></td></tr> <tr><td>Virtual device tests</td><td>10 tests/day</td></tr> <tr><td>Physical device tests</td><td>5 tests/day</td></tr> </tbody> </table> </li> </ul> </div> <p><h5 id="flame-plan-legacy-additional-faqs" data-text=" Additional FAQs about the Flame plan retirement "> Additional FAQs about the Flame plan retirement </h5></p> <p><div class="expandable"> <p class="showalways"> What happens to my existing Flame plan projects right now? </p> <p> For now, there's no change to your project or billing. However, you'll receive information in the coming months about the required timeline for moving to another billing plan. </p> </div></p> <p><div class="expandable"> <p class="showalways"> What will happen to my existing Flame plan projects in the future? </p> <p> At this time, there's no specific schedule to move Flame plan projects to a different billing plan. However, you'll receive information in the coming months about the required timeline for moving to another billing plan. </p> </div></p> <p><div class="expandable"> <p class="showalways"> I have a project/a process/a business model that relies on a fixed Firebase cost. What should I do? </p> <p> Sign up for the Blaze pay-as-you-go plan, and make sure to set project <a href="https://web.archive.org/web/20210126130738/https://cloud.google.com/billing/docs/how-to/budgets">budget alerts</a>. </p> </div></p> <p><div class="expandable"> <p class="showalways"> May I be given special access to create new Flame plan projects? </p> <p> No, Firebase isn't offering special access for projects to switch to or sign-up for the Flame plan. </p> </div></p> <p><div class="expandable"> <p class="showalways"> I changed my Flame plan project to a different billing plan. How do I change it back? </p> <p> Switching to the Flame plan is no longer possible. For access to services provided by the Flame plan, make sure that you're using the Blaze pay-as-you-go plan, and consider <a href="//web.archive.org/web/20210126130738/https://cloud.google.com/billing/docs/how-to/budgets" class="external">setting budget alerts</a> for your project. </p> </div></p> <p><div class="expandable"> <p class="showalways"> My project was automatically switched to a different billing plan as part of the Flame plan retirement. What should I do? </p> <p> Automatic billing plan changes are not part of the current scope for Flame plan retirement. Make sure to check your audit logs for billing changes. </p> </div></p> <p><div class="expandable"> <p class="showalways"> Why is the Flame plan being retired? </p> <p> Over the years, we've seen declining usage of the Flame plan, and most projects that use the plan are not consuming its full value. Maintaining this billing plan is generally not cost-effective, and we feel that we can serve everyone better if resources went to other Firebase initiatives. </p> </div> </div></p> <div class="expandable" id="pricing-blaze-free"> <h4 class="showalways" id="pricing-blaze-free" data-text=" How is the free usage in the Blaze plan different from the free usage in the Spark plan? "> How is the free usage in the Blaze plan different from the free usage in the Spark plan? </h4> <p> Free usage on the Blaze plan is calculated daily. Usage limits also differ from the Spark plan for Cloud Functions, phone authentication and Test Lab. </p> <p>For Cloud Functions, free usage on the Blaze plan is calculated at the billing account level, not the project level and has the following limits: </p> <ul> <li>2M invocations/month</li> <li>400K GB-seconds/month</li> <li>200K CPU-seconds/month</li> <li>5 GB of networking egress/month</li> </ul> <p> For phone authentication, free usage on the Blaze plan is calculated monthly. </p> <p> For Test Lab, free usage on the Blaze plan has the following limits: </p> <ul> <li>30 physical device minutes/day</li> <li>60 virtual device minutes/day</li> </ul> </div> <div class="expandable" id="pricing-blaze-upgrade"> <h4 class="showalways" id="pricing-blaze-upgrade" data-text=" Does the free usage quota reset when I change from a Spark to a Blaze plan? "> Does the free usage quota reset when I change from a Spark to a Blaze plan? </h4> <p> Free usage from the Spark plan is included in the Blaze plan. Free usage does not reset when moving to a Blaze plan. </p> </div> <div class="expandable" id="pricing-simultaneous"> <h4 class="showalways" id="pricing-simultaneous" data-text=" What is a "simultaneous database connection"? "> What is a "simultaneous database connection"? </h4> <p> A simultaneous connection is equivalent to one mobile device, browser tab, or server app connected to the database. Firebase imposes hard limits on the number of simultaneous connections to your app's database. These limits are in place to protect both Firebase and our users from abuse. </p> <p> The Spark plan limit is 100 and cannot be raised. The Flame and Blaze plans have a limit of 200,000 simultaneous connections per database. </p> <p> This limit isn't the same as the total number of users of your app, because your users don't all connect at once. If you need more than 200,000 simultaneous connections, please read <a href="/web/20210126130738/https://firebase.google.com/docs/database/usage/sharding"> Scale with Multiple Databases</a>. </p> <aside class="warning">As of January 2020, Firebase has started the process to retire the Flame billing plan.<br>Projects can no longer switch to or sign-up for the Flame plan, and references have been removed from documentation. <a href="#flame-plan-legacy">Learn more.</a> </aside> </div> <div class="expandable" id="pricing-exceed"> <h4 class="showalways" id="pricing-exceed" data-text=" What happens if I exceed Spark plan storage or download limits for Realtime Database? "> What happens if I exceed Spark plan storage or download limits for Realtime Database? </h4> <p> To provide you with a predictable price, the resources available to you in the Spark plans are capped. This means that when you exceed any plan limit in any month, your app will be turned off to prevent any further resource usage and additional charges. </p> <aside class="warning">As of January 2020, Firebase has started the process to retire the Flame billing plan.<br>Projects can no longer switch to or sign-up for the Flame plan, and references have been removed from documentation. <a href="#flame-plan-legacy">Learn more.</a> </aside> </div> <div class="expandable" id="pricing-exceed-2"> <h4 class="showalways" id="pricing-exceed-2" data-text=" What happens if I exceed Spark plan simultaneous connection limits for Realtime Database? "> What happens if I exceed Spark plan simultaneous connection limits for Realtime Database? </h4> <p> When your app reaches its concurrents limit on the Spark plan, any subsequent connections will be rejected until some of the existing connections are closed. The app will continue to work for users who are connected. </p> </div> <div class="expandable" id="pricing-exceed-3"> <h4 class="showalways" id="pricing-exceed-3" data-text=" What happens if I exceed Spark plan upload, download or storage limits for Cloud Storage? "> What happens if I exceed Spark plan upload, download or storage limits for Cloud Storage? </h4> <p> When you exceed limits for Cloud Storage in a project on the Spark plan, the result depends on the type of limit that you exceed: </p> <ul> <li>If you exceed the <strong>GB stored</strong> limit, you will not be able to store any more data in that project unless you remove some of the data stored or upgrade to a plan that provides more storage space, or unlimited storage space. </li> <li>If you exceed the <strong>GB downloaded</strong> limit, your app will not be able to download more data until the next day (starting at midnight, US Pacific Time), unless you upgrade to a plan with less restrictive limits, or with no limits. </li> <li>If you exceed the <strong>upload or download operations</strong> limit, your app will not be able to upload or download more data until the next day (starting at midnight, US Pacific Time), unless you upgrade to a plan with less restrictive limits, or with no limits. </li> </ul> <aside class="warning">As of January 2020, Firebase has started the process to retire the Flame billing plan.<br>Projects can no longer switch to or sign-up for the Flame plan, and references have been removed from documentation. <a href="#flame-plan-legacy">Learn more.</a> </aside> </div> <div class="expandable" id="pricing-cloud"> <h4 class="showalways" id="pricing-cloud" data-text=" How does Firebase's integration with Google Cloud work? "> How does Firebase's integration with Google Cloud work? </h4> <p> Firebase is deeply integrated with <a target="_blank" href="https://web.archive.org/web/20210126130738/https://cloud.google.com/">Google Cloud</a>. Projects are shared between Firebase and Google Cloud, so projects can have Firebase services and Google Cloud services enabled. You can access the same project from the Firebase console or the Google Cloud console. Specifically: </p> <ul> <li> Certain Firebase products are backed directly by Google Cloud, such as Firebase Storage. The list of products backed by Google Cloud will continue to grow over time. </li> <li> Many of your settings, including collaborators and billing information, are shared by Firebase and Google Cloud. Your usage of both Firebase and Google Cloud appears on the same bill. </li> </ul> <p> In addition, when you upgrade to the Blaze plan, you can use any of Google Cloud's world-class Infrastructure-as-a-Service and APIs directly inside your Firebase project, at standard <a href="https://web.archive.org/web/20210126130738/https://cloud.google.com/pricing/">Google Cloud pricing</a>. You can also export data from Google Cloud directly to BigQuery for analysis. To learn more, see <a href="https://web.archive.org/web/20210126130738/https://support.google.com/firebase/answer/6318765"> Link BigQuery with Firebase.</a> </p> <p> There are many security-enhancing, latency-improving, and time-saving benefits to using Google Cloud with Firebase (versus other, cloud services that are not co-located). Check out the <a target="_blank" href="https://web.archive.org/web/20210126130738/https://cloud.google.com/">Google Cloud</a> site for more details. </p> </div> <div class="expandable" id="effects-billing-cloud-console"> <h4 class="showalways" id="effects-billing-cloud-console" data-text=" What happens to my Firebase project if I add or remove billing accounts for that project in the Google Cloud console? "> What happens to my Firebase project if I add or remove billing accounts for that project in the Google Cloud console? </h4> <p> If a billing account is added to a project in the Google Cloud console, the same project will automatically be upgraded to the Firebase Blaze plan if that project is currently on the Spark plan. </p> <p> In contrast, if an existing active billing account is removed from a project in the Google Cloud console, that project will be downgraded to the Firebase Spark plan. </p> <aside class="warning">As of January 2020, Firebase has started the process to retire the Flame billing plan.<br>Projects can no longer switch to or sign-up for the Flame plan, and references have been removed from documentation. <a href="#flame-plan-legacy">Learn more.</a> </aside> </div> <div class="expandable" id="pricing-modify-plan"> <h4 class="showalways" id="pricing-modify-plan" data-text=" Can I upgrade, downgrade, or cancel at any time? "> Can I upgrade, downgrade, or cancel at any time? </h4> <p> Yes, you can upgrade, downgrade, or cancel at any time. Note that we don't provide prorated refunds for downgrades or cancellations. This means that if you downgrade or cancel before the end of your billing period, you still pay for the remainder of the month. </p> </div> <div class="expandable" id="pricing-support"> <h4 class="showalways" id="pricing-support" data-text=" What kind of support will I receive? "> What kind of support will I receive? </h4> <p> All Firebase apps, including free plans, come with email support from Firebase staff during US Pacific business hours. All accounts have unlimited support for billing-related issues, account-related issues, technical (troubleshooting) questions, and incident reports. </p> </div> <div class="expandable" id="pricing-blaze-usage"> <h4 class="showalways" id="pricing-blaze-usage" data-text=" Can I cap usage on the Blaze plan? "> Can I cap usage on the Blaze plan? </h4> <p> No, you cannot currently cap your Blaze plan usage. We are evaluating options for supporting caps on Blaze plan usage. </p> <p> Blaze users can define a budget for their project or account, and receive alerts as their spending approaches those limits. For more information see <a href="https://web.archive.org/web/20210126130738/https://cloud.google.com/billing/docs/how-to/budgets" target="_blank"> Set Budget Alerts</a>. </p> </div> <div class="expandable" id="pricing-backups"> <h4 class="showalways" id="pricing-backups" data-text=" What are automated backups? Do you offer hourly backups? "> What are automated backups? Do you offer hourly backups? </h4> <p> <a href="/web/20210126130738/https://firebase.google.com/docs/database/backups" target="_blank">Automated backups</a> are an advanced feature for customers on our blaze plan that backs up your Firebase Realtime Database data once a day and uploads it to <a href="https://web.archive.org/web/20210126130738/https://cloud.google.com/storage/" target="_blank">Google Cloud Storage</a>. </p> <p> We do not offer hourly backups. </p> </div> <div class="expandable" id="pricing-discounts"> <h4 class="showalways" id="pricing-discounts" data-text=" Do you offer open-source, nonprofit, or educational discounts? "> Do you offer open-source, nonprofit, or educational discounts? </h4> <p> Our Spark and Flame plans can be used by any type of individual or organization, including nonprofits, schools, and open-source projects. Since these plans already include generous quotas, we don't offer any special discounts or plans for open-source, nonprofit, or educational projects. </p> <aside class="warning">As of January 2020, Firebase has started the process to retire the Flame billing plan.<br>Projects can no longer switch to or sign-up for the Flame plan, and references have been removed from documentation. <a href="#flame-plan-legacy">Learn more.</a> </aside> </div> <div class="expandable" id="pricing-enterprise"> <h4 class="showalways" id="pricing-enterprise" data-text=" Do you offer enterprise contracts, pricing, support, or dedicated infrastructure hosting? "> Do you offer enterprise contracts, pricing, support, or dedicated infrastructure hosting? </h4> <p> Our Blaze plan is suitable for enterprises of all sizes, and our <a href="/web/20210126130738/https://firebase.google.com/terms/service-level-agreement" target="_blank">SLA</a> meets or exceeds the industry standard for cloud infrastructure. However, we do not currently offer Enterprise contracts, pricing, or support, nor do we offer dedicated infrastructure hosting (that is, on-premises installations) for services like our Realtime Database. We are hard at work adding some of these features. </p> </div> <div class="expandable" id="pricing-payg"> <h4 class="showalways" id="pricing-payg" data-text=" Do you offer ad-hoc pricing? I only want pay-as-you-go for one or two features. "> Do you offer ad-hoc pricing? I only want pay-as-you-go for one or two features. </h4> <p> We offer ad-hoc pricing in the Blaze plan, where you pay only for the features you use. </p> </div> <div class="expandable" id="pricing-adwords"> <h4 class="showalways" id="pricing-adwords" data-text=" How do the paid Firebase plans work with Ads? Are there free advertising credits with paid plans? "> How do the paid Firebase plans work with Ads? Are there free advertising credits with paid plans? </h4> <p> The Firebase pricing plans are separate from Ads, so there are no free advertising credits. As a Firebase developer, you are able to "link" your Ads account to Firebase to support conversion tracking. </p> <p> All ads campaigns are managed directly in Ads, and Ads billing is managed from the Ads console. </p> </div> <h3 id="functions-pricing" data-text="Cloud Functions pricing">Cloud Functions pricing</h3> <p><section class="expandable"> <h4 class="showalways" id="why-do-i-need-a-billing-account-to-use-cloud-functions-for-firebase" data-text="Why do I need a billing account to use Cloud Functions for Firebase?">Why do I need a billing account to use Cloud Functions for Firebase?</h4></p> <p>Cloud Functions for Firebase relies on some paid Google services: <a href="https://web.archive.org/web/20210126130738/https://cloud.google.com/cloud-build">Cloud Build</a>, <a href="https://web.archive.org/web/20210126130738/https://cloud.google.com/container-registry/">Container Registry</a>, and <a href="https://web.archive.org/web/20210126130738/https://cloud.google.com/storage">Cloud Storage</a>. Usage of these services will be billed in addition to existing pricing.</p> <p>You'll be billed only for the computing time required to build a function's runtime container.</p> <p>Cloud Storage, interoperating with <a href="https://web.archive.org/web/20210126130738/https://cloud.google.com/container-registry/">Google Container Registry</a>, will provide storage space for the containers in which functions run. You'll be billed for each container required to deploy a function. You may notice small charges for each container stored— for example, 1GB of storage is <a href="//web.archive.org/web/20210126130738/https://cloud.google.com/container-registry/pricing#storage">billed at $0.026 per month</a>.</p> <p>To understand more about how your bill might change, please review the following</p> <ul> <li><a href="https://web.archive.org/web/20210126130738/https://cloud.google.com/functions/pricing">Cloud Functions pricing</a>: existing free tier is unchanged.</li> <li><a href="https://web.archive.org/web/20210126130738/https://cloud.google.com/cloud-build/pricing">Cloud Build pricing:</a> Cloud Build provides for a free tier.</li> <li><a href="https://web.archive.org/web/20210126130738/https://cloud.google.com/container-registry/pricing">Container Registry pricing</a>.</li> </ul> <p></section></p> <p><section class="expandable" id="storage-charge"> <h4 class="showalways" id="storage-charge" data-text="Does Cloud Functions for Firebase still have free usage?">Does Cloud Functions for Firebase still have free usage?</h4></p> <p>Yes. On the Blaze plan, Cloud Functions provides a perpetual free tier for invocations, compute time, and internet traffic. The first 2,000,000 invocations, 400,000 GB-sec, 200,000 CPU-sec, and 5 GB of Internet egress traffic is provided for free each month. You'll be charged only for usage above those thresholds.</p> <p>Each deployment operation will incur small-scale charges for the storage space used for the function's container. For example, if your functions consume 1GB of storage via Container Registry, you'll be <a href="//web.archive.org/web/20210126130738/https://cloud.google.com/container-registry/pricing#storage">billed $0.026 per month</a>. If your development process depends on deploying functions for testing, you can further minimize costs by using the <a href="/web/20210126130738/https://firebase.google.com/docs/emulator-suite">Firebase Local Emulator Suite</a> during development.</p> <p>See <a href="/web/20210126130738/https://firebase.google.com/pricing#cloud-functions">Firebase Pricing plans</a> and the <a href="https://web.archive.org/web/20210126130738/https://cloud.google.com/functions/pricing#pricing_examples">Cloud Functions Pricing</a> example scenarios.</p> <p></section></p> <p><section class="expandable"> <h4 class="showalways" id="is-firebase-planning-to-raise-the-quotas-and-limits-for-cloud-functions-for-firebase" data-text="Is Firebase planning to raise the quotas and limits for Cloud Functions for Firebase?">Is Firebase planning to raise the quotas and limits for Cloud Functions for Firebase?</h4></p> <p>No. There are no plans to change the quotas except for the removal of a maximum build time limit; instead of receiving errors or warnings when the daily build quota of 120 minutes is reached, you'll be billed under the terms of the Blaze pay-as-you-go plan. See <a href="/web/20210126130738/https://firebase.google.com/support/faq/docs/functions/quotas#time_limits">Quotas and limits</a>.</p> <p></section></p> <p><section class="expandable"> <h4 class="showalways" id="can-i-get-the-google-cloud-300-credit" data-text="Can I get the Google Cloud $300 credit?">Can I get the Google Cloud $300 credit?</h4></p> <p>Yes, you can create a billing account in the Google Cloud console to get the $300 credit, then link that billing account to a Firebase project.</p> <p>More about the Google Cloud credit <a href="https://web.archive.org/web/20210126130738/https://cloud.google.com/free/docs/gcp-free-tier#free-trial">here</a>.</p> <p>Note that if you do this, you have to then <a href="https://web.archive.org/web/20210126130738/https://console.firebase.google.com/project/_/overview?purchaseBillingPlan=metered">set up</a> the Blaze pay-as-you-go billing plan in the Firebase console in order for your project to continue working after the $300 credit is exhausted</p> <p></section></p> <p><section class="expandable"> <h4 class="showalways" id="i-want-to-follow-a-codelab-to-learn-about-firebase.-can-you-give-me-a-temporary-billing-account" data-text="I want to follow a codelab to learn about Firebase. Can you give me a temporary billing account?">I want to follow a codelab to learn about Firebase. Can you give me a temporary billing account?</h4></p> <p>No, sorry. You can use the <a href="/web/20210126130738/https://firebase.google.com/docs/emulator-suite">Firebase emulator</a> for development without having a billing account. Alternatively, try applying for a <a href="https://web.archive.org/web/20210126130738/https://cloud.google.com/free/docs/gcp-free-tier#free-trial">Google Cloud free trial</a>. If you're still having trouble paying your bill because of this change, contact Firebase Support.</p> <p></section></p> <p><section class="expandable"> <h4 class="showalways" id="im-worried-im-going-to-rack-up-a-huge-bill." data-text="I'm worried I'm going to rack up a huge bill.">I'm worried I'm going to rack up a huge bill.</h4></p> <p>You can set up <a href="https://web.archive.org/web/20210126130738/https://cloud.google.com/billing/docs/how-to/budgets">budget alerts</a> in the Google Cloud console to help control costs. To get an idea of costing for typical scenarios, see the <a href="https://web.archive.org/web/20210126130738/https://cloud.google.com/functions/pricing#pricing_examples">Cloud Functions Pricing</a> examples.</p> <p></section></p> <p><section class="expandable"> <h4 class="showalways" id="how-can-i-check-my-current-billing-charges" data-text="How can I check my current billing charges?">How can I check my current billing charges?</h4></p> <p>View the <a href="https://web.archive.org/web/20210126130738/https://console.firebase.google.com/project/_/usage">Usage and billing</a> dashboard in the Firebase console.</p> <p></section></p> <p><section class="expandable" id="extensions-pricing"></p> <h4 id="expandable-24" class="showalways" data-text="I use Firebase Extensions. Will I be affected by this change?">I use Firebase Extensions. Will I be affected by this change?</h4> <p>Yes. Since <a href="https://web.archive.org/web/20210126130738/https://firebase.google.com/docs/extensions#how_does_it_work">extensions use Cloud Functions</a>, extensions that use Node.js 10 or later will be subject to the same charges as other functions.</p> <p>To use extensions based on Node.js 10 or later, you will need to upgrade to the Blaze pay-as-you-go billing plan. You will be charged a small amount (typically <a href="https://web.archive.org/web/20210126130738/https://cloud.google.com/functions/pricing#deployment_costs">around $0.01 per month</a>) for the Firebase resources required by each extension you install (even if they are not used), in addition to any charges associated with your use of Firebase services.</p> <p></section></p> <h2 id="privacy" data-text="Privacy">Privacy</h2> <div class="expandable" id="firebase-is-gdpr-ready"> <h4 class="showalways" id="firebase-is-gdpr-ready" data-text=" Where can I find information about privacy and security in Firebase? "> Where can I find information about privacy and security in Firebase? </h4> <p> Check out the page <a href="/web/20210126130738/https://firebase.google.com/support/privacy">Privacy and Security in Firebase</a>. </p> </div> <div class="expandable" id="firebase-usage-diagnostics"> <h4 class="showalways" id="firebase-usage-diagnostics" data-text=" Do the Firebase SDKs log any usage/diagnostic information outside of Analytics? "> Do the Firebase SDKs log any usage/diagnostic information outside of Analytics? </h4> <p> Yes. This is currently iOS-only, but may change in the future. The Firebase iOS SDK includes the <code translate="no" dir="ltr">FirebaseCoreDiagnostics</code> framework by default. This framework is used by Firebase to collect SDK usage and diagnostics information to help prioritize future product enhancements. <code translate="no" dir="ltr">FirebaseCoreDiagnostics</code> is optional, so if you would like to opt out of sending Firebase diagnostic logs, you can do so by unlinking the library from your application. You can browse the full source, including logged values, on <a href="https://web.archive.org/web/20210126130738/https://github.com/firebase/firebase-ios-sdk/tree/master/Firebase/CoreDiagnostics">GitHub</a> </p> </div> <h2 id="ab-testing" data-text="A/B Testing">A/B Testing</h2> <div class="expandable" id="abt-limits"> <h4 class="showalways" id="abt-limits" data-text=" A/B Testing: How many experiments can I create and run? "> <strong>A/B Testing:</strong> How many experiments can I create and run? </h4> <p>You are allowed up to 300 experiments per project, which could consist of up to 24 running experiments, with the rest as draft or completed.</p> </div> <h2 id="admob" data-text="AdMob">AdMob</h2> <div class="expandable" id="admob-windows"> <h4 class="showalways" id="admob-windows" data-text=" AdMob: Will I be able to link my Windows apps to Firebase? "> <strong>AdMob:</strong> Will I be able to link my Windows apps to Firebase? </h4> <p>Windows apps are not currently supported in the Firebase console.</p> </div> <div class="expandable" id="admob-single-user-linking"> <h4 class="showalways" id="admob-single-user-linking" data-text=" AdMob: Why can't I link my AdMob account from the Firebase console? "> <strong>AdMob:</strong> Why can't I link my AdMob account from the Firebase console? </h4> <p>You can link an AdMob app to a Firebase app via the AdMob console. In order to link the account you need to be both a Firebase project owner and an AdMob admin. </p> </div> <div class="expandable" id="admob-multi-user-linking"> <h4 class="showalways" id="admob-multi-user-linking" data-text=" AdMob: Can multiple users link their AdMob account to a Firebase app? "> <strong>AdMob:</strong> Can multiple users link their AdMob account to a Firebase app? </h4> <p>No, every AdMob account will only have one primary user. The primary user is the first user to accept the Firebase <a href="/web/20210126130738/https://firebase.google.com/terms">terms of service</a>.</p> </div> <h2 id="analytics" data-text="Analytics">Analytics</h2> <div class="expandable" id="analytics-firebase-core"> <h4 class="showalways" id="analytics-firebase-core" data-text=" Analytics: Why is Google Analytics a recommended part of using Firebase products? "> <strong>Analytics:</strong> Why is Google Analytics a recommended part of using Firebase products? </h4> <p>Google Analytics is a free and unlimited analytics solution that works with Firebase features to deliver powerful insights. It enables you to view event logs in Crashlytics, notification effectiveness in FCM, deep link performance for Dynamic Links, and in-app purchase data from Google Play. It powers advanced audience targeting in Remote Config, Predictions, and more.</p> <p>Google Analytics acts as a layer of intelligence in the Firebase console to provide you with more actionable insights about how to develop a high quality app, grow your user base, and earn more money. </p> <p>To get started, <a href="/web/20210126130738/https://firebase.google.com/docs/analytics">read the documentation</a>.</p> </div> <div class="expandable" id="analytics-negative-target"> <h4 class="showalways" id="analytics-negative-target" data-text=" Analytics: How do I segment users who have have not met some criterion? "> <strong>Analytics:</strong> How do I segment users who have have <i>not</i> met some criterion? </h4> <p>You can reframe the problem by "negatively targeting" these users. For example, reframe the problem as "Don't show ads to people who have bought something", and form an <a href="https://web.archive.org/web/20210126130738/https://support.google.com/firebase/answer/6317509?hl=en">audience</a> of those users to target.</p> </div> <div class="expandable" id="analytics-data-sharing"> <h4 class="showalways" id="analytics-data-sharing" data-text=" Analytics: How do I control how my Analytics data is shared with rest of Firebase? "> <strong>Analytics:</strong> How do I control how my Analytics data is shared with rest of Firebase? </h4> <p>By default, your Google Analytics data is used to enhance other Firebase and Google features. You can control how your Google Analytics data is shared in your project settings anytime. Learn more about <a href="https://web.archive.org/web/20210126130738/https://support.google.com/firebase/answer/6383877">Data sharing settings</a>. </p> </div> <div class="expandable" id="upgrade-analytics-about"> <h4 class="showalways" id="upgrade-analytics-about" data-text=" Analytics: What is the new fully upgraded Google Analytics account? "> <strong>Analytics:</strong> What is the new fully upgraded Google Analytics account? </h4> <p> You can read more about the new Google Analytics upgrade in our <a href="https://web.archive.org/web/20210126130738/https://firebase.googleblog.com/2019/07/firebase-google-analytics-upgrade.html">blog post</a>. </p> </div> <div class="expandable" id="analytics-version"> <h4 class="showalways" id="analytics-version" data-text=" Analytics: How do I know if I'm using Google Analytics for Firebase or a fully upgraded Google Analytics account? "> <strong>Analytics:</strong> How do I know if I'm using Google Analytics for Firebase or a fully upgraded Google Analytics account? </h4> <span> <p> If you see a link to "View your data in Google Analytics" from the analytics dashboard in the Firebase console, then your project is using a fully upgraded Google Analytics account. </p> <p> You can also check by viewing the <a href="//web.archive.org/web/20210126130738/https://console.firebase.google.com/u/0/project/_/settings/integrations/analytics"> Google Analytics card</a> in the Firebase console (you can access this from <b><span class="material-icons" aria-hidden="true" translate="no">settings</span> > Project Settings > Integrations</b> and click <b>Manage</b>). If you see a <b>Linked Google Analytics account</b> listed in the <b>Your Google Analytics property</b> section, your project is using the full Google Analytics experience in Firebase. If you do not see a <b>Linked Google Analytics account</b>, your project is using Google Analytics for Firebase. </p> </span> </div> <div class="expandable" id="upgrade-analytics-data"> <h4 class="showalways" id="upgrade-analytics-data" data-text=" Analytics: What will happen to my data when I upgrade to the new Google Analytics for Firebase? "> <strong>Analytics:</strong> What will happen to my data when I upgrade to the new Google Analytics for Firebase? </h4> <span> <p> This will not affect your existing Firebase project analytics data in the Firebase console. </p> <p> You will be able to continue using the same dashboard and workflows you are using today, and you will also have access to some advanced features in Google Analytics. </p> <p> Note that if you decide to enable cross-device reporting after making the upgrade, your data will be de-duplicated using the UserID. This may decrease some user counts in the Firebase console. </p> </span> </div> <div class="expandable" id="user-segmentation-storage"> <h4 class="showalways" id="user-segmentation-storage" data-text=" Analytics: What is Firebase User Segmentation Storage? "> <strong>Analytics:</strong> What is Firebase User Segmentation Storage? </h4> <p>Firebase User Segmentation Storage stores audience lists you've created to provide targeting information to other Firebase services that use them, such as Crashlytics, FCM, Predictions, and more.</p> </div> <div class="expandable" id="unlinked-analytics"> <h4 class="showalways" id="unlinked-analytics" data-text=" Analytics: Why don't I see any data after unlinking my app from Google Analytics? "> <strong>Analytics:</strong> Why don't I see any data after unlinking my app from Google Analytics? </h4> <p> Your analytics data resides within the Google Analytics property - not within the Firebase project. If you delete or unlink the property, then your data is unlinked from your project as well. The data still resides in that property, however, and you can always relink it to your project. <br/> Creating a new Google Analytics account (and new property) will result in having a blank analytics dashboard in the Firebase console. </p> </div> <div class="expandable" id="upgrade-analytics"> <h4 class="showalways" id="upgrade-analytics" data-text=" Analytics: Why do I get an error when trying to upgrade my project to the new Google Analytics experience? "> <strong>Analytics:</strong> Why do I get an error when trying to upgrade my project to the new Google Analytics experience? </h4> <p> If you are experiencing and error when upgrading, such as: </p> <pre class="prettyprint" translate="no" dir="ltr"> The operation has failed (Reason: Requested entity already exists) </pre> <p> or </p> <pre class="prettyprint" translate="no" dir="ltr"> The operation has failed (Reason: Precondition check failed) </pre> <p> This means that there is an association between your project and an already existing Google Analytics property. You can unlink the property, delete it, or upgrade through the Google Analytics interface. </p> <p> If this is still an issue, you can use the REST API to unlink by using the <a href="https://web.archive.org/web/20210126130738/https://firebase.google.com/docs/projects/api/reference/rest/v1beta1/projects/removeAnalytics"> removeAnalytics method</a>, and use the <a href="https://web.archive.org/web/20210126130738/https://firebase.google.com/docs/projects/api/reference/rest/v1beta1/projects/addGoogleAnalytics#request-body"> addGoogleAnalytics method</a> to link a new property. </p> <p> You can then move the data from one property to another, by following the steps described <a href="https://web.archive.org/web/20210126130738/https://support.google.com/analytics/answer/6370521?hl=en">here</a>. </p> </div> <div class="expandable" id="analytics-data-sync"> <h4 class="showalways" id="analytics-data-sync" data-text=" Analytics: Will audiences and/or events defined in Google Analytics be available on the Firebase dashboard? "> <strong>Analytics:</strong> Will audiences and/or events defined in Google Analytics be available on the Firebase dashboard? </h4> <p> Your audiences and user properties will be synced. For some features, you'll need to use the Google Analytics interface, such as segmentation and closed funnels. You can access the Google Analytics interface directly via deep-links from the Firebase console. Any changes you make from the Firebase console can also be performed in Google Analytics, and those changes will be reflected in Firebase. </p> </div> <h2 id="app-indexing" data-text="App Indexing">App Indexing</h2> <div class="expandable" id="appindexing-languages"> <h4 class="showalways" id="appindexing-languages" data-text=" App Indexing: Can Google Search index multiple languages for a single app? "> <strong>App Indexing:</strong> Can Google Search index multiple languages for a single app? </h4> <p>Google Search supports the following multi-language cases:</p> <ul> <li>The associated website has unique URLs for each language, and there is one corresponding app HTTP URL for each web URL.</li> <li>The associated website has unique URLs for each language, but there is only one app HTTP URL. The app uses system language settings to display the correct language content.</li> <li>The associated website has one URL for all languages (or it supports only one language), and there is one corresponding app URL. The website and the application must display the content in the same language when the user has set no preference.</li> </ul> </div> <div class="expandable" id="appindexing-multiple-websites"> <h4 class="showalways" id="appindexing-multiple-websites" data-text=" App Indexing: Can App Indexing support multiple websites for an app? "> <strong>App Indexing:</strong> Can App Indexing support multiple websites for an app? </h4> <p>Yes. Make sure that each associated website is verified for the Android app via <a href="https://web.archive.org/web/20210126130738/https://play.google.com/apps/publish/">Google Play Console</a>. Learn how to <a href="https://web.archive.org/web/20210126130738/https://support.google.com/googleplay/android-developer/answer/6041489">verify your app</a>.</p> </div> <div class="expandable" id="appindexing-sitemaps"> <h4 class="showalways" id="appindexing-sitemaps" data-text=" App Indexing: Do sitemaps need to be added via the Search Console? "> <strong>App Indexing:</strong> Do sitemaps need to be added via the Search Console? </h4> <p>iOS does not require sitemaps, and Android does not require them as long as your app supports HTTP URLs. For custom URLs, you do not need to add sitemaps via Search Console. You can reference sitemaps in your robots.txt file and Google Search will use them. <a href="https://web.archive.org/web/20210126130738/https://support.google.com/webmasters/answer/7451001">Learn more</a> about Managing sitemaps. However, submitting a sitemap through Search Console lets you see statistics on submitted and indexed HTTP URLs in Search Console.</p> </div> <h2 id="authentication" data-text="Authentication">Authentication</h2> <div class="expandable" id="phone-auth-countries"> <h4 class="showalways" id="phone-auth-countries" data-text=" Firebase Authentication: Which countries are supported for phone authentication? "> <strong>Firebase Authentication:</strong> Which countries are supported for phone authentication? </h4> <p>Firebase Authentication supports phone number verification across the the world, but not all networks reliably deliver our verification messages. The following countries have good rates of delivery, and should be expected to work well for phone number sign in.</p> <table> <tr> <th><strong>Country</strong></th> <th><strong>Code</strong></th> </tr> <tr><td>AD</td><td>Andorra</td></tr> <tr><td>AE</td><td>United Arab Emirates</td></tr> <tr><td>AF</td><td>Afghanistan</td></tr> <tr><td>AG</td><td>Antigua and Barbuda</td></tr> <tr><td>AL</td><td>Albania</td></tr> <tr><td>AM</td><td>Armenia</td></tr> <tr><td>AO</td><td>Angola</td></tr> <tr><td>AR</td><td>Argentina</td></tr> <tr><td>AS</td><td>American Samoa</td></tr> <tr><td>AT</td><td>Austria</td></tr> <tr><td>AU</td><td>Australia</td></tr> <tr><td>AW</td><td>Aruba</td></tr> <tr><td>AZ</td><td>Azerbaijan</td></tr> <tr><td>BA</td><td>Bosnia and Herzegovina</td></tr> <tr><td>BB</td><td>Barbados</td></tr> <tr><td>BD</td><td>Bangladesh</td></tr> <tr><td>BE</td><td>Belgium</td></tr> <tr><td>BF</td><td>Burkina Faso</td></tr> <tr><td>BG</td><td>Bulgaria</td></tr> <tr><td>BJ</td><td>Benin</td></tr> <tr><td>BM</td><td>Bermuda</td></tr> <tr><td>BN</td><td>Brunei Darussalam</td></tr> <tr><td>BO</td><td>Bolivia</td></tr> <tr><td>BR</td><td>Brazil</td></tr> <tr><td>BS</td><td>Bahamas</td></tr> <tr><td>BT</td><td>Bhutan</td></tr> <tr><td>BW</td><td>Botswana</td></tr> <tr><td>BY</td><td>Belarus</td></tr> <tr><td>BZ</td><td>Belize</td></tr> <tr><td>CA</td><td>Canada</td></tr> <tr><td>CD</td><td>Congo, (Kinshasa)</td></tr> <tr><td>CF</td><td>Central African Republic</td></tr> <tr><td>CG</td><td>Congo (Brazzaville)</td></tr> <tr><td>CH</td><td>Switzerland</td></tr> <tr><td>CI</td><td>Côte d'Ivoire</td></tr> <tr><td>CK</td><td>Cook Islands</td></tr> <tr><td>CL</td><td>Chile</td></tr> <tr><td>CM</td><td>Cameroon</td></tr> <tr><td>CO</td><td>Colombia</td></tr> <tr><td>CR</td><td>Costa Rica</td></tr> <tr><td>CV</td><td>Cape Verde</td></tr> <tr><td>CW</td><td>Curaçao</td></tr> <tr><td>CY</td><td>Cyprus</td></tr> <tr><td>CZ</td><td>Czech Republic</td></tr> <tr><td>DE</td><td>Germany</td></tr> <tr><td>DJ</td><td>Djibouti</td></tr> <tr><td>DK</td><td>Denmark</td></tr> <tr><td>DM</td><td>Dominica</td></tr> <tr><td>DO</td><td>Dominican Republic</td></tr> <tr><td>DZ</td><td>Algeria</td></tr> <tr><td>EC</td><td>Ecuador</td></tr> <tr><td>EG</td><td>Egypt</td></tr> <tr><td>ES</td><td>Spain</td></tr> <tr><td>ET</td><td>Ethiopia</td></tr> <tr><td>FI</td><td>Finland</td></tr> <tr><td>FJ</td><td>Fiji</td></tr> <tr><td>FK</td><td>Falkland Islands (Malvinas)</td></tr> <tr><td>FM</td><td>Micronesia, Federated States of</td></tr> <tr><td>FO</td><td>Faroe Islands</td></tr> <tr><td>FR</td><td>France</td></tr> <tr><td>GA</td><td>Gabon</td></tr> <tr><td>GB</td><td>United Kingdom</td></tr> <tr><td>GD</td><td>Grenada</td></tr> <tr><td>GE</td><td>Georgia</td></tr> <tr><td>GF</td><td>French Guiana</td></tr> <tr><td>GG</td><td>Guernsey</td></tr> <tr><td>GH</td><td>Ghana</td></tr> <tr><td>GI</td><td>Gibraltar</td></tr> <tr><td>GL</td><td>Greenland</td></tr> <tr><td>GM</td><td>Gambia</td></tr> <tr><td>GP</td><td>Guadeloupe</td></tr> <tr><td>GQ</td><td>Equatorial Guinea</td></tr> <tr><td>GR</td><td>Greece</td></tr> <tr><td>GT</td><td>Guatemala</td></tr> <tr><td>GY</td><td>Guyana</td></tr> <tr><td>HK</td><td>Hong Kong, SAR China</td></tr> <tr><td>HN</td><td>Honduras</td></tr> <tr><td>HR</td><td>Croatia</td></tr> <tr><td>HT</td><td>Haiti</td></tr> <tr><td>HU</td><td>Hungary</td></tr> <tr><td>ID</td><td>Indonesia</td></tr> <tr><td>IE</td><td>Ireland</td></tr> <tr><td>IL</td><td>Israel</td></tr> <tr><td>IM</td><td>Isle of Man</td></tr> <tr><td>IN</td><td>India</td></tr> <tr><td>IQ</td><td>Iraq</td></tr> <tr><td>IT</td><td>Italy</td></tr> <tr><td>JE</td><td>Jersey</td></tr> <tr><td>JM</td><td>Jamaica</td></tr> <tr><td>JO</td><td>Jordan</td></tr> <tr><td>JP</td><td>Japan</td></tr> <tr><td>KE</td><td>Kenya</td></tr> <tr><td>KG</td><td>Kyrgyzstan</td></tr> <tr><td>KH</td><td>Cambodia</td></tr> <tr><td>KM</td><td>Comoros</td></tr> <tr><td>KN</td><td>Saint Kitts and Nevis</td></tr> <tr><td>KR</td><td>Korea (South)</td></tr> <tr><td>KW</td><td>Kuwait</td></tr> <tr><td>KY</td><td>Cayman Islands</td></tr> <tr><td>KZ</td><td>Kazakhstan</td></tr> <tr><td>LA</td><td>Lao PDR</td></tr> <tr><td>LB</td><td>Lebanon</td></tr> <tr><td>LC</td><td>Saint Lucia</td></tr> <tr><td>LI</td><td>Liechtenstein</td></tr> <tr><td>LK</td><td>Sri Lanka</td></tr> <tr><td>LS</td><td>Lesotho</td></tr> <tr><td>LT</td><td>Lithuania</td></tr> <tr><td>LU</td><td>Luxembourg</td></tr> <tr><td>LV</td><td>Latvia</td></tr> <tr><td>LY</td><td>Libya</td></tr> <tr><td>MA</td><td>Morocco</td></tr> <tr><td>MD</td><td>Moldova</td></tr> <tr><td>ME</td><td>Montenegro</td></tr> <tr><td>MF</td><td>Saint-Martin (French part)</td></tr> <tr><td>MG</td><td>Madagascar</td></tr> <tr><td>MK</td><td>Macedonia, Republic of</td></tr> <tr><td>MM</td><td>Myanmar</td></tr> <tr><td>MN</td><td>Mongolia</td></tr> <tr><td>MO</td><td>Macao, SAR China</td></tr> <tr><td>MS</td><td>Montserrat</td></tr> <tr><td>MT</td><td>Malta</td></tr> <tr><td>MU</td><td>Mauritius</td></tr> <tr><td>MW</td><td>Malawi</td></tr> <tr><td>MX</td><td>Mexico</td></tr> <tr><td>MY</td><td>Malaysia</td></tr> <tr><td>MZ</td><td>Mozambique</td></tr> <tr><td>NA</td><td>Namibia</td></tr> <tr><td>NC</td><td>New Caledonia</td></tr> <tr><td>NE</td><td>Niger</td></tr> <tr><td>NF</td><td>Norfolk Island</td></tr> <tr><td>NG</td><td>Nigeria</td></tr> <tr><td>NI</td><td>Nicaragua</td></tr> <tr><td>NL</td><td>Netherlands</td></tr> <tr><td>NO</td><td>Norway</td></tr> <tr><td>NP</td><td>Nepal</td></tr> <tr><td>NZ</td><td>New Zealand</td></tr> <tr><td>OM</td><td>Oman</td></tr> <tr><td>PA</td><td>Panama</td></tr> <tr><td>PE</td><td>Peru</td></tr> <tr><td>PG</td><td>Papua New Guinea</td></tr> <tr><td>PH</td><td>Philippines</td></tr> <tr><td>PK</td><td>Pakistan</td></tr> <tr><td>PL</td><td>Poland</td></tr> <tr><td>PM</td><td>Saint Pierre and Miquelon</td></tr> <tr><td>PR</td><td>Puerto Rico</td></tr> <tr><td>PS</td><td>Palestinian Territory</td></tr> <tr><td>PT</td><td>Portugal</td></tr> <tr><td>PY</td><td>Paraguay</td></tr> <tr><td>QA</td><td>Qatar</td></tr> <tr><td>RE</td><td>Réunion</td></tr> <tr><td>RO</td><td>Romania</td></tr> <tr><td>RS</td><td>Serbia</td></tr> <tr><td>RU</td><td>Russian Federation</td></tr> <tr><td>RW</td><td>Rwanda</td></tr> <tr><td>SA</td><td>Saudi Arabia</td></tr> <tr><td>SC</td><td>Seychelles</td></tr> <tr><td>SE</td><td>Sweden</td></tr> <tr><td>SG</td><td>Singapore</td></tr> <tr><td>SH</td><td>Saint Helena</td></tr> <tr><td>SI</td><td>Slovenia</td></tr> <tr><td>SK</td><td>Slovakia</td></tr> <tr><td>SL</td><td>Sierra Leone</td></tr> <tr><td>SN</td><td>Senegal</td></tr> <tr><td>SR</td><td>Suriname</td></tr> <tr><td>ST</td><td>Sao Tome and Principe</td></tr> <tr><td>SV</td><td>El Salvador</td></tr> <tr><td>SZ</td><td>Swaziland</td></tr> <tr><td>TC</td><td>Turks and Caicos Islands</td></tr> <tr><td>TG</td><td>Togo</td></tr> <tr><td>TH</td><td>Thailand</td></tr> <tr><td>TL</td><td>Timor-Leste</td></tr> <tr><td>TM</td><td>Turkmenistan</td></tr> <tr><td>TO</td><td>Tonga</td></tr> <tr><td>TR</td><td>Turkey</td></tr> <tr><td>TT</td><td>Trinidad and Tobago</td></tr> <tr><td>TW</td><td>Taiwan, Republic of China</td></tr> <tr><td>TZ</td><td>Tanzania, United Republic of</td></tr> <tr><td>UA</td><td>Ukraine</td></tr> <tr><td>UG</td><td>Uganda</td></tr> <tr><td>US</td><td>United States of America</td></tr> <tr><td>UY</td><td>Uruguay</td></tr> <tr><td>UZ</td><td>Uzbekistan</td></tr> <tr><td>VC</td><td>Saint Vincent and Grenadines</td></tr> <tr><td>VE</td><td>Venezuela (Bolivarian Republic)</td></tr> <tr><td>VG</td><td>British Virgin Islands</td></tr> <tr><td>VI</td><td>Virgin Islands, US</td></tr> <tr><td>VN</td><td>Viet Nam</td></tr> <tr><td>WS</td><td>Samoa</td></tr> <tr><td>YE</td><td>Yemen</td></tr> <tr><td>YT</td><td>Mayotte</td></tr> <tr><td>ZA</td><td>South Africa</td></tr> <tr><td>ZM</td><td>Zambia</td></tr> <tr><td>ZW</td><td>Zimbabwe</td></tr> </table> </div> <h2 id="cloud-functions" data-text="Cloud Functions">Cloud Functions</h2> <h3 id="functions-runtime" data-text="Cloud Functions runtime support">Cloud Functions runtime support</h3> <p><section class="expandable"> <h4 class="showalways" id="why-is-node.js-8-being-deprecated" data-text="Why is Node.js 8 being deprecated?">Why is Node.js 8 being deprecated?</h4></p> <p>On Dec 31, 2019, Node.js 8 was marked <a href="https://web.archive.org/web/20210126130738/https://github.com/nodejs/Release#end-of-life-releases">end-of-life by the Node.js Foundation</a>. At that time, the Node.js Foundation stopped issuing security releases for Node.js 8. Given the security vulnerabilities with Node 8, we recommend that you update to Node.js 10 or later as soon as you can. </section></p> <p><section class="expandable"> <h4 class="showalways" id="what-happens-if-a-node.js-8-function-is-left-running-after-the-removal-of-node.js-8-support-will-it-work-indefinitely" data-text=" What happens if a Node.js 8 function is left running after the removal of Node.js 8 support? Will it work indefinitely?"> What happens if a Node.js 8 function is left running after the removal of Node.js 8 support? Will it work indefinitely?</h4></p> <p>No it will not. Deployment of Node.js 8 functions will no longer be allowed after February 15, 2021. Then, executions of already-deployed Node.js 8 functions will stop after March 15, 2021. </section></p> <p><section class="expandable" id="node6-deprecation"> <h4 class="showalways" id="node6-deprecation" data-text=" What happens with functions deployed to the deprecated Node.js 6 runtime?"> What happens with functions deployed to the deprecated Node.js 6 runtime?</h4></p> <p>On April 30, 2019, Node.js 6 was marked <a href="https://web.archive.org/web/20210126130738/https://github.com/nodejs/Release#end-of-life-releases">end-of-life by the Node.js Foundation</a>. At that time, the Node.js Foundation stopped issuing security releases for Node.js 6. Cloud Functions for Firebase deprecated the Node.js 6 runtime shortly afterward on May 2, 2019.</p> <p>Deployment of Node.js 6 functions will no longer be allowed after August 5, 2020. Then, executions of already-deployed Node.js 6 functions will stop after September 5, 2020. </section></p> <p><section class="expandable"> <h4 class="showalways" id="how-do-i-upgrade-to-node.js-10" data-text="How do I upgrade to Node.js 10?">How do I upgrade to Node.js 10?</h4></p> <ol> <li>Make sure you're on the Blaze pay-as-you-go <a href="//web.archive.org/web/20210126130738/https://console.firebase.google.com/project/_/overview?purchaseBillingPlan=metered">billing plan</a>.</li> <li>Make sure you are using Firebase CLI version 8.1.0 or later.</li> <li><a href="/web/20210126130738/https://firebase.google.com/docs/functions/manage-functions#set_nodejs_version">Change the <code translate="no" dir="ltr">engines</code> field</a> in your functions' <code translate="no" dir="ltr">package.json</code>.</li> <li>Optionally, test your changes using the <a href="/web/20210126130738/https://firebase.google.com/docs/emulator-suite">Firebase emulator</a>.</li> <li>Redeploy functions using the Firebase CLI v8.1.0 or later.</li> </ol> <p></section></p> <p><section class="expandable"> <h4 class="showalways" id="how-can-i-make-sure-i-deployed-my-functions-to-the-node.js-10-runtime" data-text="How can I make sure I deployed my functions to the Node.js 10 runtime?">How can I make sure I deployed my functions to the Node.js 10 runtime?</h4></p> <p>In the Firebase console, go to the <a href="//web.archive.org/web/20210126130738/https://console.firebase.google.com/project/_/functions/list">functions dashboard</a> and check the runtime column.</p> <p></section></p> <p><section class="expandable"> <h4 class="showalways" id="when-will-node.js-12-or-14-be-available" data-text="When will Node.js 12 or 14 be available?">When will Node.js 12 or 14 be available?</h4></p> <p>We are currently working on bringing newer Node.js runtimes to Cloud Functions.</p> <p></section></p> <p><section class="expandable" id="extensions-runtime"></p> <h4 id="i_use_firebase_extensions_will_i_be_affected_by_this_change_2" class="showalways" data-text="I use Firebase Extensions. Will I be affected by this change?">I use Firebase Extensions. Will I be affected by this change?</h4> <p>Yes. Since <a href="https://web.archive.org/web/20210126130738/https://firebase.google.com/docs/extensions#how_does_it_work">extensions use Cloud Functions</a>, the runtime of your extensions will need to be updated on the same timeline as Cloud Functions.</p> <ul> <li>Starting <strong>February 15 2021</strong>, if you haven't updated your extensions, you will no longer be able to deploy configuration changes.</li> <li>Starting <strong>March 15 2021</strong>, if you haven't updated your extensions, they will no longer work.</li> </ul> <p>By March 15 2021, upgrade your Firebase project to the Blaze plan and update to the latest version of each extension installed in your project. You can upgrade your projects' extensions on the <a href="https://web.archive.org/web/20210126130738/https://firebase.google.com/docs/extensions/manage-installed-extensions?platform=console#update-version">Firebase console</a> or <a href="https://web.archive.org/web/20210126130738/https://firebase.google.com/docs/extensions/manage-installed-extensions?platform=cli#update-version">CLI</a>.</p> <p></section></p> <h2 id="cloud-messaging}" data-text="Cloud Messaging">Cloud Messaging</h2> <div class="expandable" id="messaging-difference"> <h4 class="showalways" id="messaging-difference" data-text=" Cloud Messaging: What's the difference between the Notifications composer and Cloud Messaging? "> <strong>Cloud Messaging:</strong> What's the difference between the Notifications composer and Cloud Messaging? </h4> <p>Firebase Cloud Messaging provides a complete set of messaging capabilities through its client SDKs and HTTP and XMPP server protocols. For deployments with more complex messaging requirements, FCM is the right choice. </p> <p> The Notifications composer is a lightweight, serverless messaging solution built on Firebase Cloud Messaging. With a user-friendly graphical console and reduced coding requirements, the Notifications composer lets users easily send messages to reengage and retain users, foster app growth, and support marketing campaigns.</p> <table> <tr> <th><strong>Capabilities</strong></th> <th></th> <th><strong>Notifications composer</strong></th> <th><strong>Cloud Messaging</strong></th> </tr> <tr> <td><strong>Target</strong></td> <td>Single device</td> <td><span class="compare-yes"></span></td> <td><span class="compare-yes"></span></td> </tr> <tr> <td></td> <td>Clients subscribed to topics (i. e. weather)</td> <td><span class="compare-yes"></span></td> <td><span class="compare-yes"></span></td> </tr> <tr> <td></td> <td>Clients in predefined user segment (app, version, language)</td> <td><span class="compare-yes"></span></td> <td><span class="compare-no"></span></td> </tr> <tr> <td></td> <td>Clients in specified analytics audiences</td> <td><span class="compare-yes"></span></td> <td><span class="compare-no"></span></td> </tr> <tr> <td></td> <td>Clients in device groups</td> <td><span class="compare-no"></span></td> <td><span class="compare-yes"></span></td> </tr> <tr> <td></td> <td>Upstream from client to server</td> <td><span class="compare-no"></span></td> <td><span class="compare-yes"></span></td> </tr> <tr> <td><strong>Message Type </strong></td> <td>Notifications up to 2kb</td> <td><span class="compare-yes"></span></td> <td><span class="compare-yes"></span></td> </tr> <tr> <td></td> <td>Data messages up to 4kb</td> <td><span class="compare-no"></span></td> <td><span class="compare-yes"></span></td> </tr> <tr> <td><strong>Delivery</strong></td> <td>Immediate</td> <td><span class="compare-yes"></span></td> <td><span class="compare-yes"></span></td> </tr> <tr> <td></td> <td>Future client device local time</td> <td><span class="compare-yes"></span></td> <td><span class="compare-no"></span></td> </tr> <tr> <td><strong>Analytics</strong></td> <td>Built-in Notifications analytics collection and funnel analytics</td> <td><span class="compare-yes"></span></td> <td><span class="compare-no"></span></td> </tr> </table> </div> <div class="expandable" id="fcm-apns-http2"> <h4 class="showalways" id="fcm-apns-http2" data-text=" Cloud Messaging: Apple announced they're decprecating the legacy binary protocol for APNs. Do I need to do anything? "> <strong>Cloud Messaging:</strong> Apple announced they're decprecating the legacy binary protocol for APNs. Do I need to do anything? </h4> <p>No. Firebase Cloud Messaging swtiched to the HTTP/2-based APNs protocol in 2017. If you are using FCM to send notifications to iOS devices, there should be no action required on your part. </p> </div> <div class="expandable" id="fcm-standalone"> <h4 class="showalways" id="fcm-standalone" data-text=" Cloud Messaging: Do I need to use other Firebase services in order to use FCM? "> <strong>Cloud Messaging:</strong> Do I need to use other Firebase services in order to use FCM? </h4> <p>You can use Firebase Cloud Messaging as a standalone component, in the same manner as you did with GCM, without using other Firebase services.</p> </div> <div class="expandable" id="gcm-fcm"> <h4 class="showalways" id="gcm-fcm" data-text=" Cloud Messaging: I am an existing Google Cloud Messaging (GCM) developer. Should I move to Firebase Cloud Messaging? "> <strong>Cloud Messaging:</strong> I am an existing Google Cloud Messaging (GCM) developer. Should I move to Firebase Cloud Messaging? </h4> <p>FCM is the new version of GCM under the Firebase brand. It inherits GCM’s core infrastructure, with new SDKs to make Cloud Messaging development easier.</p> <p>Benefits of upgrading to FCM SDK include:</p> <ul> <li>Simpler client development. You no longer have to write your own registration or subscription retry logic.</li> <li>An out-of-the-box notification solution. You can use the Notifications composer, a serverless notifications solution with a web console that lets anyone send notifications to target specific audiences based on insights from Google Analytics for Firebase.</li> </ul> <p>To upgrade from GCM SDKs to FCM SDKs, see the guides for migrating <a href="https://web.archive.org/web/20210126130738/http://developers.google.com/cloud-messaging/android/android-migrate-fcm">Android</a> and <a href="https://web.archive.org/web/20210126130738/http://developers.google.com/cloud-messaging/ios/ios-migrate-fcm"> iOS</a> apps. </p> </div> <div class="expandable" id="fcm-trouble"> <h4 class="showalways" id="fcm-trouble" data-text=" Cloud Messaging: Why do my targeted devices apparently fail to receive messages? "> <strong>Cloud Messaging:</strong> Why do my targeted devices apparently fail to receive messages? </h4> <p>When it looks like devices haven't successfully received messages, check first for these two potential causes:</p> <p><b>Foreground message handling for notification messages</b>. Client apps need to add message handling logic to handle notification messages when the app is in the foreground on the device. See the details for <a href="/web/20210126130738/https://firebase.google.com/docs/cloud-messaging/downstream#receive_downstream_messages"> iOS</a> and <a href="/web/20210126130738/https://firebase.google.com/docs/cloud-messaging/downstream#sample-receive"> Android</a>. </p> <p><b>Network firewall restrictions</b>. If your organization has a firewall that restricts the traffic to or from the Internet, you need to configure it to allow connectivity with FCM in order for your Firebase Cloud Messaging client apps to receive messages. The ports to open are:</p> <ul> <li>5228</li> <li>5229</li> <li>5230</li> </ul> <p>FCM usually uses 5228, but it sometimes uses 5229 and 5230. FCM does not provide specific IPs, so you should allow your firewall to accept outgoing connections to all IP addresses contained in the IP blocks listed in Google's <a href="https://web.archive.org/web/20210126130738/http://bgp.he.net/AS15169#_prefixes">ASN of 15169</a>.</p> </div> <div class="expandable" id="fcm-android-background"> <h4 class="showalways" id="fcm-android-background" data-text=" Cloud Messaging: I have implemented onMessageReceived in my Android app, but it is not being called. "> <strong>Cloud Messaging:</strong> I have implemented <code translate="no" dir="ltr">onMessageReceived</code> in my Android app, but it is not being called. </h4> <p>When your app is in the background, <a href="https://web.archive.org/web/20210126130738/https://firebase.google.com/docs/cloud-messaging/concept-options#notifications_and_data_messages"> notification messages</a> are displayed in the system tray, and <code translate="no" dir="ltr">onMessageReceived</code> is not called. For notification messages with a data payload, the notification message is displayed in the system tray, and the data that was included with the notification message can be retrieved from the intent launched when the user taps on the notification.</p> <p>For more information, see <a href="/web/20210126130738/https://firebase.google.com/docs/cloud-messaging/downstream#sample-receive"> Receive and handle messages</a>. </p> </div> <div class="expandable" id="notifications-difference"> <h4 class="showalways" id="notifications-difference" data-text=" Notifications composer: What's the difference between the Notifications composer and Cloud Messaging? "> <strong>Notifications composer:</strong> What's the difference between the Notifications composer and Cloud Messaging? </h4> <p> The Notifications composer is a lightweight, serverless messaging solution built on Firebase Cloud Messaging. With a user-friendly graphical console and reduced coding requirements, the Notifications composer lets users easily send messages to reengage and retain users, foster app growth, and support marketing campaigns.</p> <p>Firebase Cloud Messaging provides a complete set of messaging capabilities through its client SDKs and HTTP and XMPP server protocols. For deployments with more complex messaging requirements, FCM is the right choice. </p> <p>Here's a comparison of the messaging capabilities provided by Firebase Cloud Messaging and the Notifications composer:</p> <table> <tr> <th><strong>Capabilities</strong></th> <th></th> <th><strong>Notifications composer</strong></th> <th><strong>Cloud Messaging</strong></th> </tr> <tr> <td><strong>Target</strong></td> <td>Single device</td> <td><span class="compare-yes"></span></td> <td><span class="compare-yes"></span></td> </tr> <tr> <td></td> <td>Clients subscribed to topics (i. e. weather)</td> <td><span class="compare-yes"></span></td> <td><span class="compare-yes"></span></td> </tr> <tr> <td></td> <td>Clients in predefined user segment (app, version, language)</td> <td><span class="compare-yes"></span></td> <td><span class="compare-no"></span></td> </tr> <tr> <td></td> <td>Clients in specified analytics audiences</td> <td><span class="compare-yes"></span></td> <td><span class="compare-no"></span></td> </tr> <tr> <td></td> <td>Clients in device groups</td> <td><span class="compare-no"></span></td> <td><span class="compare-yes"></span></td> </tr> <tr> <td></td> <td>Upstream from client to server</td> <td><span class="compare-no"></span></td> <td><span class="compare-yes"></span></td> </tr> <tr> <td><strong>Message Type </strong></td> <td>Notifications up to 2kb</td> <td><span class="compare-yes"></span></td> <td><span class="compare-yes"></span></td> </tr> <tr> <td></td> <td>Data messages up to 4kb</td> <td><span class="compare-no"></span></td> <td><span class="compare-yes"></span></td> </tr> <tr> <td><strong>Delivery</strong></td> <td>Immediate</td> <td><span class="compare-yes"></span></td> <td><span class="compare-yes"></span></td> </tr> <tr> <td></td> <td>Future client device local time</td> <td><span class="compare-yes"></span></td> <td><span class="compare-no"></span></td> </tr> <tr> <td><strong>Analytics</strong></td> <td>Built-in Notifications analytics collection and funnel analytics</td> <td><span class="compare-yes"></span></td> <td><span class="compare-no"></span></td> </tr> </table> </div> <div class="expandable" id="gcm-not"> <h4 class="showalways" id="gcm-not" data-text=" Notifications composer: I am an existing Google Cloud Messaging (GCM) developer, and I want to use the Notifications composer. What should I do? "> <strong>Notifications composer:</strong> I am an existing Google Cloud Messaging (GCM) developer, and I want to use the Notifications composer. What should I do? </h4> <p>The Notifications composer is an out-of-the-box solution that lets anyone send notifications to target specific audiences based on insights from Google Analytics for Firebase. Also, the Notifications composer provides funnel analysis for every message, allowing easy evaluation of notification effectiveness.</p> <p>If you are an existing GCM developer, to use the Notifications composer you have to upgrade from GCM SDKs to FCM SDKs. See the guides for migrating <a href="https://web.archive.org/web/20210126130738/http://developers.google.com/cloud-messaging/android/android-migrate-fcm">Android</a> and <a href="https://web.archive.org/web/20210126130738/http://developers.google.com/cloud-messaging/ios/ios-migrate-fcm"> iOS</a> apps. </p> </div> <h2 id="cloud-storage" data-text="Cloud Storage">Cloud Storage</h2> <div class="expandable" id="storage-buckets"> <h4 class="showalways" id="storage-buckets" data-text=" Storage: Why can't I use Cloud Storage? "> <strong>Storage:</strong> Why can't I use Cloud Storage? </h4> <p> Firebase Storage creates a default bucket in the App Engine free tier. This allows you to quickly get up and running with Firebase and Firebase Storage, without having to put in a credit card or enable a billing account. It also allows you to easily share data between Firebase and a Google Cloud project. </p> <p> There are, however, two known cases where this bucket cannot be created and you will be unable to use Firebase Storage: </p> <ul> <li> A project imported from Google Cloud which had a App Engine Master/Slave Datastore application. </li> <li> A project imported from Google Cloud which has domain prefixed projects. For example: <code translate="no" dir="ltr">domain.com:project-1234</code>. </li> </ul> <p> There are currently no workarounds to these issues, and we recommend that you create a new project in the <a href="//web.archive.org/web/20210126130738/https://console.firebase.google.com/" class="link external gc-analytics-event" data-category="console" data-action="linkClick">Firebase console</a> and enable Firebase Storage in that project. </p> </div> <div class="expandable" id="storage-buckets"> <h4 class="showalways" id="storage-accounts" data-text=" Storage: Why do I see new service account IDs associated with my Firebase projects that use Cloud Storage? "> <strong>Storage:</strong> Why do I see new service account IDs associated with my Firebase projects that use Cloud Storage? </h4> <p>Firebase uses service accounts to operate and manage services without sharing user credentials. When you create a Firebase project, you might notice that a number of service accounts are already available in your project. </p> <p>If you used Cloud Storage before September 15, 2020, you may see the following legacy service account that is used to manage your bucket: <code translate="no" dir="ltr">firebase-storage@system.gserviceaccount.com</code>.</p> <p>After September 15, 2020, Cloud Storage for Firebase buckets may include an additional new service account: <code translate="no" dir="ltr">service-<project number>@gcp-sa-firebasestorage.iam.gserviceaccount.com</code>. </p> <p>You can view all service accounts associated with your project in the Firebase console, on the <a href="https://web.archive.org/web/20210126130738/https://console.firebase.google.com/project/_/settings/serviceaccounts/adminsdk">Service accounts tab</a>. </p> <h5 id="removing-the-new-service-account" data-text=" Removing the new service account "> Removing the new service account </h5> <p>We strongly discourage you from removing the new service account because if you do so, you will not be able to take advantage of upcoming security improvements.</p> <p>However, if you prefer, you can disable the API or remove access from the new service account. Removing this account may block access to your GCS bucket from your apps. </p> <h5 id="adding-the-new-service-account" data-text=" Adding the new service account "> Adding the new service account </h5> <p>If you removed the new service account or disabled the API and want to add them back, follow the instructions provided in <a href="https://web.archive.org/web/20210126130738/https://cloud.google.com/iam/docs/creating-managing-service-accounts">Creating and managing service accounts</a> for using the Google Cloud console to add <code translate="no" dir="ltr">service-<project number>@gcp-sa-firebasestorage.iam.gserviceaccount.com</code> to the set of service accounts for your project. </p> </div> <h2 id="crashlytics" data-text="Crashlytics">Crashlytics</h2> <div class="expandable" id="crash-analytics"> <h4 class="showalways" id="crash-analytics" data-text=" Crash Reporting: Why are there fewer crash reports in Analytics than Crash Reporting? "> <strong>Crash Reporting:</strong> Why are there fewer crash reports in Analytics than Crash Reporting? </h4> <p>Crash Reporting creates a separate background process to upload crash info. If your app extends the Android Application class, you must ensure it is multi-process safe. Otherwise, it may cause concurrency issues. When an app extends an Application object, this object gets instantiated for each process in a multi-process app. Consider the following when adding Crash Reporting to your app:</p> <ol> <li>If the implementation of this object accesses any out-of-process state (a database, the file system, shared preferences, etc), or performs other actions not safe for a multi-process environment, concurrency issues might arise. This is because multiple instances of the Application object may run simultaneously.</li> <li>Many third-party libraries keep out-of-process state (e.g. in a local database) and are subject to the same concurrency issues if they are initialized from the Application object. If your app fits this description and you plan to use Crash Reporting in your app, we strongly encourage you to consider moving the Application logic to Content Providers, or to Android Activities. Any Application logic that is not safe for a multi-process environment can have unintended effects on your app.</li> </ol> <p>Crash Reporting automatically exports captured errors to Google Analytics as app_exception events. Currently on Android, you may see a significant discrepancy between the number of Crash Reporting errors and Analytics app_exception events.</p> </div> <h2 id="dynamic-links" data-text="Dynamic Links">Dynamic Links</h2> <div class="expandable" id="ddl-double-access-android"> <h4 class="showalways" id="ddl-double-access-android" data-text=" Dynamic Links: Why does my Android app access each Dynamic Link twice? "> <strong>Dynamic Links:</strong> Why does my Android app access each Dynamic Link twice? </h4> <p>The <code translate="no" dir="ltr">getInvitation</code> API clears the saved Dynamic Link to prevent it from being accessed twice. Be sure to call this API with the <code translate="no" dir="ltr">autoLaunchDeepLink</code> parameter set to <code translate="no" dir="ltr">false</code> in each of the deep link activities to clear it for the case when the activity is triggered outside the main activity.</p> </div> <h2 id="hosting" data-text="Hosting">Hosting</h2> <div class="expandable" id="hosting-file-counts"> <h4 class="showalways" id="hosting-file-counts" data-text=" Hosting: Why does my Hosting release history table in the Firebase console show file counts that are more than what my local project actually has? "> <strong>Hosting:</strong> Why does my Hosting release history table in the Firebase console show file counts that are more than what my local project actually has? </h4> <p>Firebase automatically adds extra files containing metadata about the Hosting site, and these files are included in the total file count for the release. </p> </div> <div class="expandable" id="hosting-max-file-size"> <h4 class="showalways" id="hosting-max-file-size" data-text=" Hosting: What's the largest file size that I can deploy to Firebase Hosting? "> <strong>Hosting:</strong> What's the largest file size that I can deploy to Firebase Hosting? </h4> <p>Hosting has a maximum size limit of 2 GB for individual files. </p> <p>We recommend storing larger files using <a href="/web/20210126130738/https://firebase.google.com/docs/storage">Cloud Storage for Firebase</a>, which offers a maximum size limit in the terabyte range for individual objects. </p> </div> <h2 id="performance" data-text="Performance Monitoring">Performance Monitoring</h2> <div class="expandable" id="performance-custom-url-pattern-limits"> <h4 class="showalways" id="performance-custom-url-pattern-limits" data-text=" Performance Monitoring: How many custom URL patterns can I create? "> <strong>Performance Monitoring:</strong> How many custom URL patterns can I create? </h4> <p> You can create up to 400 total custom URL patterns per app and up to 100 custom URL patterns per domain for that app. </p> </div> <h2 id="predictions}" data-text="Predictions">Predictions</h2> <div class="expandable" id="predictions-initial-setup"> <h4 class="showalways" id="predictions-initial-setup" data-text=" Predictions: I just added Google Analytics to my app. When should I expect to see predictions in the console? "> <strong>Predictions:</strong> I just added Google Analytics to my app. When should I expect to see predictions in the console? </h4> <p>Predictions are based on your users’ behavior, and the more history that's available, the better. At a bare minimum, Firebase Predictions needs two weeks of data: one week of activity to train on, and then one week to see what that activity led to (churning, spending, etc.). Beyond the first two weeks, the quality of the predictions will typically increase as Predictions observes longer sequences of user activity.</p> </div> <div class="expandable" id="predictions-new-user"> <h4 class="showalways" id="predictions-new-user" data-text=" Predictions: How long does it take for predictions to be made about a new user? "> <strong>Predictions:</strong> How long does it take for predictions to be made about a new user? </h4> <p>For an app that is already instrumented with Google Analytics and trained with baseline data, predictions can be made for new users as early as the next day after they start using the app.</p> </div> <h2 id="realtime-database" data-text="Realtime Database">Realtime Database</h2> <div class="expandable" id="database-underreported"> <h4 class="showalways" id="database-underreported" data-text=" Realtime Database: Why was my Realtime Database reported bandwidth lower than average between September 2016 and March 2017? "> <strong>Realtime Database:</strong> Why was my Realtime Database reported bandwidth lower than average between September 2016 and March 2017? </h4> <p> For our bandwidth calculations, we normally include SSL encryption overhead (based on layer 5 of the OSI model). However, in September 2016, we introduced a bug that caused our bandwidth reporting to ignore encryption overhead. This might have resulted in artificially low reported bandwidth and bills on your account for a few months. </p> <p> We released a fix for the bug in late March 2017, returning bandwidth reporting and billing to their normal levels. </p> </div> <div class="expandable" id="database-limits"> <h4 class="showalways" id="database-limits" data-text=" Realtime Database: What are the scaling limitations of the Realtime Database? "> <strong>Realtime Database:</strong> What are the scaling limitations of the Realtime Database? </h4> <p> Each Realtime Database instance has limits on the number of write operations per second. For small writes, this limit is approximately 1000 write operations per second. If you are approaching this limit, <a href="/web/20210126130738/https://firebase.google.com/docs/database/admin/save-data#section-update"> batching operations using multi-path updates</a> can help you achieve higher throughput. </p> <p>In addition, each database instance has <a href="#pricing-simultaneous">a cap on the number of simultaneous database connections</a>. Our default limits are large enough for most applications. If you are building an app that requires additional scale, you may need to <a href="/web/20210126130738/https://firebase.google.com/docs/database/usage/sharding">shard your application across multiple database instances</a> for added scale. You may also consider <a href="/web/20210126130738/https://firebase.google.com/docs/firestore">Cloud Firestore</a> as an alternative database. </p> </div> <div class="expandable" id="database-overquota"> <h4 class="showalways" id="database-overquota" data-text=" Realtime Database: What can I do if I'm over my Realtime Database usage limits? "> <strong>Realtime Database:</strong> What can I do if I'm over my Realtime Database usage limits? </h4> <p> If you've received an email alert or notification in the Firebase console that you've exceeded your Realtime Database usage limits, you can address it based on the usage limit you've exceeded. To see your Realtime Database usage, go to the <a href="//web.archive.org/web/20210126130738/https://console.firebase.google.com/project/_/database/usage">Realtime Database usage</a> section of the Firebase console. </p> <p><strong>If you're over your download limit,</strong> you can upgrade your <a href="/web/20210126130738/https://firebase.google.com/pricing">Firebase plan</a> or wait until your download limit resets at the start of your next billing cycle. To decrease your downloads, try the following steps: </p> <ul> <li>Add queries to limit the data that your listen operations return. </li> <li>Check for unindexed queries.</li> <li>Use listeners that only download updates to data — for example, <code translate="no" dir="ltr">on()</code> instead of <code translate="no" dir="ltr">once()</code>.</li> <li>Use security rules to block unauthorized downloads.</li> </ul> <p><strong>If you're over your storage limit,</strong> upgrade your plan to avoid service disruptions. To reduce the amount of data in your database, try the following steps:</p> <ul> <li>Run periodic cleanup jobs.</li> <li>Reduce any duplicate data in your database.</li> </ul> <p>Note that it may take some time to see any data deletions reflected in your storage allotment.</p> <p><strong>If you're over your simultaneous database connections limit, </strong> upgrade your plan to avoid any service disruptions. To manage simultaneous connections to your database, try connecting via users via the REST API if they don't require a realtime connection. </p> </div> <h2 id="remote-config" data-text="Remote Config">Remote Config</h2> <div class="expandable" id="remote-config-values"> <h4 class="showalways" id="remote-config-values" data-text=" Remote Config: Why don't fetched values change the behavior and appearance of my app? "> <strong>Remote Config:</strong> Why don't fetched values change the behavior and appearance of my app? </h4> <p>Unless you fetch values with <a href="/web/20210126130738/https://firebase.google.com/docs/reference/android/com/google/firebase/remoteconfig/FirebaseRemoteConfig#fetchAndActivate()">fetchAndActivate()</a>, values are stored locally but not activated. To activate fetched values so that they can take effect, call <code translate="no" dir="ltr">activate</code>. This design lets you control when the behavior and appearance of your app changes, because you can choose when to call <code translate="no" dir="ltr">activate</code>. After you call <code translate="no" dir="ltr">activate</code>, your app source code determines when updated parameter values are used.</p> <p>For example, you could fetch values and then activate them the next time a user starts your app, which removes the need to delay app startup while your app waits for fetched values from the service. Changes to your app's behavior and appearance then occur when your app uses the updated parameter values.</p> <p>To learn more about the Remote Config API and usage model, see <a href="/web/20210126130738/https://firebase.google.com/docs/remote-config/api-overview">Remote Config API Overview </a>.</p> </div> <div class="expandable" id="remote-config-requests"> <h4 class="showalways" id="remote-config-requests" data-text=" Remote Config: I am making a lot of fetch requests while developing my app. Why doesn't my app always get the latest values from the service when it sends fetch requests? "> <strong>Remote Config:</strong> I am making a lot of fetch requests while developing my app. Why doesn't my app always get the latest values from the service when it sends fetch requests? </h4> <p>During app development, you might want to fetch and activate configs very frequently (many times per hour) to let you rapidly iterate as you develop and test your app. To accommodate rapid iteration on a project with up to 10 developers, you can temporarily set a <code translate="no" dir="ltr">FirebaseRemoteConfigSettings</code> object with a low minimum fetch interval (<code translate="no" dir="ltr">setMinimumFetchIntervalInSeconds</code>) in your app.</p> <p> <aside class="caution">Keep in mind that this setting should be used for development only, not for an app running in production. If you're just testing your app with a small 10-person development team, you are unlikely to hit the hourly service-side quota limits. But if you pushed your app out to thousands of test users with a very low minimum fetch interval, your app would probably hit this quota.</aside> </p> </div> <div class="expandable" id="remote-config-timing"> <h4 class="showalways" id="remote-config-timing" data-text=" Remote Config: How quickly does the Remote Config service return fetched values after my app sends a fetch request? "> <strong>Remote Config:</strong> How quickly does the Remote Config service return fetched values after my app sends a fetch request? </h4> <p>Devices usually receive fetched values in less than a second, and often receive fetched values in milliseconds. The Remote Config service handles fetch requests within milliseconds, but the time required to complete a fetch request will depend on the network speed of the device and the latency of the network connection used by the device. </p> <p>If your goal is to make fetched values take effect in your app as soon as possible, but without creating a jarring user experience, consider adding calls to <code translate="no" dir="ltr">fetchAndActivate</code> each time that your app does a full screen refresh.</p> </div> <div class="expandable" id="performance-custom-url-pattern-limits"> <h4 class="showalways" id="performance-custom-url-pattern-limits" data-text=" Performance Monitoring: How many custom URL patterns can I create? "> <strong>Performance Monitoring:</strong> How many custom URL patterns can I create? </h4> <p> You can create up to 400 total custom URL patterns per app and up to 100 custom URL patterns per domain for that app. </p> </div> </div> <devsite-page-rating position="footer" selected-rating="0" hover-rating-star="0"> </devsite-page-rating> <devsite-feedback position="footer" project-name="Firebase" product-id="719752" bucket="" context="" version="t-devsite-webserver-20210114-r02-rc00.432497685912973661" data-label="Send Feedback Button" track-type="feedback" track-name="sendFeedbackLink" track-metadata-position="footer" project-feedback-url="https://firebase.google.com/support/contact/bugs-features/" project-icon="https://firebase.google.com/_static/firebase/images/logo.png" project-support-url="https://firebase.google.com/support/" feedback-type="star-rating"> <button> Send feedback </button> </devsite-feedback> </article> <devsite-content-footer class="nocontent"> <p>Except as otherwise noted, the content of this page is licensed under the <a href="https://web.archive.org/web/20210126130738/https://creativecommons.org/licenses/by/4.0/">Creative Commons Attribution 4.0 License</a>, and code samples are licensed under the <a href="https://web.archive.org/web/20210126130738/https://www.apache.org/licenses/LICENSE-2.0">Apache 2.0 License</a>. For details, see the <a href="https://web.archive.org/web/20210126130738/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 2021-01-22 UTC.</p> </devsite-content-footer> </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="/web/20210126130738/https://firebase.google.com/docs/guides/" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 1)"> Guides </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/web/20210126130738/https://firebase.google.com/docs/reference/" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 2)"> Reference </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/web/20210126130738/https://firebase.google.com/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="/web/20210126130738/https://firebase.google.com/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="//web.archive.org/web/20210126130738/https://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="//web.archive.org/web/20210126130738/https://firebase.googleblog.com/" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 1)"> Blog </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/web/20210126130738/https://firebase.google.com/summit/" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 2)"> Firebase Summit </a> </li> <li class="devsite-footer-linkbox-item"> <a href="//web.archive.org/web/20210126130738/https://www.facebook.com/Firebase/" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 3)"> Facebook </a> </li> <li class="devsite-footer-linkbox-item"> <a href="//web.archive.org/web/20210126130738/https://twitter.com/Firebase" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 4)"> Twitter </a> </li> <li class="devsite-footer-linkbox-item"> <a href="//web.archive.org/web/20210126130738/https://www.youtube.com/user/Firebase" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 5)"> YouTube </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="/web/20210126130738/https://firebase.google.com/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="//web.archive.org/web/20210126130738/https://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="//web.archive.org/web/20210126130738/https://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="//web.archive.org/web/20210126130738/https://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="/web/20210126130738/https://firebase.google.com/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="/web/20210126130738/https://firebase.google.com/support/faq/" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 6)"> 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://web.archive.org/web/20210126130738/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"> <img class="devsite-footer-sites-logo" src="https://web.archive.org/web/20210126130738im_/https://www.gstatic.com/devrel-devsite/prod/vbd4700e58d826f0eab371eadc20e0e343567df356800794a790eebf2ac059db2/firebase/images/lockup-developers.svg" loading="lazy" alt="Google Developers"> </a> <ul class="devsite-footer-sites-list"> <li class="devsite-footer-sites-item"> <a href="//web.archive.org/web/20210126130738/https://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="//web.archive.org/web/20210126130738/https://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="//web.archive.org/web/20210126130738/https://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="//web.archive.org/web/20210126130738/https://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="//web.archive.org/web/20210126130738/https://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="/web/20210126130738/https://firebase.google.com/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="//web.archive.org/web/20210126130738/https://policies.google.com/privacy" data-category="Site-Wide Custom Events" data-label="Footer Privacy link"> Privacy </a> </li> </ul> <devsite-language-selector> <devsite-select class="devsite-language-selector-menu"> <select aria-label="Select your language preference." class="devsite-language-selector-select" name="language" track-name="click" track-type="languageSelector"> <option>Language</option> <option value="en" lang="en" track-metadata-original-language="en" track-metadata-selected-language="en" track-name="changed" track-type="languageSelector"> English </option> <option value="id" lang="id" track-metadata-original-language="en" track-metadata-selected-language="id" track-name="changed" track-type="languageSelector"> Bahasa Indonesia </option> <option value="de" lang="de" track-metadata-original-language="en" track-metadata-selected-language="de" track-name="changed" track-type="languageSelector"> Deutsch </option> <option value="es_419" lang="es_419" track-metadata-original-language="en" track-metadata-selected-language="es_419" track-name="changed" track-type="languageSelector"> Español – América Latina </option> <option value="fr" lang="fr" track-metadata-original-language="en" track-metadata-selected-language="fr" track-name="changed" track-type="languageSelector"> Français </option> <option value="it" lang="it" track-metadata-original-language="en" track-metadata-selected-language="it" track-name="changed" track-type="languageSelector"> Italiano </option> <option value="pl" lang="pl" track-metadata-original-language="en" track-metadata-selected-language="pl" track-name="changed" track-type="languageSelector"> Polski </option> <option value="pt_br" lang="pt_br" track-metadata-original-language="en" track-metadata-selected-language="pt_br" track-name="changed" track-type="languageSelector"> Português – Brasil </option> <option value="vi" lang="vi" track-metadata-original-language="en" track-metadata-selected-language="vi" track-name="changed" track-type="languageSelector"> Tiếng Việt </option> <option value="tr" lang="tr" track-metadata-original-language="en" track-metadata-selected-language="tr" track-name="changed" track-type="languageSelector"> Türkçe </option> <option value="ru" lang="ru" track-metadata-original-language="en" track-metadata-selected-language="ru" track-name="changed" track-type="languageSelector"> Русский </option> <option value="he" lang="he" track-metadata-original-language="en" track-metadata-selected-language="he" track-name="changed" track-type="languageSelector"> עברית' </option> <option value="ar" lang="ar" track-metadata-original-language="en" track-metadata-selected-language="ar" track-name="changed" track-type="languageSelector"> العربيّة </option> <option value="fa" lang="fa" track-metadata-original-language="en" track-metadata-selected-language="fa" track-name="changed" track-type="languageSelector"> فارسی </option> <option value="hi" lang="hi" track-metadata-original-language="en" track-metadata-selected-language="hi" track-name="changed" track-type="languageSelector"> हिंदी </option> <option value="bn" lang="bn" track-metadata-original-language="en" track-metadata-selected-language="bn" track-name="changed" track-type="languageSelector"> বাংলা </option> <option value="th" lang="th" track-metadata-original-language="en" track-metadata-selected-language="th" track-name="changed" track-type="languageSelector"> ภาษาไทย </option> <option value="zh_cn" lang="zh_cn" track-metadata-original-language="en" track-metadata-selected-language="zh_cn" track-name="changed" track-type="languageSelector"> 中文 – 简体 </option> <option value="zh_tw" lang="zh_tw" track-metadata-original-language="en" track-metadata-selected-language="zh_tw" track-name="changed" track-type="languageSelector"> 中文 – 繁體 </option> <option value="ja" lang="ja" track-metadata-original-language="en" track-metadata-selected-language="ja" track-name="changed" track-type="languageSelector"> 日本語 </option> <option value="ko" lang="ko" track-metadata-original-language="en" track-metadata-selected-language="ko" track-name="changed" track-type="languageSelector"> 한국어 </option> </select> </devsite-select> </devsite-language-selector> </nav> </div> </devsite-footer-utility> </section></section> <devsite-sitemask></devsite-sitemask> <devsite-snackbar></devsite-snackbar> <devsite-tooltip></devsite-tooltip> <devsite-heading-link></devsite-heading-link> <devsite-analytics enable-analytics-iframe> <script type="application/json" analytics>[]</script> <script type="application/json" gtm>{"parameters": {"freeTrialEligibleUser": "False", "internalUser": "False", "language": {"machineTranslated": "False", "requested": "en", "served": "en"}, "pageType": "article", "projectName": "Firebase", "scriptsafe": null, "signedIn": "False", "tenant": "firebase"}, "tags": ["GTM-N84485"]}</script> </devsite-analytics> <devsite-badger></devsite-badger> <firebase-gtm></firebase-gtm> <script nonce="DEHEG/+v9GVW7td+IbrFt9p7dJipyn"> (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://web.archive.org/web/20210126130738/https://www.gstatic.com/devrel-devsite/prod/vbd4700e58d826f0eab371eadc20e0e343567df356800794a790eebf2ac059db2/firebase/js/app_loader.js', '[4,"en",null,"/js/devsite_app_module.js","https://web.archive.org/web/20210126130738/https://www.gstatic.com/devrel-devsite/prod/vbd4700e58d826f0eab371eadc20e0e343567df356800794a790eebf2ac059db2","https://web.archive.org/web/20210126130738/https://www.gstatic.com/devrel-devsite/prod/vbd4700e58d826f0eab371eadc20e0e343567df356800794a790eebf2ac059db2/firebase","https://web.archive.org/web/20210126130738/https://firebase-dot-devsite-v2-prod.appspot.com",1,null,["/_pwa/firebase/manifest.json","/_static/images/video-placeholder.svg","https://web.archive.org/web/20210126130738/https://www.gstatic.com/devrel-devsite/prod/vbd4700e58d826f0eab371eadc20e0e343567df356800794a790eebf2ac059db2/firebase/images/favicon.png","https://web.archive.org/web/20210126130738/https://www.gstatic.com/devrel-devsite/prod/vbd4700e58d826f0eab371eadc20e0e343567df356800794a790eebf2ac059db2/firebase/images/lockup.png","https://web.archive.org/web/20210126130738/https://fonts.googleapis.com/css?family=Google+Sans:400,500|Roboto:400,400italic,500,500italic,700,700italic|Roboto+Mono:400,500,700|Material+Icons"],1,null,[1,6,8,12,14,17,21,25,40,50,63,70,75,76,80,87,88,91,92,93,97,98,100,101,102,103,105,107,111,113,115,120,122]]') </script> <devsite-a11y-announce></devsite-a11y-announce> </body> </html><!-- FILE ARCHIVED ON 13:07:38 Jan 26, 2021 AND RETRIEVED FROM THE INTERNET ARCHIVE ON 17:24:31 Nov 25, 2024. JAVASCRIPT APPENDED BY WAYBACK MACHINE, COPYRIGHT INTERNET ARCHIVE. ALL OTHER CONTENT MAY ALSO BE PROTECTED BY COPYRIGHT (17 U.S.C. SECTION 108(a)(3)). --> <!-- playback timings (ms): captures_list: 3.984 exclusion.robots: 0.027 exclusion.robots.policy: 0.016 esindex: 0.011 cdx.remote: 17.211 LoadShardBlock: 252.609 (3) PetaboxLoader3.datanode: 69.453 (4) PetaboxLoader3.resolve: 313.686 (2) load_resource: 414.888 -->