Firebase Summit で発表されたすべての情報をご覧ください。Firebase を使用してアプリ開発を加速し、自信を持ってアプリを実行する方法を紹介しています。詳細

Androidでアップストリームメッセージを送信する

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

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

  • SENDER_ID@fcm.googleapis.com形式の受信アプリ サーバーのアドレス。
  • 送信者 IDごとに一意である必要があるメッセージ ID。
  • メッセージのペイロードのキーと値のペアで構成されるメッセージ データ。

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

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

Android アプリは、 FirebaseMessaging.sendを使用してアップストリーム メッセージを送信できます。

Java

FirebaseMessaging fm = FirebaseMessaging.getInstance();
fm.send(new RemoteMessage.Builder(SENDER_ID + "@fcm.googleapis.com")
        .setMessageId(Integer.toString(messageId))
        .addData("my_message", "Hello World")
        .addData("my_action","SAY_HELLO")
        .build());

Kotlin+KTX

val fm = Firebase.messaging
fm.send(remoteMessage("$SENDER_ID@fcm.googleapis.com") {
    setMessageId(messageId.toString())
    addData("my_message", "Hello World")
    addData("my_action", "SAY_HELLO")
})

アップストリーム メッセージのコールバックを処理する

FirebaseMessagingを使用すると、コールバックonMessageSentおよびonSendErrorを実装して、アップストリーム メッセージのステータスを確認できます。エラーの場合、 onSendErrorはエラー コードとともにSendExceptionを返します。たとえば、20 メッセージの制限に達した後にクライアントがさらにメッセージを送信しようとすると、 SendException#ERROR_TOO_MANY_MESSAGESが返されます。

デバイスがオフラインの場合、または FCM サービスを使用してアップストリーム メッセージをサーバーに転送できない場合、Android クライアント アプリ インスタンスは最大 20 個の保留中のメッセージを蓄積できます。このようなメッセージが FCM で正常に送信される前に期限切れになった場合、 onSendErrorSendException#ERROR_TTL_EXCEEDEDを返します。

ネットワークの使用を最適化するために、FCM はonMessageSentonSendErrorへの応答をバッチ処理するため、メッセージごとに確認応答がすぐに行われない場合があります。

アプリ サーバーで 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 接続サーバー リファレンスを参照してください。