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
松。科技隨筆
0會員
3內容數
22 歲,軟體工程師。分享軟體開發、生成式 AI 應用、區塊鏈等我有興趣的主題~
你可能也想看
Thumbnail
近月來,許多企業都將 GA3 轉至 GA4,並使用 Looker Studio 呈現 GA4 上相關的行銷數據,然而有些企業在開啟 Looker Studio  GA4 報告時,會出現「請求配額已耗盡」錯誤,而這個錯誤源自於 GA4 API 的配額限制變更。
Thumbnail
近月來,許多企業都將 GA3 轉至 GA4,並使用 Looker Studio 呈現 GA4 上相關的行銷數據,然而有些企業在開啟 Looker Studio  GA4 報告時,會出現「請求配額已耗盡」錯誤,而這個錯誤源自於 GA4 API 的配額限制變更。
Thumbnail
在Google Analytics中,您可以授予其他使用者對您的資源(例如網站或應用程式)的存取權限。這樣他們就可以查看和分析資源的數據。下面是在Google Analytics中新增資源存取權限的步驟:
Thumbnail
在Google Analytics中,您可以授予其他使用者對您的資源(例如網站或應用程式)的存取權限。這樣他們就可以查看和分析資源的數據。下面是在Google Analytics中新增資源存取權限的步驟:
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
每日自動檢查資料庫運作所產生的訊息,若發現有錯誤,自動寄出警告信給擔當人員
Thumbnail
每日自動檢查資料庫運作所產生的訊息,若發現有錯誤,自動寄出警告信給擔當人員
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
需求情境: 為了讓多人使用 App,必須有驗證程序,以識別特定使用者,存取各自擁有的資源。 解決方案: 引用 google 所提供的雲端服務平台 Firebase,其中有多種驗證功能可選用。基於個人對 google 的偏愛,決定先採用 google signin 的方法,實作 login lo
Thumbnail
需求情境: 為了讓多人使用 App,必須有驗證程序,以識別特定使用者,存取各自擁有的資源。 解決方案: 引用 google 所提供的雲端服務平台 Firebase,其中有多種驗證功能可選用。基於個人對 google 的偏愛,決定先採用 google signin 的方法,實作 login lo
Thumbnail
5 月將於臺北表演藝術中心映演的「2026 北藝嚴選」《海妲・蓋柏樂》,由臺灣劇團「晃晃跨幅町」製作,本文將以從舞台符號、聲音與表演調度切入,討論海妲・蓋柏樂在父權社會結構下的困境,並結合榮格心理學與馮.法蘭茲對「阿尼姆斯」與「永恆少年」原型的分析,理解女人何以走向精神性的操控、毀滅與死亡。
Thumbnail
5 月將於臺北表演藝術中心映演的「2026 北藝嚴選」《海妲・蓋柏樂》,由臺灣劇團「晃晃跨幅町」製作,本文將以從舞台符號、聲音與表演調度切入,討論海妲・蓋柏樂在父權社會結構下的困境,並結合榮格心理學與馮.法蘭茲對「阿尼姆斯」與「永恆少年」原型的分析,理解女人何以走向精神性的操控、毀滅與死亡。
Thumbnail
首先確定VS Code的版本,如果你的版本跟我一樣是1.92.0那麼你可以參考我的作法...
Thumbnail
首先確定VS Code的版本,如果你的版本跟我一樣是1.92.0那麼你可以參考我的作法...
Thumbnail
在本篇文章中,將會設定 Cloud Run,以便每當將程式修改並推送到 GitHub 時,它都會使用 Cloud Build 自動構建和部署應用程序的最新版本。
Thumbnail
在本篇文章中,將會設定 Cloud Run,以便每當將程式修改並推送到 GitHub 時,它都會使用 Cloud Build 自動構建和部署應用程序的最新版本。
Thumbnail
近期 Google 搜尋引擎API機密文件的外流事件,絕對是近期震撼數位行銷世界的一大頭條,其內容揭示了一些有關 Google 搜尋結果生成原理的重要細節。今天本男爵就來跟各位聊聊這其中獲得的寶貴洞察,或許會對您在設計網站內容時有一些不同的想法!
Thumbnail
近期 Google 搜尋引擎API機密文件的外流事件,絕對是近期震撼數位行銷世界的一大頭條,其內容揭示了一些有關 Google 搜尋結果生成原理的重要細節。今天本男爵就來跟各位聊聊這其中獲得的寶貴洞察,或許會對您在設計網站內容時有一些不同的想法!
Thumbnail
整合測試的時候突然遇到一個突然無法登入產品網站的問題,把程式模組單獨拉出來測試又正常,觀察測試報告後發現出現發生登入異常的時間點並不固定,而且只要發生就會連續發生一段時間,程式被中斷掉。後來確認問題在...
Thumbnail
整合測試的時候突然遇到一個突然無法登入產品網站的問題,把程式模組單獨拉出來測試又正常,觀察測試報告後發現出現發生登入異常的時間點並不固定,而且只要發生就會連續發生一段時間,程式被中斷掉。後來確認問題在...
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News