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
「沒有醜女人,只有懶女人。」但我已經是個成熟的大人了,偷懶和漂亮我全都要!!推薦幾款我的保養跟美妝愛用,讓你躺著就把美麗掙了! 雙11在蝦皮爆買了一波,來開箱分享我的懶人系保養及美妝品。趁雙12蝦皮購物一起用優惠囤好物!文末還有「蝦皮分潤計畫」讓你邊花錢邊賺零用錢!
Thumbnail
「沒有醜女人,只有懶女人。」但我已經是個成熟的大人了,偷懶和漂亮我全都要!!推薦幾款我的保養跟美妝愛用,讓你躺著就把美麗掙了! 雙11在蝦皮爆買了一波,來開箱分享我的懶人系保養及美妝品。趁雙12蝦皮購物一起用優惠囤好物!文末還有「蝦皮分潤計畫」讓你邊花錢邊賺零用錢!
Thumbnail
嗨~各位不倒嗡,我是嗡嗡嗡的蜂聲 這個月點詩機主題是「購物清單」,想跟大家聊聊「慾望」這件事。 或許你點開這篇文章的時候,剛好在你心裡閃過類似的念頭 「我好想買那個喔。」 「這真的有必要嗎?」 「我是不是又開始亂花錢了?」 放心,我完全懂。 因為我也是在理性與慾望之間跳恰恰
Thumbnail
嗨~各位不倒嗡,我是嗡嗡嗡的蜂聲 這個月點詩機主題是「購物清單」,想跟大家聊聊「慾望」這件事。 或許你點開這篇文章的時候,剛好在你心裡閃過類似的念頭 「我好想買那個喔。」 「這真的有必要嗎?」 「我是不是又開始亂花錢了?」 放心,我完全懂。 因為我也是在理性與慾望之間跳恰恰
Thumbnail
大家都知道要補充膠原蛋白,但步入中年後的我,肌膚的變化不只是「流失變快」,連狀態也開始慢慢改變。 後來才明白,原來膠原蛋白的補充不只要「吃對」,更要「吃對時間」。 就像肌膚保養會分成早晚程序,膠原的補充其實也需要「分時」進行,才能更貼近需求,效果也更好。 BEAUTY CLUB 讓我養成了「早
Thumbnail
大家都知道要補充膠原蛋白,但步入中年後的我,肌膚的變化不只是「流失變快」,連狀態也開始慢慢改變。 後來才明白,原來膠原蛋白的補充不只要「吃對」,更要「吃對時間」。 就像肌膚保養會分成早晚程序,膠原的補充其實也需要「分時」進行,才能更貼近需求,效果也更好。 BEAUTY CLUB 讓我養成了「早
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
在本篇文章中,將會設定 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