C++ クライアント アプリからアップストリーム メッセージを送信する

XMPP 接続サーバー プロトコルを実装しているアプリサーバーは、ユーザー デバイスからクラウドへのアップストリーム メッセージを受信できます。アップストリーム メッセージを開始するには、クライアント アプリから次の要素を含むリクエストを送信します。

  • 受信側アプリサーバーのアドレス(SENDER_ID@fcm.googleapis.com の形式)。
  • 送信者 ID ごとに一意なメッセージ ID。
  • メッセージのペイロードの Key-Value ペアを構成するメッセージ データ。

このデータを受信すると、FCM は、送信側のデバイスとアプリに関するその他の情報を追加して、アプリサーバーに送信する XMPP スタンザを生成します。

C++ クライアント アプリからアップストリーム メッセージを送信する

サーバーにアップストリーム メッセージを送信するために、C++ クライアント アプリは次に示すようなメッセージを作成して Send を呼び出します。

::firebase::messaging::Message message;
message.to = SENDER_ID + "@fcm.googleapis.com";
message.message_id = get_unique_message_id();
message.data["my_message", "Hello World");
message.data["my_action", "SAY HELLO");
message.time_to_live = TIME_TO_LIVE;
::firebase::messaging::Send(message);

ここで

  • message.to は、受信側アプリサーバーのアドレスです。形式は SENDER_ID@fcm.googleapis.com です。

  • message.message_id は一意のメッセージ識別子です。すべてのメッセージ レシーバー コールバックは、このメッセージ ID に基づいて識別されます。

  • message.data は、文字列によるキーと値のマッピングです。

  • message.time_to_live では、デバイスがオフラインの場合にメッセージを 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 メッセージを送信する必要があります。ACK を受信しないと、FCM はアプリサーバーへのメッセージの送信を再試行することがあります。

<message id="">
  <gcm xmlns="google:mobile:data">
  {
      "to":"REGID",
      "message_id":"m-123"
      "message_type":"ack"
  }
  </gcm>
</message>

アップストリーム メッセージの構文の詳細については、XMPP 接続サーバー リファレンスをご覧ください。