本文件提供 XMPP 語法參考資料,可用於在應用程式伺服器、用戶端應用程式和 Firebase Cloud Messaging (FCM) 之間傳遞訊息。應用程式伺服器必須連線至以下端點:
// Production fcm-xmpp.googleapis.com:5235 // Testing fcm-xmpp.googleapis.com:5236
可用的參數和選項分為以下類別:
下游訊息語法
本節說明傳送下游訊息的語法。
下游 XMPP 訊息 (JSON)
下表列出 XMPP JSON 訊息的目標、選項和酬載。
參數 | 用量 | 說明 | |
---|---|---|---|
目標 | |||
to |
選用,字串 |
這個參數可指定訊息的收件者。
這個值可以是裝置的註冊權杖、裝置群組的通知鍵,或單一主題 (前面加上 |
|
condition |
選填,字串 | 這個參數會指定邏輯運算式,其中包含決定訊息目標的條件。 支援條件:主題,格式為「yourTopics in topics」。這個值不區分大小寫。 支援的運算子: |
|
選項 | |||
message_id |
必要,字串 | 這個參數可明確識別 XMPP 連線中的訊息。 |
|
collapse_key |
選用,字串 | 這個參數可識別可摺疊的一組訊息 (例如使用 我們無法保證訊息的傳送順序。 注意:系統在任何時間點最多允許 4 個不同的收合鍵。這表示 FCM 可為每個用戶端應用程式同時儲存 4 則不同的訊息。如果超過這個數字,無法保證 FCM 會保留哪 4 個收合金鑰。 |
|
priority |
選用,字串 | 設定訊息的優先順序。有效值為「normal」和「high」。在 Apple 平台上,這些優先順序對應至 APN 5 和 10。 根據預設,系統會以高優先順序傳送通知訊息,以一般優先順序傳送資料訊息。正常優先順序可最佳化用戶端應用程式的電池消耗量,除非需要立即傳送,否則應使用這類順序。對於優先順序為「一般」的訊息,應用程式可能會在未指定的延遲時間後收到訊息。 以高優先順序傳送的訊息會立即傳送,應用程式可以顯示通知。 |
|
content_available |
選用,布林值 | 在 Apple 平台上,請使用這個欄位代表 APN 酬載中的 |
|
mutable_content |
選用,JSON 布林值 | 在 Apple 平台上,請使用這個欄位來代表 APN 酬載中的 |
|
time_to_live |
選填,數字 | 如果裝置處於離線狀態,此參數會指定訊息應保留在 FCM 儲存空間中的時間長度 (以秒為單位)。支援的存留時間上限為 4 週,預設值為 4 週。詳情請參閱「設定訊息的生命週期」。 |
|
dry_run |
選填,布林值 | 這個參數若設為 預設值為 |
|
酬載 | |||
data |
選用,物件 | 此參數會指定訊息酬載的鍵/值組合。 例如,使用 在 Apple 平台上,如果訊息是由 APN 傳送,則代表自訂資料欄位。如果由 FCM 提供,則會在 在 Android 上,這會產生名為 鍵不得是保留字詞 (「from」、「message_type」或任何以「google」或「gcm」開頭的字詞)。請勿使用本表所定義的任何字詞 (例如 建議使用字串類型的值。您必須將物件或其他非字串資料類型 (例如整數或布林值) 中的值轉換為字串。 |
|
notification |
選填,物件 | 這個參數會指定使用者可見的預先定義通知酬載鍵/值組合,詳情請參閱通知酬載支援。如要進一步瞭解通知訊息和資料訊息選項,請參閱「訊息類型」。如果提供通知酬載,或是將 content_available 選項設為 true ,以便傳送訊息至 Apple 裝置,則系統會透過 APN 傳送訊息;否則,則會透過 FCM 傳送。 |
通知酬載支援
下表列出可用來建構 Apple 平台和 Android 通知訊息的預先定義鍵。
參數 | 用量 | 說明 |
---|---|---|
title |
選用,字串 |
通知的標題。 手機和平板電腦不會顯示這個欄位。 |
body |
選用,字串 |
通知的內文。 |
sound |
選用,字串 |
裝置收到通知時要播放的音效。
字串,指定用戶端應用程式主套件或應用程式資料容器的 |
badge |
選填,字串 |
主畫面應用程式圖示上的徽章值。 如未指定,徽章不會變更。
如果設為 |
click_action |
選填,字串 |
使用者點選通知時會觸發的動作。
對應至 APN 酬載中的 |
subtitle |
選用,字串 |
通知的副標題。 |
body_loc_key |
選用,字串 |
應用程式字串資源中內文字串的鍵,用於將內文本地化為使用者目前的本地化版本。
對應至 APN 酬載中的 詳情請參閱「酬載鍵參考資料」和「將遠端通知內容本地化」。 |
body_loc_args |
選用:JSON 陣列做為字串 |
用來取代
對應至 APN 酬載中的 詳情請參閱「酬載鍵參考資料」和「將遠端通知內容本地化」。 |
title_loc_key |
選填,字串 |
應用程式字串資源中標題字串的鍵,用於將標題文字本地化為使用者目前的語言。
對應至 APN 酬載中的 詳情請參閱「酬載鍵參考資料」和「將遠端通知內容本地化」。 |
title_loc_args |
選用:JSON 陣列做為字串 |
變數字串值,可用於取代
對應至 APN 酬載中的 詳情請參閱「酬載鍵參考資料」和「將遠端通知內容本地化」。 |
參數 | 用量 | 說明 |
---|---|---|
title |
選用,字串 |
通知的標題。 |
body |
選用,字串 |
通知的內文。 |
android_channel_id |
選用,字串 |
通知的管道 ID (Android O 的新功能)。 應用程式必須先建立含有這個管道 ID 的管道,才能收到含有這個管道 ID 的任何通知。 如果您未在要求中傳送這個管道 ID,或是應用程式尚未建立所提供的管道 ID,FCM 會使用應用程式資訊清單中指定的管道 ID。 |
icon |
選用,字串 |
通知的圖示。
將可繪製資源 |
sound |
選用,字串 |
裝置收到通知時要播放的音效。
支援 |
tag |
選用,字串 |
用於取代通知導覽匣中現有通知的 ID。 如果未指定,每個要求都會建立新的通知。 如果已指定,且已顯示含有相同標記的通知,新通知會取代通知導覽匣中的現有通知。 |
color |
選用,字串 |
通知的圖示顏色,以 |
click_action |
選用,字串 |
使用者點選通知時會觸發的動作。 如果有指定,系統就會在使用者點選通知時啟動具有相符意圖篩選器的活動。 |
body_loc_key |
選用,字串 |
應用程式字串資源中內文字串的鍵,用於將內文本地化為使用者目前的本地化版本。 詳情請參閱「字串資源」。 |
body_loc_args |
選用:JSON 陣列做為字串 |
變數字串值,可用於取代 詳情請參閱「格式化和樣式」。 |
title_loc_key |
選用,字串 |
應用程式字串資源中標題字串的鍵,用於將標題文字本地化為使用者目前的語言。 詳情請參閱「 字串資源」。 |
title_loc_args |
選用:JSON 陣列做為字串 |
變數字串值,可用於取代 詳情請參閱「格式化和樣式」。 |
參數 | 用量 | 說明 |
---|---|---|
title |
選用,字串 |
通知的標題。 |
body |
選用,字串 |
通知的內文。 |
icon |
選用,字串 |
用於通知圖示的網址。 |
click_action |
選填,字串 |
使用者點選通知時會觸發的動作。 所有網址值都必須使用 HTTPS。 |
解讀下游 XMPP 訊息回應
下表列出了下游 XMPP 訊息回應中的欄位。
參數 | 用量 | 說明 |
---|---|---|
from |
必要,字串 | 這項參數會指定傳送此回應的使用者。 這個值是用戶端應用程式的註冊權杖。 |
message_id |
必要,字串 | 這個參數可明確識別 XMPP 連線中的訊息。 這個值是用來唯一識別相關訊息的字串。 |
message_type |
必要,字串 | 這個參數會指定從 FCM 傳送至應用程式伺服器的 如果將值設為 |
error |
選用,字串 | 這個參數會指定與下游訊息相關的錯誤。當 message_type 為 nack 時,系統會設定此屬性。詳情請參閱表 4。 |
error_description |
選用,字串 | 這個參數會提供錯誤的說明資訊。當 message_type 為 nack 時,系統會設定此值。 |
下游訊息錯誤回應代碼
下表列出下游訊息的錯誤回應代碼。
錯誤 | XMPP 程式碼 | 建議做法 |
---|---|---|
缺少註冊權杖 | INVALID_JSON |
確認要求包含註冊權杖 (位於純文字訊息的 registration_id 中,或位於 JSON 中的 to 或 registration_ids 欄位)。 |
APNs 註冊無效 | INVALID_JSON |
如果是 iOS 註冊,請確認用戶端的註冊要求包含有效的 APN 權杖和應用程式 ID。 |
註冊權杖無效 | BAD_REGISTRATION |
請檢查您傳遞至伺服器的註冊權杖格式。請確認該值與用戶端應用程式透過 FCM 註冊時收到的註冊權杖相符。請勿截斷或新增其他字元。 |
未註冊的裝置 | DEVICE_UNREGISTERED |
在許多情況下,現有的註冊權杖可能會失效,包括:
|
寄件者不符 | SENDER_ID_MISMATCH |
註冊權杖會與特定一組寄件者相關聯。當用戶端應用程式註冊 FCM 時,必須指定哪些寄件者可以傳送訊息。傳送訊息至用戶端應用程式時,請使用其中一個傳送者 ID。如果切換至其他傳送者,現有的註冊權杖就無法運作。 |
JSON 無效 | INVALID_JSON |
檢查 JSON 訊息的格式是否正確,並包含有效的欄位 (例如,確保傳入正確的資料類型)。 |
訊息太大 | INVALID_JSON |
請確認郵件中所含酬載資料的總大小不超過 FCM 限制:大多數郵件的大小為 4096 個位元組,郵件傳送至主題的大小則為 2048 個位元組。包括鍵和值。 |
資料金鑰無效 | INVALID_JSON |
確認酬載資料不包含 FCM 內部使用的索引鍵 (例如 from 、gcm ,或是 google 前置字串的任何值)。請注意,FCM 也會使用部分字詞 (例如 collapse_key ),但在酬載中允許使用這些字詞,在這種情況下,酬載值會遭到 FCM 值覆寫。 |
無效存留時間 | INVALID_JSON |
請確認 time_to_live 中使用的值為整數,代表 0 到 2,419,200 秒 (4 週) 之間的時間長度。 |
錯誤的 ACK 訊息 | BAD_ACK |
請先確認 ack 訊息的格式正確無誤,再重試。詳情請參閱表 6。 |
逾時 | SERVICE_UNAVAILABLE |
伺服器無法及時處理要求。重試相同要求,但您必須:
注意:造成問題的寄件者可能會遭到列入黑名單。 |
內部伺服器錯誤 | INTERNAL_SERVER_
|
伺服器嘗試處理要求時發生錯誤。您可以按照「逾時」(請參閱上方列) 中的規定重試相同要求。 |
裝置訊息傳送頻率超出上限 | DEVICE_MESSAGE_RATE |
傳送至特定裝置的訊息比率過高。請減少傳送至這部裝置的訊息數量,但不要立即重試傳送至這部裝置。 |
超出主題訊息率 | TOPICS_MESSAGE_RATE |
向特定主題訂閱者的訊息比率過高。請減少針對這個主題傳送的訊息數量,不要立即重試。 |
連線排除 | CONNECTION_DRAINING |
連線耗盡,因此無法處理訊息。這是因為 FCM 需要定期關閉連線,才能執行負載平衡。透過其他 XMPP 連線重試訊息。 |
APN 憑證無效 | INVALID_APNS_CREDENTIAL |
無法傳送指定至 iOS 裝置的訊息,因為必要的 APN 驗證金鑰未上傳或已過期。檢查開發和實際運作環境的憑證是否有效。 |
驗證失敗 | AUTHENTICATION_FAILED |
無法透過外部推播服務進行驗證。請檢查您是否使用正確的網頁推播憑證。 |
上游訊息語法
上游訊息是用戶端應用程式傳送至應用程式伺服器的訊息。目前只有 XMPP 支援上游訊息傳送功能。如要進一步瞭解如何透過用戶端應用程式傳送訊息,請參閱平台的說明文件。
解讀上游 XMPP 訊息
下表說明 FCM 在回應來自用戶端應用程式的上游訊息要求時,所產生 XMPP 節內的欄位。
參數 | 用量 | 說明 |
---|---|---|
from |
必要,字串 | 這個參數會指定傳送訊息的使用者。 值為用戶端應用程式的註冊權杖。 |
category |
必要,字串 | 這個參數會指定傳送訊息的用戶端應用程式應用程式套件名稱。 |
message_id |
必要,字串 | 這個參數可指定訊息的專屬 ID。 |
data |
選用,字串 | 此參數會指定訊息酬載的鍵/值組合。 |
傳送 ACK 訊息
下表說明應用程式伺服器收到上游訊息後,應傳送至 FCM 的 ACK 回應。
參數 | 用量 | 說明 |
---|---|---|
to |
必要,字串 | 這個參數可指定回覆訊息的收件者。 這個值必須是傳送上游訊息的用戶端應用程式註冊權杖。 |
message_id |
必要,字串 | 這個參數會指定回應適用的訊息。這個值必須是對應上游訊息的 message_id 值。 |
message_type |
必要,字串 | 這個參數會指定從應用程式伺服器傳至 CCS 的 ack 訊息。對於上游訊息,應一律設為 ack 。 |
FCM 伺服器訊息 (XMPP)
這是從 FCM 傳送至應用程式伺服器的訊息。以下是 FCM 傳送至應用程式伺服器的主要訊息類型:
- 控制:這些 CCS 產生的訊息表示需要從應用程式伺服器採取行動。
下表說明 CCS 傳送至應用程式伺服器的訊息中包含的欄位。
參數 | 用量 | 說明 |
---|---|---|
常用欄位 | ||
message_type |
必要,字串 | 這個參數會指定訊息的類型:control。 設為 |
control_type |
選填,字串 | 這個參數會指定從 FCM 傳送的控制訊息類型。 目前僅支援 |