Catch up on everthing we announced at this year's Firebase Summit. Learn more

從 Unity 客戶端應用程序發送上游消息

如果你的應用服務器實現了XMPP連接服務器協議,它可以從一個用戶的設備到雲接收上游消息。要啟動上游消息,客戶端應用程序會發送一個包含以下內容的請求:

  • 在格式接收應用程序服務器的地址SENDER_ID@fcm.googleapis.com
  • 一個消息的ID應該是為每個唯一的發送者ID
  • 包含消息負載的鍵值對的消息數據。

當收到此數據時,FCM 會構建一個 XMPP 節以發送到應用程序服務器,並添加一些有關發送設備和應用程序的附加信息。

從 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 進行標識。

  • message.Data是地圖上的鍵和值作為字符串的。

  • message.TimeToLive指定消息應該多長時間(以秒計)被保持在FCM存儲如果設備處於離線狀態。如果 FCM 無法在達到此過期時間之前傳遞消息,它會將通知發送回客戶端。

FCM 客戶端庫將消息緩存在客戶端應用程序上,並在客戶端具有活動服務器連接時發送。收到消息後,FCM 將其發送到應用服務器。

在應用服務器上接收 XMPP 消息

當 FCM 收到來自客戶端應用程序的上游消息調用時,它會生成必要的 XMPP 節以發送上游消息。 FCM添加categoryfrom字段,然後發出類似如下的應用服務器的節:

<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連接服務器參考有關上游消息語法的更多信息。