Firebase 雲端通訊訊息類型

透過 FCM,您可以將兩種類型的訊息傳送至用戶端應用程式:

  • 通知訊息與「顯示訊息」類似,FCM SDK 會自動處理。
  • 資料訊息,由用戶端應用程式處理。

通知訊息包含一組預先定義且使用者可見的金鑰,並可包含選用的資料酬載。相較之下,資料訊息只包含您定義的自訂鍵/值組合。兩種訊息類型的酬載大小上限皆為 4096 個位元組,但從 Firebase 控制台傳送訊息時除外,因為控制台會強制執行 1000 個字元的限制。

使用情境 如何傳送
通知訊息 FCM SDK 在背景執行時,會代表用戶端應用程式在使用者裝置上顯示訊息。否則,如果應用程式在收到通知時於前景執行,應用程式的程式碼會決定行為。
  1. Cloud Functions 或應用程式伺服器等信任環境中,使用 Firebase Admin SDKHTTP v1 API。 設定 notification 鍵。 可視需要提供資料酬載。一律可收合

    請參閱一些 顯示通知的範例,並傳送要求酬載。

  2. 使用 通知撰寫工具:輸入訊息文字、標題等,然後傳送。提供自訂資料,新增選用資料酬載。
資料訊息 用戶端應用程式負責處理資料訊息。資料訊息只包含自訂鍵/值組合,不含保留的鍵名 (詳情請參閱下文)。 在信任的環境 (例如 Cloud Functions 或應用程式伺服器) 中,使用 Firebase Admin SDKHTTP v1 API。 在傳送要求中,設定 data 鍵。

如果想讓 FCM SDK 在應用程式於背景執行時自動顯示通知,可以使用通知訊息。FCM 可以傳送通知訊息,並視需要加入資料酬載。在這種情況下,FCM 會顯示通知酬載,而用戶端應用程式則會處理資料酬載。

如要使用自己的用戶端應用程式程式碼處理訊息,可以使用資料訊息。

通知訊息

您可以使用 Firebase 控制台 Firebase Admin SDKFCM HTTP v1 API 傳送通知訊息。Firebase 控制台提供以數據分析為基礎的 A/B 測試,協助您改善通知訊息。

如要使用 Firebase Admin SDKFCM HTTP v1 API 傳送通知訊息,請使用預先定義的通知訊息鍵/值選項組合,設定 notification 鍵。您可以使用下列範例,在即時通訊應用程式中設定通知訊息格式

{
  "message":{
    "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
    "notification":{
      "title":"Portugal vs. Denmark",
      "body":"great match!"
    }
  }
}

應用程式在背景運作時,通知訊息會傳送到通知匣。如果是前景應用程式,訊息會由回呼函式處理。

如需可用於建構通知訊息的預先定義鍵完整清單,請參閱 FCM HTTP v1 API 通知物件參考文件。

資料訊息

您可以自行決定如何使用 FCM 酬載 data 實作所選的加密配置。請確認自訂鍵/值組合中沒有任何保留字。保留字詞包括 frommessage_type,或任何以 google.gcm.gcm.notification. 開頭的字詞。

以下範例顯示頂層或通用資料欄位的使用情形,由接收訊息的所有平台上的用戶端解讀。在每個平台上,用戶端應用程式都會透過回呼函式接收資料酬載

{
  "message":{
    "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
    "data":{
      "Nick" : "Mario",
      "body" : "great match!",
      "Room" : "PortugalVSDenmark"
    }
  }
}

通知訊息 (可選用資料酬載)

您可以透過程式輔助方式或使用 Firebase 控制台,傳送含有自訂鍵/值組合選用酬載的通知訊息。在「通知撰寫工具」中,使用「進階選項」中的「自訂資料」欄位。

應用程式收到同時包含通知和資料酬載的訊息時,會根據應用程式處於背景或前景狀態 (也就是收到訊息時是否處於活動狀態),採取不同的行為。

  • 在背景執行時,應用程式會在通知匣中收到通知酬載,且只會在使用者輕觸通知時處理資料酬載。
  • 應用程式在前台運作時,會收到包含兩個酬載的訊息物件。

以下是包含 notification 鍵和 data 鍵的 JSON 格式訊息:

{
  "message":{
    "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
    "notification":{
      "title":"Portugal vs. Denmark",
      "body":"great match!"
    },
    "data" : {
      "Nick" : "Mario",
      "Room" : "PortugalVSDenmark"
    }
  }
}