將 Firebase Crashlytics 資料匯出至 BigQuery

您可將 Crashlytics 資料匯出至 BigQuery,以便進一步分析。BigQuery 可讓您使用 BigQuery SQL 分析資料、匯出至其他雲端服務供應商,並用於 Google 數據分析的視覺化及自訂資訊主頁。

啟用 BigQuery Export

  1. 前往 Firebase 控制台的「Integrations」(整合) 頁面。
  2. 在「BigQuery」資訊卡中,按一下「連結」
  3. 按照畫面上的指示啟用 BigQuery。

將專案連結至 BigQuery 時:

  • Firebase 會設定每天將 Firebase 專案資料同步至 BigQuery 的作業。
  • 根據預設,專案中的所有應用程式都會連結至 BigQuery,而您之後新增至專案的所有應用程式都會自動連結至 BigQuery。此外,您可以控管該讓哪些應用程式傳送資料
  • Firebase 會將現有資料的副本匯出至 BigQuery。每個連結的應用程式都會擁有一個批次資料表,內含每日同步處理的資料。
  • 如果您啟用 Crashlytics BigQuery 串流匯出功能,所有連結的應用程式都會有即時資料表,其中包含持續更新的資料。

如要停用 BigQuery 匯出功能,請在 Firebase 控制台中取消連結專案

哪些資料會匯出至 BigQuery?

Firebase Crashlytics 資料會匯出至名為 firebase_crashlytics 的 BigQuery 資料集。根據預設,系統會在 Crashlytics 資料集中為專案中每個應用程式的建立個別資料表。Firebase 會根據應用程式的軟體包 ID 來命名資料表,中間會轉換成底線,並在結尾附加平台名稱。

例如,ID 為 com.google.test 的應用程式資料會在名為 com_google_test_ANDROID 的資料表中。這個批次資料表每天會更新一次。如果您啟用 Crashlytics BigQuery 串流匯出,Firebase Crashlytics 資料也會即時串流至 com_google_test_ANDROID_REALTIME

表格中的每一列都代表應用程式發生的事件,包括當機事件、一般錯誤和 ANR 事件。

啟用 Crashlytics BigQuery 串流匯出功能

您可以使用 BigQueryStreaming 來即時串流 Crashlytics 資料。這個 API 可用於任何需要即時資料的用途,例如在即時資訊主頁中顯示資訊、觀看即時發布內容,或監控應用程式問題來觸發快訊和自訂工作流程。

Crashlytics BigQuery 串流匯出功能不適用於 BigQuery 沙箱。

啟用 Crashlytics BigQuery 串流匯出後,除了批次資料表外,您還會有即時資料表。以下是您應注意的資料表差異:

批次資料表 即時資料表
  • 每天匯出一次資料
  • 事件可長期儲存,再批次寫入 BigQuery
  • 最多可在 30 天前補充
  • 即時匯出資料
  • 沒有可用的補充作業

批次資料表非常適合用於長期分析及找出隨時間變化的趨勢,因為我們一定會在寫入事件前儲存事件,最多 30 天即可將事件補充至資料表。將資料寫入即時資料表時,系統會立即將資料寫入 BigQuery,因此適合用於即時資訊主頁和自訂快訊。這兩個資料表可與拼接查詢結合,藉此發揮兩者的優點。請參閱下方的「範例 9」查詢。

根據預設,即時資料表的分區到期時間為 30 天。如要瞭解如何修改分區到期時間,請參閱更新分區到期時間

啟用 Crashlytics BigQuery 串流

如要啟用串流功能,請前往 BigQuery「整合」頁面的 Crashlytics 專區,然後勾選「Include stream」(包含串流) 核取方塊。

數據分析範本

如要在數據分析範本中啟用即時資料,請按照使用數據分析以視覺化方式呈現匯出的 Crashlytics 資料一文中的操作說明進行。

檢視表

您可以使用 BigQuery UI 將下列查詢範例轉換成檢視表。如需詳細操作說明,請參閱建立檢視表

你可以如何處理匯出的資料?

BigQuery 匯出作業包含原始當機資料,包括裝置類型、作業系統、例外狀況 (Android 應用程式) 或錯誤 (Apple 應用程式) 和 Crashlytics 記錄及其他資料。

在 BigQuery 中使用 Firebase Crashlytics 資料

以下範例說明您可以在 Crashlytics 資料中執行的查詢。您無法在 Crashlytics 資訊主頁中查看這些查詢產生的報表。

Crashlytics 查詢的範例

下列範例示範如何產生報表,將當機事件資料匯總至更容易理解的摘要中。

範例 1:每日當機次數

一名待開發客戶開發人員在盡可能修正錯誤後,認為自己的團隊終於準備好推出新的相片分享應用程式。在開發之前,他們想先檢查過去一個月的每日當機次數,確保錯誤 -bash 逐漸讓應用程式更穩定:

SELECT
  COUNT(DISTINCT event_id) AS number_of_crashes,
  FORMAT_TIMESTAMP("%F", event_timestamp) AS date_of_crashes
FROM
 `projectId.firebase_crashlytics.package_name_ANDROID`
GROUP BY
  date_of_crashes
ORDER BY
  date_of_crashes DESC
LIMIT 30;

範例 2:找出最普遍的當機事件

為了適當排定生產計畫的優先順序,專案管理員思考如何指出產品中最常出現的 10 個當機問題。產生的查詢可提供相關的資料點:

SELECT
  DISTINCT issue_id,
  COUNT(DISTINCT event_id) AS number_of_crashes,
  COUNT(DISTINCT installation_uuid) AS number_of_impacted_user,
  blame_frame.file,
  blame_frame.line
FROM
  `projectId.firebase_crashlytics.package_name_ANDROID`
WHERE
  event_timestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(),INTERVAL 168 HOUR)
  AND event_timestamp < CURRENT_TIMESTAMP()
GROUP BY
  issue_id,
  blame_frame.file,
  blame_frame.line
ORDER BY
  number_of_crashes DESC
LIMIT 10;

示例 3:前 10 大當機裝置

秋天是換新手機的季節!開發人員知道這也意味著是新裝置特有的問題季節。為了及早因應演變過程的相容性問題,開發人員會將一項查詢集結在一起,找出過去一週最常當機的 10 部裝置:

SELECT
  device.model,
COUNT(DISTINCT event_id) AS number_of_crashes
FROM
  `projectId.firebase_crashlytics.package_name_ANDROID`
WHERE
  event_timestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 168 HOUR)
  AND event_timestamp < CURRENT_TIMESTAMP()
GROUP BY
  device.model
ORDER BY
  number_of_crashes DESC
LIMIT 10;

範例 4:依自訂鍵篩選

某遊戲開發人員想知道自家遊戲的哪個關卡最當機。為協助對方追蹤這項統計資料,他們設定了自訂 Crashlytics 鍵 current_level,在使用者每次達到新關卡時更新。

Objective-C

CrashlyticsKit setIntValue:3 forKey:@"current_level";

Swift

Crashlytics.sharedInstance().setIntValue(3, forKey: "current_level");

Java

Crashlytics.setInt("current_level", 3);

在 BigQuery 匯出作業中使用該鍵,然後編寫查詢,回報與每個當機事件相關聯的 current_level 值分佈情形:

SELECT
COUNT(DISTINCT event_id) AS num_of_crashes,
  value
FROM
  `projectId.firebase_crashlytics.package_name_ANDROID`
UNNEST(custom_keys)
WHERE
  key = "current_level"
GROUP BY
  key,
  value
ORDER BY
  num_of_crashes DESC

範例 5:User ID 擷取

開發人員有提供搶先體驗版應用程式。大部分使用者都很喜歡,但有三位使用者經歷過不尋常的當機次數。為瞭解決這個問題,他們會編寫查詢,使用使用者 ID 來提取這些使用者的所有當機事件:

SELECT *
FROM
  `projectId.firebase_crashlytics.package_name_ANDROID`
WHERE
  user.id IN ("userid1", "userid2", "userid3")
ORDER BY
  user.id
 

範例 6:找出面臨特定當機問題的所有使用者

開發人員已向一群 Beta 版測試人員發布重大錯誤。團隊可使用上述範例 2 中的查詢找出特定當機問題 ID。現在,他們想執行查詢,擷取受到此當機事件影響的應用程式使用者清單:

SELECT user.id as user_id
FROM
  `projectId.firebase_crashlytics.package_name_ANDROID`
WHERE
  issue_id = "YOUR_ISSUE_ID"
  AND application.display_version = ""
  AND user.id != ""
ORDER BY
  user.id;

示例 7:受到當機問題影響的使用者人數 (按國家/地區細分)

現在團隊在推出新版本時偵測到重大錯誤。使用上述範例 2 中的查詢來找出特定當機問題 ID。團隊希望能瞭解這個當機問題是否已經擴散到世界各地的使用者。

如要撰寫這項查詢,團隊必須:

  1. 啟用 Google Analytics (分析) 的 BigQuery 匯出功能。請參閱將專案資料匯出至 BigQuery

  2. 更新應用程式,將使用者 ID 同時傳遞至 Google Analytics (分析) SDK 和 Crashlytics SDK。

    Objective-C
    CrashlyticsKit setUserIdentifier:@"123456789";
    FIRAnalytics setUserID:@"12345678 9";
    
    Swift
    Crashlytics.sharedInstance().setUserIdentifier("123456789");
    Analytics.setUserID("123456789");
    
    Java
    Crashlytics.setUserIdentifier("123456789");
    mFirebaseAnalytics.setUserId("123456789");
    
  3. 撰寫查詢,以便使用使用者 ID 欄位彙整 Google Analytics (分析) BigQuery 資料集中的事件,以及 Crashlytics BigQuery 資料集中發生的當機事件:

    SELECT DISTINCT c.issue_id, a.geo.country, COUNT(DISTINCT c.user.id) as num_users_impacted
    FROM `projectId.firebase_crashlytics.package_name_ANDROID` c
    INNER JOIN  `projectId.analytics_YOUR_TABLE.events_*` a on c.user.id = a.user_id
    WHERE
     c.issue_id = "YOUR_ISSUE_ID"
     AND a._TABLE_SUFFIX BETWEEN '20190101'
     AND '20200101'
    GROUP BY
     c.issue_id,
     a.geo.country,
     c.user.id
    

示例 8:目前為止的前 5 大問題

必須啟用 Crashlytics BigQuery 串流匯出功能

SELECT
  issue_id,
  COUNT(DISTINCT event_id) AS events
FROM
  `your_project.firebase_crashlytics.package_name_ANDROID_REALTIME`
WHERE
  DATE(event_timestamp) = CURRENT_DATE()
GROUP BY
  issue_id
ORDER BY
  events DESC
LIMIT
  5;

示例 9:自 DATE 至今的前 5 大問題,包括今天

必須啟用 Crashlytics BigQuery 串流匯出功能。

在這個範例中,我們結合批次和即時資料表,在可靠的批次資料中加入即時資訊。由於 event_id 是主鍵,因此我們可以使用 DISTINCT event_id 刪除這兩個資料表中的任何常見事件。

SELECT
  issue_id,
  COUNT(DISTINCT event_id) AS events
FROM (
  SELECT
    issue_id,
    event_id,
    event_timestamp
  FROM
    `your_project.firebase_crashlytics.package_name_ANDROID_REALTIME`
  UNION ALL
  SELECT
    issue_id,
    event_id,
    event_timestamp
  FROM
    `your_project.firebase_crashlytics.package_name_ANDROID`)
WHERE
  event_timestamp >= "2020-01-13"
GROUP BY
  issue_id
ORDER BY
  events DESC
LIMIT
  5;

瞭解 BigQuery 中的 Firebase Crashlytics 結構定義

將 Crashlytics 連結至 BigQuery 後,Firebase 會匯出近期事件 (當機、一般錯誤和 ANR),包括連結前兩天發生的事件,且可選擇補充最多 30 天。

從連結開始到您停用連結為止,Firebase 每天都會匯出 Crashlytics 事件。每次匯出後,資料可能需要幾分鐘才能在 BigQuery 中顯示。

資料集

Firebase Crashlytics 會在 BigQuery 中為 Crashlytics 資料建立新的資料集。資料集涵蓋整個專案,即使專案包含多個應用程式亦然。

資料表

Firebase Crashlytics 會針對專案中的每個應用程式建立資料表,除非您選擇停用該應用程式的資料匯出功能。Firebase 會根據應用程式的軟體包 ID 為資料表命名,並在句號轉換為底線,並在結尾加上平台名稱。

舉例來說,ID 為 com.google.test 的 Android 應用程式資料會在名為 com_google_test_ANDROID 的資料表中,而即時資料 (如已啟用) 會出現在名為 com_google_test_ANDROID_REALTIME 的資料表中

資料表包含一組標準的 Crashlytics 資料,以及開發人員定義的任何自訂 Crashlytics 鍵。

資料列

每個在資料表中的資料列都代表應用程式遇到的某個錯誤。

資料欄

當機事件、一般錯誤和 ANR 情形表中的資料欄相同。如果啟用 Crashlytics BigQuery 串流匯出功能,即時資料表的欄會與批次資料表相同。匯出中的資料欄如下所示。

沒有堆疊追蹤

顯示各列的資料欄,該資料列代表不含堆疊追蹤的事件。

欄位名稱 資料類型 說明
platform STRING Apple 或 Android 應用程式
套裝組合 ID STRING 軟體包 ID,例如 com.google.gmail
event_id STRING 事件的專屬 ID
is_fatal BOOLEAN 應用程式是否當機
錯誤類型 STRING 事件的錯誤類型 (FATAL、NON_FATAL、ANR)
問題 ID STRING 與事件相關的問題
子類 ID STRING 與這個事件相關聯的問題變化版本
請注意,並非所有事件都有相關聯的問題變化版本。
event_timestamp TIMESTAMP 事件發生時間
device RECORD 發生事件的裝置
device.manufacturer STRING 裝置製造商
device.model STRING 裝置型號
device.frameworkure STRING X86_32、X86_64、ARMV7、ARM64、ARMV7S 或 ARMV7K
記憶體 RECORD 裝置的記憶體狀態
Memorystore.used INT64 已使用的記憶體位元組數
記憶體用量 INT64 剩餘的記憶體位元組數
儲存空間 RECORD 裝置的永久儲存空間
storage.used INT64 已使用的儲存空間位元組數
storage.free INT64 剩餘的儲存空間位元組數
作業系統 RECORD 裝置上作業系統的詳細資料
作業系統.display_version STRING 裝置的 OS 版本
operating_system.name STRING 裝置上的 OS 名稱
作業系統.modification_state STRING 裝置是否遭到修改,例如已越獄解鎖/已啟用 Root 權限 (MODIFIED 或 UNMODIFIED)
作業系統.type STRING 裝置上執行的 OS 類型 (例如 IOS、MACOS);僅適用於 Apple 平台應用程式
作業系統.device_type STRING 裝置類型 (例如行動裝置、平板電腦、電視等);又稱為「裝置類別」
調度應用程式資源 RECORD 產生事件的應用程式
app.build_version STRING 應用程式的建構版本
應用程式.display_version STRING
使用者 RECORD 選用:系統收集到應用程式使用者的資訊
user.name STRING 選填:使用者的名稱
<使用者名稱>.電子郵件地址 STRING 選填:使用者的電子郵件地址
user.id STRING 選用:與使用者相關聯的應用程式專屬 ID
自訂鍵 重複紀錄 開發人員定義的鍵/值組合
custom_keys.key STRING 開發人員定義的金鑰
custom_keys.value STRING 開發人員定義的值
安裝作業 STRING 可識別不重複應用程式和裝置安裝的 ID
Crashlytics_sdk_versions STRING 產生事件的 Crashlytics SDK 版本
應用程式方向 STRING PORTRAIT、LANDSCAPE、FACE_UP 或 FACE_DOWN
裝置螢幕方向 STRING PORTRAIT、LANDSCAPE、FACE_UP 或 FACE_DOWN
process_state STRING 背景資訊
記錄檔 重複紀錄 Crashlytics 記錄器產生的記錄訊息 (如有啟用) 並加上時間戳記
log.timestamp TIMESTAMP 記錄建立時間
記錄.message STRING 記錄的訊息
導覽標記 重複紀錄 加上時間戳記的 Google Analytics (分析) 導覽標記 (如有啟用)
breadcrumbs.timestamp TIMESTAMP 與導覽標記相關聯的時間戳記
breadcrumbs.name STRING 與導覽標記相關聯的名稱
breadcrumbs.params 重複紀錄 與導覽標記相關聯的參數
breadcrumbs.params.key STRING 與導覽標記相關聯的參數鍵
breadcrumbs.params.value STRING 與導覽標記相關聯的參數值
blame_Frame RECORD 經認定為當機或錯誤的根本原因
blame_Frame.line INT64 影格檔案的行號
blame_Frame.file STRING 框架檔案名稱
blame_frame.symbol STRING 液化符號或生氣的符號 (如無法飲水)
blame_frame.offset INT64 產生含有程式碼的二進位映像檔的位元組偏移,為 Java 例外狀況設定
blame_Frame.address INT64 二進位映像檔中的位址,包含程式碼,為 Java 影格未設定
blame_Frame.library STRING 包含框架的程式庫顯示名稱
blame_frame.owner STRING 開發人員、供應商、執行時間、平台或系統
blame_frame.blamed BOOLEAN Crashlytics 的分析結果是否指出這個影格是當機或錯誤的原因
例外狀況 重複紀錄 僅限 Android 裝置:這個事件期間發生的例外狀況。巢狀例外狀況會以反向時間順序顯示 (讀取:最後一個記錄是擲回的第一個例外狀況)
Rules.type STRING 例外狀況類型,例如 java.lang.IllegalStateException
例外狀況.exception_message STRING 與例外狀況相關的訊息
Exception.nested BOOLEAN 除了最後一次的例外狀況 (例如第一筆記錄) 外,其餘所有屬性皆為 True
例外狀況.title STRING 討論串的標題
Exception.subtitle (例外狀況) STRING 討論串的副標題
Rules.blamed BOOLEAN 如果 Crashlytics 判斷錯誤或當機問題為何,則傳回「是」
Rules.Frames 重複紀錄 與例外狀況相關的影格
Exception.Frames.line INT64 影格檔案的行號
Rules.Frames.file STRING 框架檔案名稱
Exception.Frames.symbol STRING 液化符號或生氣的符號 (如無法飲水)
Rules.Frames.offset INT64 產生含有程式碼的二進位映像檔的位元組偏移,為 Java 例外狀況設定
Rules.Frames.address INT64 二進位映像檔中的位址,包含程式碼,為 Java 影格未設定
Exception.Frames.library STRING 包含框架的程式庫顯示名稱
Rules.Frames.owner STRING 開發人員、供應商、執行時間、平台或系統
Rules.Frames.blamed BOOLEAN Crashlytics 的分析結果是否指出這個影格是當機或錯誤的原因
錯誤 重複紀錄 僅限 Apple 應用程式:一般錯誤
error.queue_name STRING 執行執行緒的佇列
error.code INT64 與應用程式自訂記錄 NSError 相關聯的錯誤代碼
error.title STRING 討論串的標題
錯誤。子標題 STRING 討論串的副標題
error.blamed BOOLEAN Crashlytics 的分析是否判定這個框架是錯誤原因
error.Frames 重複紀錄 堆疊追蹤的框架
error.Frames.line INT64 影格檔案的行號
error.Frames.file STRING 框架檔案名稱
error.Frames.symbol STRING 液化符號或生氣的符號 (如無法飲水)
error.Frames.offset INT64 做為包含程式碼的二進位圖像的位元組偏移
error.Frames.address INT64 包含程式碼的二進位映像檔中的位址
error.Frames.library STRING 包含框架的程式庫顯示名稱
error.Frames.owner STRING 開發人員、供應商、執行時間、平台或系統
error.Frames.blamed BOOLEAN Crashlytics 的分析是否判定這個框架是錯誤原因
討論串 重複紀錄 活動進行時顯示的討論串
Thread.crashed BOOLEAN 執行緒是否當機
執行緒.thread_name STRING 討論串名稱
Thread.queue_name STRING 僅限 Apple 應用程式:執行執行緒的佇列
Thread.signal_name STRING 造成應用程式當機的信號名稱,只會顯示在已停止運作的原生執行緒上
Thread.signal_code STRING 導致應用程式當機的信號程式碼;僅顯示在停止運作的原生執行緒
Thread.crash_address INT64 導致應用程式當機的信號位址;僅顯示在停止運作的原生執行緒
Thread.code INT64 僅限 Apple 應用程式:應用程式自訂記錄 NSError 的錯誤代碼
Thread.title STRING 討論串的標題
Thread.subtitle STRING 討論串的副標題
Thread.blamed BOOLEAN Crashlytics 的分析結果是否指出這個影格是當機或錯誤的原因
Thread.Frames 重複紀錄 執行緒的框架
Threads.Frames.line INT64 影格檔案的行號
Thread.Frames.file STRING 框架檔案名稱
Threads.frames.symbol STRING 脫水符號或原始符號 (如不確定性)
Thread.Frames.offset INT64 做為包含程式碼的二進位圖像的位元組偏移
Thread.Frames.address INT64 包含程式碼的二進位映像檔中的位址
Thread.Frames.library STRING 包含框架的程式庫顯示名稱
Threads.frames.owner STRING 開發人員、供應商、執行時間、平台或系統
Thread.Frames.blamed BOOLEAN Crashlytics 的分析是否判定這個框架是錯誤原因
unity_metadata.unity_version STRING 在這部裝置上執行的 Unity 版本
unity_metadata.debug_build BOOLEAN 如果這是偵錯版本
unity_metadata.processor_type STRING 處理器類型
unity_metadata.processor_count INT64 處理器 (核心) 數量
unity_metadata.processor_frequency_mhz INT64 處理器頻率(以 MHz 為單位)
unity_metadata.system_memory_size_mb INT64 Mb 中的系統記憶體大小
unity_metadata.graphics_memory_size_mb INT64 圖形記憶體 (MB)
unity_metadata.graphics_device_id INT64 圖形裝置的 ID
unity_metadata.graphics_device_vendor_id INT64 圖形處理器供應商的 ID
unity_metadata.graphics_device_name STRING 圖形裝置名稱
unity_metadata.graphics_device_vendor STRING 圖形裝置的供應商
unity_metadata.graphics_device_version STRING 圖形裝置的版本
unity_metadata.graphics_device_type STRING 圖形裝置類型
unity_metadata.graphics_shader_level INT64 圖形的著色器層級
unity_metadata.graphics_render_target_count INT64 圖形算繪目標數量
unity_metadata.graphics_copy_texture_support STRING 支援 Unity API 中定義的圖像紋理複製功能
unity_metadata.graphics_max_texture_size INT64 轉譯紋理專用的大小上限
unity_metadata.screen_size_px STRING 螢幕尺寸 (以像素為單位),格式為「寬 x 高」
unity_metadata.screen_Resolution_dpi STRING 螢幕的 DPI 以浮點數表示
unity_metadata.screen_refresh_rate_hz INT64 螢幕刷新率 (以 Hz)

使用數據分析視覺化匯出的 Crashlytics 資料

Google 數據分析可將您在 BigQuery 中的 Crashlytics 資料集變成易於閱讀、共用且可完全自訂的報告。

如要進一步瞭解如何使用數據分析,請參閱數據分析快速入門指南:歡迎使用數據分析

使用 Crashlytics 報表範本

數據分析提供一個 Crashlytics 範例報表,其中包括從匯出的 Crashlytics BigQuery 結構定義中,一組完整的維度和指標。如果您已啟用 Crashlytics BigQuery 串流匯出功能,則可在數據分析範本的「Realtime Trends」(即時趨勢) 頁面中查看這些資料。您可以使用該範例做為範本,根據自己的應用程式原始當機資料快速建立新報表與視覺化內容:

  1. 開啟 Crashlytics 數據分析資訊主頁範本
  2. 按一下右上角的 [Use Template] (使用範本)
  3. 在「新資料來源」下拉式選單中,選取「建立新資料來源」
  4. 在「BigQuery」資訊卡上,按一下 [Select] (選取)
  5. 依序選取「My Projects」>「[your-project-name]」>「firebase_crashlytics」 >「[your-table-name]」,選取包含 Crashlytics 匯出資料的資料表。您隨時都能選取批次資料表。如果已啟用 Crashlytics BigQuery 串流匯出功能,則可改為選取即時資料表。
  6. 在「Configuration」(設定) 底下,將 [Crashlytics Template level] (Crashlytics 範本等級) 設為 [Default] (預設)
  7. 按一下 [Connect] (連結) 建立新的資料來源。
  8. 按一下 [Add to Report] (新增至報表) 傳回 Crashlytics 範本。
  9. 最後按一下「Create Report」(建立報表),建立 Crashlytics 數據分析資訊主頁範本的副本。