Next.js 整合 Firebase:Firestore 資料庫與 Analytics 實戰指南

更新於 發佈於 閱讀時間約 7 分鐘

上一篇介紹了自動部署,這篇就來介紹我遇到的第二個坑:資料儲存以及瀏覽分析。

如果你根據官方文章或是生成式 AI 如 Gemini 等,你大概會得到這樣子的一份 code:

import { initializeApp, getApps, getApp } from 'firebase/app';
import { getFirestore } from 'firebase/firestore';
import { getAnalytics } from 'firebase/analytics';

const firebaseConfig = {
  apiKey: process.env.NEXT_PUBLIC_FIREBASE_API_KEY,
  authDomain: process.env.NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN,
  projectId: process.env.NEXT_PUBLIC_FIREBASE_PROJECT_ID,
  storageBucket: process.env.NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET,
  messagingSenderId: process.env.NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID,
  appId: process.env.NEXT_PUBLIC_FIREBASE_APP_ID,
  measurementId: process.env.NEXT_PUBLIC_FIREBASE_MEASUREMENT_ID
};

const app = !getApps().length ? initializeApp(firebaseConfig) : getApp();
const db = getFirestore(app);
const analytics = getAnalytics(app);

export { app, db, analytics };


我遇到了以下兩個問題,分享給大家。

  1. Firestore 連不上
    明明已經開好 db 了,但就是一直顯示連線錯誤,錯誤訊息也非常的難以 debug。不斷地顯示 Error: 5 NOT_FOUND
    最後,我參考了這篇的解答:github 討論區 內容提到:getFirestore() 裡需傳入第二個參數,為資料庫的名稱,將其傳入後便可正常連線。
  2. Analytics 一直無法使用
    結果是:我需要在最外層的 layout.tsx去引入 analytics。具體做法如下:
    首先建立 analytics.tsx
    'use client';

    import { useEffect } from 'react';
    import { analytics } from '@/lib/firebase';

    export function Analytics() {
      if (analytics === null) {
        console.warn('Firebase Analytics is not supported in this browser.');
      }
      useEffect(() => {}, []);
      return null;
    }
    此處 if (analytics === null)不可省略,否則 Next.js 會聰明的因為你並未使用 analytics而直接不 import 它,導致 analytics 無法成功設定,這是我卡最久的地方。

    src/app/layout.tsx中使用此 component,即可在 Analytics 的 Dashboard 上即時看到當前活躍人數等。
    import type { Metadata } from 'next';
    import './globals.css';
    import { cn } from '@/lib/utils';
    import { Header } from '@/components/common/header';
    import { Toaster } from '@/components/ui/toaster';
    import { Analytics } from '@/components/common/analytics';

    export default function RootLayout({
    children,
    }: Readonly<{
    children: React.ReactNode;
    }>) {
    return (
    <html lang="en" suppressHydrationWarning>
    <head>
    <link rel="preconnect" href="https://fonts.googleapis.com" />
    <link rel="preconnect" href="https://fonts.gstatic.com" crossOrigin="anonymous" />
    <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Space+Grotesk:wght@400;500;600;700&display=swap" rel="stylesheet" />
    </head>
    <body className={cn('min-h-screen bg-background font-body antialiased')}>
    <Analytics />
    <div className="relative flex min-h-screen flex-col">
    <Header />
    <main className="flex-1">{children}</main>
    </div>
    <Toaster />
    </body>
    </html>
    );
    }
留言
avatar-img
留言分享你的想法!
avatar-img
松。科技隨筆
0會員
3內容數
22 歲,軟體工程師。分享軟體開發、生成式 AI 應用、區塊鏈等我有興趣的主題~
你可能也想看
Thumbnail
2025 vocus 推出最受矚目的活動之一——《開箱你的美好生活》,我們跟著創作者一起「開箱」各種故事、景點、餐廳、超值好物⋯⋯甚至那些讓人會心一笑的生活小廢物;這次活動不僅送出了許多獎勵,也反映了「內容有價」——創作不只是分享、紀錄,也能用各種不同形式變現、帶來實際收入。
Thumbnail
2025 vocus 推出最受矚目的活動之一——《開箱你的美好生活》,我們跟著創作者一起「開箱」各種故事、景點、餐廳、超值好物⋯⋯甚至那些讓人會心一笑的生活小廢物;這次活動不僅送出了許多獎勵,也反映了「內容有價」——創作不只是分享、紀錄,也能用各種不同形式變現、帶來實際收入。
Thumbnail
嗨!歡迎來到 vocus vocus 方格子是台灣最大的內容創作與知識變現平台,並且計畫持續拓展東南亞等等國際市場。我們致力於打造讓創作者能夠自由發表、累積影響力並獲得實質收益的創作生態圈!「創作至上」是我們的核心價值,我們致力於透過平台功能與服務,賦予創作者更多的可能。 vocus 平台匯聚了
Thumbnail
嗨!歡迎來到 vocus vocus 方格子是台灣最大的內容創作與知識變現平台,並且計畫持續拓展東南亞等等國際市場。我們致力於打造讓創作者能夠自由發表、累積影響力並獲得實質收益的創作生態圈!「創作至上」是我們的核心價值,我們致力於透過平台功能與服務,賦予創作者更多的可能。 vocus 平台匯聚了
Thumbnail
首先確定VS Code的版本,如果你的版本跟我一樣是1.92.0那麼你可以參考我的作法...
Thumbnail
首先確定VS Code的版本,如果你的版本跟我一樣是1.92.0那麼你可以參考我的作法...
Thumbnail
近期 Google 搜尋引擎API機密文件的外流事件,絕對是近期震撼數位行銷世界的一大頭條,其內容揭示了一些有關 Google 搜尋結果生成原理的重要細節。今天本男爵就來跟各位聊聊這其中獲得的寶貴洞察,或許會對您在設計網站內容時有一些不同的想法!
Thumbnail
近期 Google 搜尋引擎API機密文件的外流事件,絕對是近期震撼數位行銷世界的一大頭條,其內容揭示了一些有關 Google 搜尋結果生成原理的重要細節。今天本男爵就來跟各位聊聊這其中獲得的寶貴洞察,或許會對您在設計網站內容時有一些不同的想法!
Thumbnail
需求情境: 為了讓多人使用 App,必須有驗證程序,以識別特定使用者,存取各自擁有的資源。 解決方案: 引用 google 所提供的雲端服務平台 Firebase,其中有多種驗證功能可選用。基於個人對 google 的偏愛,決定先採用 google signin 的方法,實作 login lo
Thumbnail
需求情境: 為了讓多人使用 App,必須有驗證程序,以識別特定使用者,存取各自擁有的資源。 解決方案: 引用 google 所提供的雲端服務平台 Firebase,其中有多種驗證功能可選用。基於個人對 google 的偏愛,決定先採用 google signin 的方法,實作 login lo
Thumbnail
R036 Blog API 伺服器的維護更新日誌 (2024/04/30) 開發環境技術 語言: Javascript 環境: Node JS 框架: Express.js 本次維護目的 優化及測試API伺服器程運行 重溫程式碼架構以便日後更新優化 Reac
Thumbnail
R036 Blog API 伺服器的維護更新日誌 (2024/04/30) 開發環境技術 語言: Javascript 環境: Node JS 框架: Express.js 本次維護目的 優化及測試API伺服器程運行 重溫程式碼架構以便日後更新優化 Reac
Thumbnail
在本篇文章中,將會設定 Cloud Run,以便每當將程式修改並推送到 GitHub 時,它都會使用 Cloud Build 自動構建和部署應用程序的最新版本。
Thumbnail
在本篇文章中,將會設定 Cloud Run,以便每當將程式修改並推送到 GitHub 時,它都會使用 Cloud Build 自動構建和部署應用程序的最新版本。
Thumbnail
在Google Analytics中,您可以授予其他使用者對您的資源(例如網站或應用程式)的存取權限。這樣他們就可以查看和分析資源的數據。下面是在Google Analytics中新增資源存取權限的步驟:
Thumbnail
在Google Analytics中,您可以授予其他使用者對您的資源(例如網站或應用程式)的存取權限。這樣他們就可以查看和分析資源的數據。下面是在Google Analytics中新增資源存取權限的步驟:
Thumbnail
每日自動檢查資料庫運作所產生的訊息,若發現有錯誤,自動寄出警告信給擔當人員
Thumbnail
每日自動檢查資料庫運作所產生的訊息,若發現有錯誤,自動寄出警告信給擔當人員
Thumbnail
整合測試的時候突然遇到一個突然無法登入產品網站的問題,把程式模組單獨拉出來測試又正常,觀察測試報告後發現出現發生登入異常的時間點並不固定,而且只要發生就會連續發生一段時間,程式被中斷掉。後來確認問題在...
Thumbnail
整合測試的時候突然遇到一個突然無法登入產品網站的問題,把程式模組單獨拉出來測試又正常,觀察測試報告後發現出現發生登入異常的時間點並不固定,而且只要發生就會連續發生一段時間,程式被中斷掉。後來確認問題在...
Thumbnail
近月來,許多企業都將 GA3 轉至 GA4,並使用 Looker Studio 呈現 GA4 上相關的行銷數據,然而有些企業在開啟 Looker Studio  GA4 報告時,會出現「請求配額已耗盡」錯誤,而這個錯誤源自於 GA4 API 的配額限制變更。
Thumbnail
近月來,許多企業都將 GA3 轉至 GA4,並使用 Looker Studio 呈現 GA4 上相關的行銷數據,然而有些企業在開啟 Looker Studio  GA4 報告時,會出現「請求配額已耗盡」錯誤,而這個錯誤源自於 GA4 API 的配額限制變更。
Thumbnail
在當今數位時代,SEO(Search Engine Optimization)已成為網站提升曝光度和流量的重要手段。Google Analytics作為一個龐大的數據分析工具,對於SEO分析提供了豐富的數據和洞察。以下是一個簡單的指南,幫助您學習如何使用Google Analytics進行SEO分析
Thumbnail
在當今數位時代,SEO(Search Engine Optimization)已成為網站提升曝光度和流量的重要手段。Google Analytics作為一個龐大的數據分析工具,對於SEO分析提供了豐富的數據和洞察。以下是一個簡單的指南,幫助您學習如何使用Google Analytics進行SEO分析
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News