還有其他挑戰嗎?還是看不到下面列出的問題?請報告錯誤或請求功能,並加入Stack Overflow討論。
Firebase項目和Firebase應用程序
什麼是Firebase項目?
項目是iOS,Android和Web上應用程序的容器。它支持跨平台應用程序之間共享數據庫,配置和通知等功能。
您應將iOS,Android和Web應用程序變體添加到單個項目中。您可以使用多個項目來支持多個環境,例如開發,暫存和生產。
如何將Firebase添加到現有的Google Cloud項目?
您可能已經通過Google Cloud Console或Google APIs Console管理現有項目。默認情況下,這些項目在Firebase控制台中可見,但不視為Firebase項目。
要將Firebase添加到現有的Google Cloud項目中,請在Firebase控制台登錄頁面上單擊“添加項目”,然後在“項目名稱”菜單中選擇您的項目。
每個帳戶可以有多少個項目?
- 免費套餐Spark計劃-您的項目配額僅限於少數幾個項目(通常為5-10個左右)。
- 付費計劃—只要您的Cloud Billing帳戶信譽良好,每個Cloud Billing帳戶的項目配額就會大大增加。
對於大多數開發人員來說,項目配額的限制很少引起關注,但是如果需要,您可以請求增加項目配額。
請注意,一個項目的完全刪除需要30天,並且在完全刪除之前都將計入您的配額。
一個Firebase項目中可以有多少個Firebase應用程序?
Firebase項目是跨iOS,Android和Web的Firebase應用程序的容器。 Firebase將Firebase項目中的Firebase應用程序總數限制為30。
超過此數量後,性能開始下降(尤其是對於Google Analytics(分析)),最終,在更多的應用程序中,某些產品功能停止運行。此外,將Firebase應用程序添加到項目中會創建一個或多個基礎OAuth 2.0客戶端ID。一個項目中最多可以創建30個客戶ID。
從最終用戶的角度來看,您應確保單個Firebase項目中的所有Firebase應用程序都是同一應用程序的平台變體。例如,如果您開發一個帶有白色標籤的應用程序,則每個獨立標籤的應用程序應具有自己的Firebase項目。訪問“了解Firebase項目”以了解有關Firebase項目和Firebase Apps的更多最佳實踐。
在極少數情況下,您的項目需要30多個應用程序,您可以請求增加應用程序限制。您的項目必須在Blaze計費計劃中才能發出此請求。訪問Google Cloud Console,提出您的請求並進行評估。在Google Cloud文檔中了解有關配額管理的更多信息。
在哪裡可以找到我的Firebase應用程序的應用程序ID?
在Firebase控制台中,轉到settings項目設置。向下滾動到“您的應用”卡,然後單擊所需的Firebase應用以查看該應用的信息,包括其應用ID 。
以下是一些應用ID值示例:
- Firebase iOS應用程序:
1:1234567890:ios:321abc456def7890
- Firebase Android應用程序:
1:1234567890:android:321abc456def7890
- Firebase Web應用程序:
1:1234567890:web:321abc456def7890
添加Android應用時,我需要提供SHA-1嗎?
Firebase身份驗證(使用Google登錄或電話號碼登錄時)和Firebase動態鏈接需要SHA-1信息。如果您不使用這些功能,則不必提供SHA-1。
如何解決此錯誤:“此軟件包名稱和另一個項目中的SHA-1已經存在一個OAuth2客戶端”?
如果我們檢測到另一個Firebase或Google Cloud項目包含包含您指定的程序包名稱和SHA-1的OAuth 2.0客戶端ID,則會發生此錯誤。了解如何解決此錯誤。
當我將Firebase添加到我的Android項目中時,出現“找不到”錯誤。
此錯誤通常表示您的應用缺少對Google Maven存儲庫的一個或多個引用。在項目級別的build.gradle
文件中,確保在buildscript
和allprojects
部分中都包含Google的Maven存儲庫( google()
)。
將Play / AdMob / AdWords / BigQuery鏈接到Firebase項目的先決條件是什麼?
- 要關聯您的Play帳戶,您需要同時是Firebase項目所有者和Play帳戶所有者。
- 要鏈接您的AdMob應用,您需要既是Firebase項目的所有者又是AdMob管理員。
- 要關聯您的AdWords帳戶,您既需要同時是Firebase項目所有者和AdWords管理員。
- 要鏈接BigQuery項目,您需要成為Firebase項目的所有者。
我應在我的應用程序中包括哪些開源通知?
在iOS上,Firebase窗格包含一個NOTICES文件,其中包含相關條目。 Firebase Android SDK包含一個用於顯示許可證信息的幫助器Activity
。
Firebase支持哪些版本的Xcode?
Firebase最多支持兩個主要的Xcode版本,不包括Apple不再支持的Xcode版本。例如,從2019年3月開始,Apple在所有iOS應用上至少都需要iOS 12,這意味著將不再支持Xcode 9,而Xcode 10將是唯一受支持的主要版本。
根據對Firebase iOS SDK的需求以及對開發人員使用情況的調查,確定對Xcode特定次要版本或補丁版本(例如9.2.0到9.4.1)的支持所做的更改。這些更改反映在Firebase iOS SDK發行說明和Firebase iOS SDK設置頁面上。
要查看Firebase iOS SDK支持的最低Xcode版本,請檢查將Firebase添加到您的iOS項目中列出的要求。
Firebase對Xcode Beta版的支持是“盡力而為”的。開發人員可以在GitHub上的Firebase iOS SDK存儲庫中跟踪和提交問題。
Firebase控制台
支持哪些瀏覽器訪問Firebase控制台?
可以從最新版本的流行桌面瀏覽器(例如Chrome,Firefox,Safari和Edge)訪問Firebase控制台。當前不完全支持移動瀏覽器。
為什麼Firebase控制台無法為我加載?
如果您在加載Firebase控制台時遇到問題,請嘗試以下故障排除步驟:
- 檢查Firebase狀態儀表板的“控制台”行是否有任何可能的服務中斷。
- 確保您使用的是受支持的瀏覽器。
- 嘗試在隱身窗口或私有窗口中加載Firebase控制台。
- 禁用所有瀏覽器擴展。
- 檢查是否有任何東西阻止您的連接,例如防病毒軟件,網絡代理或防火牆。如果是這樣,請嘗試禁用它們。
- 嘗試使用其他網絡或設備加載Firebase控制台。
如果以上故障排除步驟均不能解決問題,請與支持聯繫。
如何確定Firebase控制台語言?
Firebase控制台的語言設置基於您在Google帳戶設置中選擇的語言。
要更改語言首選項,請參閱更改語言。
Firebase控制台支持以下語言:
- 英語
- 巴西葡萄牙語
- 法語
- 德語
- 印度尼西亞
- 日本人
- 韓國人
- 俄語
- 簡體中文
- 西班牙語
- 繁體中文
Firebase控制台支持哪些角色和權限?
Firebase控制台和Google Cloud Console使用相同的基礎角色和權限。在Firebase IAM文檔中了解有關角色和權限的更多信息。
Firebase支持所有者,編輯器和查看器的基本(基本)角色:
- 項目所有者可以將其他成員添加到項目中,設置 集成(項目鏈接到BigQuery或Slack之類的服務),並具有對該項目的完全編輯權限。
- 項目編輯器對該項目具有完全編輯權限。
- 項目查看器僅對該項目具有讀取權限。請注意,Firebase控制台當前不會在項目查看器中隱藏/禁用編輯UI控件,但是對於分配了查看器角色的項目成員,這些操作將失敗。
Firebase還支持:
- Firebase預定義角色-特定於Firebase的精選角色,與Owner,Editor和Viewer的基本角色相比,可提供更精細的訪問控制。
- 自定義角色-創建的完全自定義的IAM角色,以定制一組滿足組織特定要求的權限。
價錢
哪些產品是付費的?哪些免費?
Firebase的付費基礎設施產品包括實時數據庫,Firebase的雲存儲,功能,託管,測試實驗室和電話身份驗證。我們為所有這些功能提供免費套餐。
Firebase還提供許多免費產品:分析,雲消息傳遞,通知編寫器,遠程配置,應用程序索引,動態鏈接和崩潰報告。您可以在所有計劃(包括我們的免費Spark計劃)中無限使用這些產品中的任何一種。此外,電話身份驗證以外的所有身份驗證功能都是免費的。
Firebase是否提供付費產品的免費試用信用?
可以通過Google Cloud免費試用版使用Firebase付費服務。新的Google Cloud和Firebase用戶可以享受90天的試用期,其中包括300美元的免費Cloud Billing信用額,用於探索和評估Google Cloud和Firebase產品和服務。
在Google Cloud免費試用期間,您將獲得一個免費試用Cloud Billing帳戶。在免費試用期內,所有使用該計費帳戶的Firebase項目都將列入Blaze計費計劃。
不用擔心,設置此免費試用版Cloud Billing帳戶不會使我們向您收取費用。除非您通過將免費試用版Cloud Billing帳戶升級為付費帳戶明確啟用了計費功能,否則無需向您收費。您可以在試用期間隨時升級到付費帳戶。升級後,您仍然可以使用所有剩餘的積分(在90天之內)。
免費試用期到期後,您需要將項目降級為Spark計費計劃,或者在Firebase控制台中設置Blaze即用即付計費計劃,以繼續使用Firebase項目。
了解有關Google Cloud免費試用的更多信息。
我怎麼知道哪個計劃適合我?
Spark計費方案
我們的Spark計劃是免費開發您的應用程序的好地方。您可以獲得所有免費的Firebase功能(Analytics,Notifications作曲家,崩潰報告等)以及大量的付費基礎架構功能。但是,如果您在一個日曆月內超出了Spark計劃的資源,則該應用程序將在該月的剩餘時間內關閉。此外,Spark層中不提供Google Cloud功能。
大膽的計費計劃
我們的Blaze計劃是為生產應用程序設計的。 Blaze計劃還允許您使用付費的Google Cloud功能擴展您的應用程序。您只需為消耗的資源付費,即可根據需求進行擴展。我們努力使Blaze計劃價格與行業領先的雲提供商具有競爭力。
如何監控使用情況和帳單?
您可以在以下任何儀表板上的Firebase控制台中跟踪項目資源的使用情況:
- 使用情況和計費信息中心
- 雲存儲使用情況儀表板
- 數據庫使用情況儀表板(Cloud Firestore和實時數據庫)
- 主機使用情況儀表板
Flame計費方案發生了什麼?
從2020年1月開始,Flame計費計劃(額外配額為25美元/月)不再適用於新註冊。
- 現有的Spark和Blaze計劃項目以及任何新項目都不能再切換或註冊Flame計劃。
- 如果將現有的Flame計劃項目移至其他計費計劃,則該項目無法返回至Flame計劃。
- 現有的Flame計劃項目現在可以繼續使用Flame計劃。但是,在接下來的幾個月中,您將收到有關移至其他計費方案所需時間表的信息。
- 從文件中刪除了對Flame計劃的引用。
您對Flame計劃的退休還有其他疑問嗎?閱讀下面的一些其他常見問題解答。
是否想了解Firebase提供的其他計費方案?訪問我們的Firebase定價頁面!如果您想開始將任何現有項目移至其他計費方案,則可以在Firebase控制台中針對您的項目進行操作。
對於現有的Flame計劃項目,計劃配額和功能可用性仍然有效。
- 火焰計劃不提供以下產品的任何使用配額:
BigQuery和其他Google Cloud IaaS - Flame計劃包括以下產品的免費使用配額:
A / B測試,分析,應用程序索引,雲消息傳遞(FCM),崩潰分析,動態鏈接,性能監控,預測和遠程配置 Flame計劃包括以下產品的使用配額:
產品 特徵 包含在火焰計劃中 驗證 電話驗證-美國,加拿大和印度 每月10k 電話驗證-所有其他國家 每月10k 其他身份驗證服務和功能 ✔(免費) 雲消防站 數據存儲 總共2.5 GiB 網絡出口 20 GiB /月 文件寫 100k /天 文件讀取 250k /天 文件刪除 100k /天 Firebase的雲功能 調用方式 2M /月 GB秒 40萬/月 CPU秒 200k /月 出站網絡 5 GB /月 代管 數據存儲 總計10 GB 數據傳輸 50 GB /月 自定義域和SSL ✔(免費) 每個項目有多個站點 ✔(免費) Firebase ML 自定義模型託管/服務 ✔(免費) AutoML Vision Edge數據集 1k圖片/項目 AutoML Vision Edge培訓 3小時/項目 Cloud Vision API 不包含 實時數據庫 同時連接 20萬 數據存儲 總共2.5 GB 資料下載 20 GB /月 每個項目多個數據庫 不包含 雲儲存 數據存儲 總計50 GB 資料下載 50 GB /天 上載操作 100k /天 下載操作 250k /天 每個項目有多個存儲桶 不包含 測試實驗室 虛擬設備測試 每天10次測試 物理設備測試 每天5次測試
有關Flame計劃退出的其他常見問題解答
現在我現有的Flame計劃項目會怎樣?
目前,您的項目或帳單沒有任何變化。但是,在接下來的幾個月中,您將收到有關移至其他計費方案所需時間表的信息。
將來,我現有的Flame計劃項目會怎樣?
目前,尚無將Flame計劃項目移至其他計費計劃的具體時間表。但是,在接下來的幾個月中,您將收到有關移至其他計費方案所需時間表的信息。
我有一個項目/流程/業務模型,該模型依賴於固定的Firebase成本。我該怎麼辦?
註冊Blaze即用即付計劃,並確保設置項目預算警報。
我可以被授予創建新的Flame計劃項目的特殊權限嗎?
不,Firebase沒有為項目提供特殊的訪問權限來切換或註冊Flame計劃。
我將Flame計劃項目更改為其他計費計劃。如何將其改回來?
不再可以切換到Flame計劃。要訪問Flame計劃提供的服務,請確保您使用的是Blaze即用即付計劃,並考慮為您的項目設置預算警報。
作為Flame計劃停用的一部分,我的項目自動切換到其他計費計劃。我該怎麼辦?
自動計費計劃更改不屬於Flame計劃退出的當前範圍。確保檢查您的審核日誌中帳單更改。
為什麼Flame計劃被淘汰?
多年來,我們已經看到Flame計劃的使用率在下降,並且大多數使用該計劃的項目都沒有用盡其全部價值。維持此計費計劃通常並不划算,並且我們認為,如果將資源用於其他Firebase計劃,我們可以為每個人提供更好的服務。
Blaze計劃中的免費使用與Spark計劃中的免費使用有何不同?
Blaze計劃的免費使用量每天計算一次。使用限制也不同於針對雲功能,電話身份驗證和測試實驗室的Spark計劃。
對於Cloud Functions,Blaze計劃的免費使用情況是在計費帳戶級別而非項目級別計算的,並且具有以下限制:
- 每月2M調用
- 400K GB-秒/月
- 200K CPU秒/月
- 每月5 GB的網絡出口
對於電話身份驗證,Blaze計劃的免費使用量按月計算。
對於測試實驗室,Blaze計劃的免費使用具有以下限制:
- 每天30物理設備分鐘
- 每天60分鐘的虛擬設備
當我從Spark計劃更改為Blaze計劃時,免費使用配額會重置嗎?
Spark計劃中的免費使用包含在Blaze計劃中。移至Blaze計劃時,免費使用不會重置。
什麼是“同時數據庫連接”?
同時連接等效於連接到數據庫的一個移動設備,瀏覽器選項卡或服務器應用程序。 Firebase對與應用程序數據庫的同時連接數施加了硬性限制。這些限制足以保護Firebase和我們的用戶免受濫用。
Spark計劃上限為100,無法提高。 Flame和Blaze計劃每個數據庫的同時連接數限制為200,000。
此限制與您的應用程序的用戶總數不同,因為您的用戶不會一次全部連接。如果您需要同時進行200,000多個連接,請閱讀擴展多個數據庫。
如果我超出Spark計劃的存儲或實時數據庫的下載限制,會發生什麼?
為了給您提供可預測的價格,Spark計劃中提供給您的資源受到限制。這意味著當您超過任何月份的任何計劃限制時,您的應用將被關閉,以防止進一步使用資源和產生額外費用。
如果我超出了實時數據庫的Spark計劃同時連接限制,會發生什麼情況?
當您的應用達到Spark計劃的並發限制時,所有後續連接將被拒絕,直到某些現有連接關閉。該應用程序將繼續為已連接的用戶使用。
如果我超過Spark計劃的Cloud Storage上傳,下載或存儲限制,會發生什麼情況?
當您超出Spark計劃上的項目中的Cloud Storage限制時,結果取決於您超出的限制類型:
- 如果超出了GB的存儲限制,則除非刪除某些存儲的數據或升級到提供更多存儲空間或無限存儲空間的計劃,否則您將無法在該項目中存儲更多數據。
- 如果您超過了GB的下載限制,則除非您升級到限制較少或沒有限制的計劃,否則您的應用將無法在第二天(美國太平洋時間午夜開始)之前下載更多數據。
- 如果您超出了上傳或下載操作的限制,則除非您升級到限制限制較小或沒有限制的計劃,否則您的應用將無法在第二天(美國太平洋時間午夜開始)上傳或下載更多數據。限制。
Firebase與Google Cloud的集成如何工作?
Firebase與Google Cloud深度集成。項目在Firebase和Google Cloud之間共享,因此項目可以啟用Firebase服務和Google Cloud服務。您可以從Firebase控制台或Google Cloud Console訪問同一項目。具體來說:
- 某些Firebase產品直接由Google Cloud支持,例如Cloud Storage for Firebase。隨著時間的推移,由Google Cloud支持的產品列表將繼續增長。
- Firebase和Google Cloud共享您的許多設置,包括協作者和賬單信息。您對Firebase和Google Cloud的使用都顯示在同一張賬單上。
此外,升級到Blaze計劃時,您可以直接在Firebase項目內部使用Google Cloud世界一流的基礎架構即服務和API,價格為標準Google Cloud價格。您還可以將數據從Google Cloud直接導出到BigQuery進行分析。要了解更多信息,請參閱將BigQuery與Firebase鏈接。
將Google Cloud與Firebase結合使用具有許多增強安全性,改善延遲和節省時間的優勢(相對於其他未託管的雲服務)。請訪問Google Cloud網站以獲取更多詳細信息。
如果我在Google Cloud Console中添加或刪除該項目的賬單帳戶,Firebase項目會怎樣?
如果將結算帳戶添加到Google Cloud Console中的項目,則該項目當前在Spark計劃中時,該項目將自動升級到Firebase Blaze計劃。
相反,如果從Google Cloud Console中的項目中刪除了現有的有效結算帳戶,則該項目將降級為Firebase Spark計劃。
我可以隨時升級,降級或取消嗎?
是的,您可以隨時升級,降級或取消。請注意,我們不提供降級或取消的按比例退款。這意味著,如果您在結算期結束之前降級或取消付款,則您仍需在當月剩餘時間內付款。
我將獲得什麼樣的支持?
所有Firebase應用程序(包括免費計劃)均在美國太平洋工作時間提供Firebase工作人員的電子郵件支持。所有帳戶都對帳單相關問題,帳戶相關問題,技術(疑難解答)問題和事件報告提供無限支持。
我可以限制Blaze計劃的使用量嗎?
不,您目前不能限制您的Blaze計劃使用量。我們正在評估支持Blaze計劃使用上限的選項。
Blaze用戶可以為他們的項目或帳戶定義預算,並在支出接近這些限制時收到警報。有關更多信息,請參見設置預算警報。
什麼是自動備份?你們每小時提供一次備份嗎?
對於客戶來說,自動備份是我們Blaze計費計劃的一項高級功能,該計劃每天備份您的Firebase實時數據庫數據並將其上載到Google Cloud Storage 。
我們不提供每小時備份。
您提供開源,非營利性或教育性折扣嗎?
我們的Spark計劃可用於任何類型的個人或組織,包括非營利組織,學校和開源項目。由於這些計劃已包含大量配額,因此我們不為開源,非營利性或教育性項目提供任何特殊的折扣或計劃。
您是否提供企業合同,定價,支持或專用基礎架構託管?
我們的Blaze計劃適用於各種規模的企業,我們的SLA達到或超過了雲基礎架構的行業標準。但是,我們目前不提供企業合同,定價或支持,也沒有為諸如實時數據庫之類的服務提供專用的基礎架構託管(即本地安裝)。我們正在努力添加一些功能。
你們提供臨時定價嗎?我只想為一個或兩個功能按需付費。
我們在Blaze計劃中提供臨時定價,您只需為使用的功能付費。
付費Firebase計劃如何與Ads一起使用?有付費計劃的免費廣告積分嗎?
Firebase的定價計劃與廣告是分開的,因此沒有免費的廣告信用。作為Firebase開發人員,您可以將您的Ads帳戶“鏈接”到Firebase以支持轉化跟踪。
所有廣告系列都直接在Ads中進行管理,而廣告結算則通過Ads控制台進行管理。
雲功能定價
為什麼我需要一個計費帳戶才能將Cloud Functions用於Firebase?
用於Firebase的Cloud Functions依賴於一些付費的Google服務: Cloud Build , Container Registry和Cloud Storage 。除現有定價外,還將對這些服務的使用收費。
您只需為構建函數的運行時容器所需的計算時間付費。
與Google Container Registry互操作的Cloud Storage將為運行功能的容器提供存儲空間。您需要為部署功能所需的每個容器付費。您可能會注意到,每個存儲的容器收取少量費用-例如,按1個月的0.026美元計費1GB的存儲空間。
要了解有關您的賬單可能如何變化的更多信息,請查看以下內容
- 雲功能定價:現有的免費套餐不變。
- Cloud Build定價: Cloud Build提供免費套餐。
- 集裝箱登記處定價。
Firebase的Cloud Functions仍然可以免費使用嗎?
是的。在Blaze計劃中,Cloud Functions為調用,計算時間和Internet流量提供了永久的免費層。每月免費提供前2,000,000次調用,400,000 GB-秒,200,000 CPU-秒和5 GB的Internet出口流量。您只需要為超出這些閾值的使用付費。
每次部署操作都將為該功能的容器使用的存儲空間產生小規模費用。例如,如果您的功能通過Container Registry佔用了1GB的存儲空間,則每月需要向您收取$ 0.026的費用。如果您的開發過程依賴於部署測試功能,則可以在開發過程中使用Firebase Local Emulator Suite進一步降低成本。
請參閱Firebase定價計劃和Cloud Functions Pricing示例方案。
Firebase是否計劃提高Firebase雲功能的配額和限制?
不會。除了取消最大構建時間限制外,沒有其他計劃更改配額。每天達到120分鐘的構建配額時,您不會收到錯誤或警告,而是根據Blaze即用即付計劃的條款向您收費。請參閱配額和限制。
我可以獲得$ 300的Google Cloud信用額嗎?
是的,您可以在Google Cloud Console中創建一個計費帳戶來獲得$ 300的贈送金額,然後將該計費帳戶鏈接到Firebase項目。
在此處了解有關Google Cloud信用的更多信息。
請注意,如果您執行此操作,則必須在Firebase控制台中設置Blaze即用即付的結算計劃,以便在$ 300的信用額用完後您的項目繼續運行
我想遵循一個代碼實驗室來學習Firebase。可以給我一個臨時帳單帳戶嗎?
不,對不起您可以使用Firebase模擬器進行開發,而無需付費帳戶。或者,嘗試申請Google Cloud免費試用版。如果由於此更改您仍無法支付帳單,請聯繫Firebase支持。
我擔心我要付巨額賬單。
您可以在Google Cloud Console中設置預算警報,以幫助控制費用。要了解典型場景的成本核算,請參閱“雲功能定價”示例。
如何查看我當前的帳單費用?
在Firebase控制台中查看“使用情況”和“結算”信息中心。
我使用Firebase擴展。我會受到此更改的影響嗎?
是的。由於擴展使用Cloud Functions ,因此使用Node.js 10或更高版本的擴展將收取與其他功能相同的費用。
要使用基於Node.js 10或更高版本的擴展,您將需要升級到Blaze即用即付計費計劃。除了與您使用Firebase服務相關的任何費用外,您還需要為安裝的每個擴展(即使不使用它們)所需要的Firebase資源支付少量費用(通常每月約0.01美元)。
隱私
在哪裡可以找到有關Firebase隱私和安全性的信息?
在Firebase中查看“隱私和安全性”頁面。
Firebase SDK是否在Analytics(分析)之外記錄任何使用情況/診斷信息?
是的。目前僅適用於iOS,但將來可能會更改。 Firebase iOS SDK默認包含FirebaseCoreDiagnostics
框架。 Firebase使用此框架收集SDK使用情況和診斷信息,以幫助確定未來產品增強的優先級。 FirebaseCoreDiagnostics
是可選的,因此,如果您希望退出發送Firebase診斷日誌,則可以通過取消與應用程序的鏈接來實現。您可以在GitHub上瀏覽完整的源代碼,包括記錄的值
A / B測試
A / B測試:我可以創建和運行多少個實驗?
每個項目最多允許您進行300個實驗,其中最多可以包含24個正在運行的實驗,其餘的都作為草稿或已完成。
AdMob
AdMob:我可以將Windows應用程序鏈接到Firebase嗎?
Firebase控制台當前不支持Windows應用。
AdMob:為什麼我不能從Firebase控制台鏈接我的AdMob帳戶?
您可以通過AdMob控制台將AdMob應用鏈接到Firebase應用。為了關聯該帳戶,您需要同時是Firebase項目所有者和AdMob管理員。
AdMob:多個用戶可以將其AdMob帳戶鏈接到Firebase應用程序嗎?
不可以,每個AdMob帳戶只能有一個主要用戶。主要用戶是第一個接受Firebase服務條款的用戶。
分析工具
Analytics(分析):為什麼推薦使用Firebase產品的部分是Google Analytics(分析)?
Google Analytics(分析)是一種免費且無限的分析解決方案,可與Firebase功能配合使用,以提供強大的見解。它使您可以查看Crashlytics中的事件日誌,FCM中的通知有效性,動態鏈接的深層鏈接性能以及來自Google Play的應用內購買數據。它支持“遠程配置”,“預測”等中的高級受眾群體定位。
Google Analytics(分析)在Firebase控制台中充當智能層,可為您提供有關如何開發高質量應用程序,擴大用戶群並賺取更多收入的更可行的見解。
首先,請閱讀文檔。
Analytics(分析):如何控制與其他Firebase共享Analytics數據的方式?
默認情況下,您的Google Analytics(分析)數據用於增強其他Firebase和Google功能。您可以隨時控制如何在項目設置中共享Google Analytics(分析)數據。了解有關數據共享設置的更多信息。
Analytics: How do I know if I'm using Google Analytics for Firebase or a fully upgraded Google Analytics account?
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.
You can also check by viewing the Google Analytics card in the Firebase console (you can access this from settings > Project Settings > Integrations , then click Manage ). If you see a Linked Google Analytics account listed in the Your Google Analytics property section, your project is using the full Google Analytics experience in Firebase. If you do not see a Linked Google Analytics account , your project is using Google Analytics for Firebase.
Analytics: What will happen to my data when I upgrade to the new Google Analytics for Firebase?
This will not affect your existing Firebase project analytics data in the Firebase console.
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.
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.
Analytics: What is Firebase User Segmentation Storage?
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.
Analytics: Why don't I see any data after unlinking my app from Google Analytics?
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.
Creating a new Google Analytics account (and new property) will result in having a blank analytics dashboard in the Firebase console.
Analytics: Why do I get an error when trying to upgrade my project to the new Google Analytics experience?
If you are experiencing and error when upgrading, such as:
The operation has failed (Reason: Requested entity already exists)
or
The operation has failed (Reason: Precondition check failed)
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.
If this is still an issue, you can use the REST API to unlink by using the removeAnalytics
method , then use the addGoogleAnalytics
method to link a new property.
You can then move the data from one property to another .
Analytics: Will audiences and/or events defined in Google Analytics be available on the Firebase console?
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.
App Indexing
App Indexing: Can Google Search index multiple languages for a single app?
Google Search supports the following multi-language cases:
- The associated website has unique URLs for each language, and there is one corresponding app HTTP URL for each web URL.
- 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.
- 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.
App Indexing: Can App Indexing support multiple websites for an app?
Yes. Make sure that each associated website is verified for the Android app via the Google Play Console . Learn how to verify your app .
App Indexing: Do sitemaps need to be added via the Search Console?
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. Learn more about managing sitemaps . However, submitting a sitemap through Search Console lets you see statistics on submitted and indexed HTTP URLs in Search Console.
Authentication
Firebase Authentication: Which countries are supported for phone authentication?
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.
Country | Code |
---|---|
AD | Andorra |
AE | United Arab Emirates |
AF | Afghanistan |
AG | Antigua and Barbuda |
AL | Albania |
AM | Armenia |
AO | Angola |
AR | Argentina |
AS | American Samoa |
AT | Austria |
AU | Australia |
AW | Aruba |
AZ | Azerbaijan |
BA | Bosnia and Herzegovina |
BB | Barbados |
BD | Bangladesh |
BE | Belgium |
BF | Burkina Faso |
BG | Bulgaria |
BJ | Benin |
BM | Bermuda |
BN | Brunei Darussalam |
BO | Bolivia |
BR | Brazil |
BS | Bahamas |
BT | Bhutan |
BW | Botswana |
BY | Belarus |
BZ | Belize |
CA | Canada |
CD | Congo, (Kinshasa) |
CF | Central African Republic |
CG | Congo (Brazzaville) |
CH | Switzerland |
CI | Côte d'Ivoire |
CK | Cook Islands |
CL | Chile |
CM | Cameroon |
CO | Colombia |
CR | Costa Rica |
CV | Cape Verde |
CW | Curaçao |
CY | Cyprus |
CZ | Czech Republic |
DE | Germany |
DJ | Djibouti |
DK | Denmark |
DM | Dominica |
DO | Dominican Republic |
DZ | Algeria |
EC | Ecuador |
EG | Egypt |
ES | Spain |
ET | Ethiopia |
FI | Finland |
FJ | Fiji |
FK | Falkland Islands (Malvinas) |
FM | Micronesia, Federated States of |
FO | Faroe Islands |
FR | France |
GA | Gabon |
GB | United Kingdom |
GD | Grenada |
GE | Georgia |
GF | French Guiana |
GG | Guernsey |
GH | Ghana |
GI | Gibraltar |
GL | Greenland |
GM | Gambia |
GP | Guadeloupe |
GQ | Equatorial Guinea |
GR | Greece |
GT | Guatemala |
GY | Guyana |
HK | Hong Kong, SAR China |
HN | Honduras |
HR | Croatia |
HT | Haiti |
HU | Hungary |
ID | Indonesia |
IE | Ireland |
IL | Israel |
IM | Isle of Man |
IN | India |
IQ | Iraq |
IT | Italy |
JE | Jersey |
JM | Jamaica |
JO | Jordan |
JP | Japan |
KE | Kenya |
KG | Kyrgyzstan |
KH | Cambodia |
KM | Comoros |
KN | Saint Kitts and Nevis |
KR | Korea (South) |
KW | Kuwait |
KY | Cayman Islands |
KZ | Kazakhstan |
LA | Lao PDR |
LB | Lebanon |
LC | Saint Lucia |
LI | Liechtenstein |
LK | Sri Lanka |
LS | Lesotho |
LT | Lithuania |
LU | Luxembourg |
LV | Latvia |
LY | Libya |
MA | Morocco |
MD | Moldova |
ME | Montenegro |
MF | Saint-Martin (French part) |
MG | Madagascar |
MK | Macedonia, Republic of |
MM | Myanmar |
MN | Mongolia |
MO | Macao, SAR China |
MS | Montserrat |
MT | Malta |
MU | Mauritius |
MW | Malawi |
MX | Mexico |
MY | Malaysia |
MZ | Mozambique |
NA | Namibia |
NC | New Caledonia |
NE | Niger |
NF | Norfolk Island |
NG | Nigeria |
NI | Nicaragua |
NL | Netherlands |
NO | Norway |
NP | Nepal |
NZ | New Zealand |
OM | Oman |
PA | Panama |
PE | Peru |
PG | Papua New Guinea |
PH | Philippines |
PK | Pakistan |
PL | Poland |
PM | Saint Pierre and Miquelon |
PR | Puerto Rico |
PS | Palestinian Territory |
PT | Portugal |
PY | Paraguay |
QA | Qatar |
RE | Réunion |
RO | Romania |
RS | Serbia |
RU | Russian Federation |
RW | Rwanda |
SA | Saudi Arabia |
SC | Seychelles |
SE | Sweden |
SG | Singapore |
SH | Saint Helena |
SI | Slovenia |
SK | Slovakia |
SL | Sierra Leone |
SN | Senegal |
SR | Suriname |
ST | Sao Tome and Principe |
SV | El Salvador |
SZ | Swaziland |
TC | Turks and Caicos Islands |
TG | Togo |
TH | Thailand |
TL | Timor-Leste |
TM | Turkmenistan |
TO | Tonga |
TR | Turkey |
TT | Trinidad and Tobago |
TW | Taiwan, Republic of China |
TZ | Tanzania, United Republic of |
UA | Ukraine |
UG | Uganda |
US | United States of America |
UY | Uruguay |
UZ | Uzbekistan |
VC | Saint Vincent and Grenadines |
VE | Venezuela (Bolivarian Republic) |
VG | British Virgin Islands |
VI | Virgin Islands, US |
VN | Viet Nam |
WS | Samoa |
YE | Yemen |
YT | Mayotte |
ZA | South Africa |
ZM | Zambia |
ZW | Zimbabwe |
Cloud Functions
Cloud Functions runtime support
Why is the Node.js 8 runtime deprecated?
On Dec 31, 2019, Node.js 8 was marked end-of-life by the Node.js Foundation . At that time, the Node.js Foundation stopped issuing security releases for Node.js 8. Because of this, we recommend that you update to Node.js 10 or later as soon as you can.
What happens if a Node.js 8 function is left running after the removal of Node.js 8 support? Will it work indefinitely?
No it will not. Deployment of functions to the Node.js 8 runtime was disabled in the Firebase CLI on December 15, 2020. Execution of already-deployed functions will stop at some point in the future; if you have deployed functions to the Node.js 8 runtime, we recommend that you upgrade to the Node.js 12 runtime .
How do I upgrade to Node.js 12?
- Make sure you're on the Blaze pay-as-you-go billing plan .
- Make sure you are using Firebase CLI version 8.1.0 or later.
- Change the
engines
field in your functions'package.json
. - Optionally, test your changes using the Firebase emulator .
- Redeploy functions using the Firebase CLI v8.1.0 or later.
How can I make sure I deployed my functions to the Node.js 12 runtime?
In the Firebase console, go to the functions dashboard and check the runtime column.
I use Firebase Extensions. Will I be affected by this change?
Yes. Since extensions use Cloud Functions , the runtime of your extensions will need to be updated on the same timeline as Cloud Functions.
We recommend that you 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 Firebase console or CLI .
Cloud Messaging
Cloud Messaging: What's the difference between the Notifications composer and Cloud Messaging?
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.
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.
Capabilities | Notifications composer | Cloud Messaging | |
---|---|---|---|
Target | Single device | ||
Clients subscribed to topics (ie weather) | |||
Clients in predefined user segment (app, version, language) | |||
Clients in specified analytics audiences | |||
Clients in device groups | |||
Upstream from client to server | |||
Message Type | Notifications up to 2kb | ||
Data messages up to 4kb | |||
Delivery | Immediate | ||
Future client device local time | |||
Analytics | Built-in Notifications analytics collection and funnel analytics |
Cloud Messaging: Apple announced they're decprecating the legacy binary protocol for APNs. Do I need to do anything?
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.
Cloud Messaging: Do I need to use other Firebase services in order to use FCM?
You can use Firebase Cloud Messaging as a standalone component, in the same manner as you did with GCM, without using other Firebase services.
Cloud Messaging: I am an existing Google Cloud Messaging (GCM) developer. Should I move to Firebase Cloud Messaging?
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.
Benefits of upgrading to FCM SDK include:
- Simpler client development. You no longer have to write your own registration or subscription retry logic.
- 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.
To upgrade from GCM SDKs to FCM SDKs, see the guides for migrating Android and iOS apps.
Cloud Messaging: Why do my targeted devices apparently fail to receive messages?
When it looks like devices haven't successfully received messages, check first for these two potential causes:
Foreground message handling for notification messages . 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 iOS and Android .
Network firewall restrictions . 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:
- 5228
- 5229
- 5230
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 ASN of 15169 .
Cloud Messaging: I have implemented onMessageReceived
in my Android app, but it is not being called.
When your app is in the background, notification messages are displayed in the system tray, and onMessageReceived
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.
For more information, see Receive and handle messages .
Notifications composer: What's the difference between the Notifications composer and Cloud Messaging?
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.
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.
Here's a comparison of the messaging capabilities provided by Firebase Cloud Messaging and the Notifications composer:
Capabilities | Notifications composer | Cloud Messaging | |
---|---|---|---|
Target | Single device | ||
Clients subscribed to topics (ie weather) | |||
Clients in predefined user segment (app, version, language) | |||
Clients in specified analytics audiences | |||
Clients in device groups | |||
Upstream from client to server | |||
Message Type | Notifications up to 2kb | ||
Data messages up to 4kb | |||
Delivery | Immediate | ||
Future client device local time | |||
Analytics | Built-in Notifications analytics collection and funnel analytics |
Notifications composer: I am an existing Google Cloud Messaging (GCM) developer, and I want to use the Notifications composer. What should I do?
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.
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 Android and iOS apps.
Cloud Storage
Cloud Storage: Why can't I use Cloud Storage?
Cloud Storage for Firebase creates a default bucket in the App Engine free tier. This allows you to quickly get up and running with Firebase and Cloud Storage for Firebase, 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.
There are, however, two known cases where this bucket cannot be created and you will be unable to use Cloud Storage for Firebase:
- A project imported from Google Cloud which had a App Engine Master/Slave Datastore application.
- A project imported from Google Cloud which has domain prefixed projects. For example:
domain.com:project-1234
.
There are currently no workarounds to these issues, and we recommend that you create a new project in the Firebase console and enable Cloud Storage for Firebase in that project.
Cloud Storage: Why do I see new service account IDs associated with my Firebase projects that use Cloud Storage?
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.
If you used Cloud Storage before September 15, 2020, you may see the following legacy service account that is used to manage your bucket: firebase-storage@system.gserviceaccount.com
.
After September 15, 2020, Cloud Storage for Firebase buckets may include an additional new service account: service-<project number>@gcp-sa-firebasestorage.iam.gserviceaccount.com
.
You can view all service accounts associated with your project in the Firebase console, on the Service accounts tab .
Removing the new service account
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.
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 Cloud Storage bucket from your apps.
Adding the new service account
If you removed the new service account or disabled the API and want to add them back, follow the instructions provided in Creating and managing service accounts for using the Google Cloud Console to add service-<project number>@gcp-sa-firebasestorage.iam.gserviceaccount.com
to the set of service accounts for your project.
Crashlytics
Visit the Crashlytics troubleshooting & FAQ page for helpful tips and answers to more FAQs.
Crash Reporting: Why are there fewer crash reports in Analytics than Crash Reporting?
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:
- 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.
- Many third-party libraries keep out-of-process state (eg 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.
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.
Dynamic Links
Dynamic Links: Why does my Android app access each Dynamic Link twice?
The getInvitation
API clears the saved Dynamic Link to prevent it from being accessed twice. Be sure to call this API with the autoLaunchDeepLink
parameter set to false
in each of the deep link activities to clear it for the case when the activity is triggered outside the main activity.
Hosting
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?
Firebase automatically adds extra files containing metadata about the Hosting site, and these files are included in the total file count for the release.
Hosting: What's the largest file size that I can deploy to Firebase Hosting?
Hosting has a maximum size limit of 2 GB for individual files.
We recommend storing larger files using Cloud Storage , which offers a maximum size limit in the terabyte range for individual objects.
Performance Monitoring
Visit the Performance Monitoring troubleshooting & FAQ page for helpful tips and answers to more FAQs.
Performance Monitoring: How many custom URL patterns can I create?
You can create up to 400 total custom URL patterns per app and up to 100 custom URL patterns per domain for that app.
Predictions
Predictions: I just added Google Analytics to my app. When should I expect to see predictions in the console?
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.
Predictions: How long does it take for predictions to be made about a new user?
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.
Realtime Database
Realtime Database: Why was my Realtime Database reported bandwidth lower than average between September 2016 and March 2017?
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.
We released a fix for the bug in late March 2017, returning bandwidth reporting and billing to their normal levels.
Realtime Database: What are the scaling limitations of the Realtime Database?
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, batching operations using multi-path updates can help you achieve higher throughput.
In addition, each database instance has a cap on the number of simultaneous database connections . Our default limits are large enough for most applications. If you are building an app that requires additional scale, you may need to shard your application across multiple database instances for added scale. You may also consider Cloud Firestore as an alternative database.
Realtime Database: What can I do if I'm over my Realtime Database usage limits?
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 Realtime Database usage page of the Firebase console.
If you're over your download limit, you can upgrade your Firebase billing plan or wait until your download limit resets at the start of your next billing cycle. To decrease your downloads, try the following steps:
- Add queries to limit the data that your listen operations return.
- Check for unindexed queries.
- Use listeners that only download updates to data — for example,
on()
instead ofonce()
. - Use security rules to block unauthorized downloads.
If you're over your storage limit, upgrade your billing plan to avoid service disruptions. To reduce the amount of data in your database, try the following steps:
- Run periodic cleanup jobs.
- Reduce any duplicate data in your database.
Note that it may take some time to see any data deletions reflected in your storage allotment.
If you're over your simultaneous database connections limit, 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.
Remote Config
Remote Config: Why don't fetched values change the behavior and appearance of my app?
Unless you fetch values with fetchAndActivate()
, values are stored locally but not activated. To activate fetched values so that they can take effect, call activate
. This design lets you control when the behavior and appearance of your app changes, because you can choose when to call activate
. After you call activate
, your app source code determines when updated parameter values are used.
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.
To learn more about the Remote Config API and usage model, see Remote Config API Overview .
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?
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 FirebaseRemoteConfigSettings
object with a low minimum fetch interval ( setMinimumFetchIntervalInSeconds
) in your app.
Remote Config: How quickly does the Remote Config service return fetched values after my app sends a fetch request?
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.
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 fetchAndActivate
each time that your app does a full screen refresh.
Test Lab
Visit the Test Lab troubleshooting page for helpful tips and answers to FAQs.