如果應用程式伺服器實作 XMPP 連線伺服器通訊協定,就能接收來自使用者裝置的雲端上游訊息。如要啟動上游訊息,用戶端應用程式會傳送要求,其中包含下列項目:
- 接收應用程式伺服器的地址,格式為
SENDER_ID@fcm.googleapis.com
。 - 每個寄件者 ID 的郵件 ID 均不得重複。
- 訊息資料,包含訊息酬載的鍵/值組合。
收到這項資料後,FCM 會建立 XMPP 節,傳送至應用程式伺服器,並新增有關傳送裝置和應用程式的其他資訊。
從 Unity 用戶端應用程式傳送上游訊息
如要將訊息傳送至伺服器,Unity 用戶端應用程式會組合訊息,並呼叫 Send
,如下所示:
Firebase.Messaging.Message message;
message.To = SENDER_ID + "@fcm.googleapis.com";
message.MessageId = get_unique_message_id();
message.Data("my_message", "Hello World");
message.Data("my_action", "SAY HELLO");
message.TimeToLive = kTimetoLive;
Firebase.Messaging.FirebaseMessaging.Send(message);
其中:
message.To
是接收應用程式伺服器的地址,格式為SENDER_ID@fcm.googleapis.com
。message.MessageId
是專屬郵件 ID。系統會根據此訊息 ID 識別所有訊息接收端回呼。message.Data
是鍵/值對應的字串。message.TimeToLive
會指定訊息在裝置離線時,應保留在 FCM 儲存空間中的時間長度 (以秒為單位)。如果 FCM 無法在到期前傳送訊息,就會將通知傳回用戶端。
FCM 用戶端程式庫會在用戶端應用程式上快取訊息,並在用戶端有有效的伺服器連線時傳送訊息。FCM 收到訊息後,就會將訊息傳送至應用程式伺服器。
在應用程式伺服器上接收 XMPP 訊息
當 FCM 收到來自用戶端應用程式的上游訊息呼叫時,就會產生必要的 XMPP 節,用於傳送上游訊息。FCM 會新增 category
和 from
欄位,然後將類似下列的節錄傳送至應用程式伺服器:
<message id=""> <gcm xmlns="google:mobile:data"> { "category":"com.example.yourapp", // to know which app sent it "data": { "hello":"world", }, "message_id":"m-123", "from":"REGID" } </gcm> </message>
傳送 ACK 訊息
回應上游訊息 (如上方所述) 時,應用程式伺服器必須使用相同的連線,傳送包含專屬訊息 ID 的 ACK 訊息。如果 FCM 未收到 ACK,可能會嘗試將訊息傳送至應用程式伺服器。
<message id=""> <gcm xmlns="google:mobile:data"> { "to":"REGID", "message_id":"m-123" "message_type":"ack" } </gcm> </message>
如要進一步瞭解上游訊息語法,請參閱 XMPP 連線伺服器參考資料。