XMPP 接続サーバー プロトコルを実装しているアプリサーバーは、ユーザー デバイスからクラウドへのアップストリーム メッセージを受信できます。アップストリーム メッセージを開始するには、クライアント アプリから次の要素を含むリクエストを送信します。
- 受信側アプリサーバーのアドレス(
SENDER_ID@fcm.googleapis.com
の形式)。 - 送信者 ID ごとに一意なメッセージ ID。
- メッセージのペイロードの Key-Value ペアを構成するメッセージ データ。
このデータを受信すると、FCM は、送信側のデバイスとアプリに関するその他の情報を追加して、アプリサーバーに送信する XMPP スタンザを生成します。
Android クライアント アプリからアップストリーム メッセージを送信する
Android アプリは、FirebaseMessaging.send を使用してアップストリーム メッセージを送信できます。
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") }, )
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());
アップストリーム メッセージ コールバックを処理する
FirebaseMessaging
では、コールバック onMessageSent
と onSendError
を実装して、アップストリーム メッセージのステータスを確認できます。エラーの場合、onSendError
はエラーコードとともに SendException
を返します。たとえば、メッセージ数の上限である 20 件に達した後で、クライアントがさらにメッセージを送信しようとすると、SendException#ERROR_TOO_MANY_MESSAGES
が返されます。
デバイスがオフライン状態のときや、アップストリーム メッセージをアプリサーバーに転送するために FCM サービスを使用できない場合、Android クライアント アプリのインスタンスは、最大 20 件まで保留メッセージを蓄積します。
蓄積したメッセージを FCM が受け取って送信する前にそれらの有効期限が切れた場合、onSendError
は SendException#ERROR_TTL_EXCEEDED
を返します。
ネットワークの使用率を最適化するために、FCM は onMessageSent
と onSendError
へのレスポンスを一括処理します。これにより、各メッセージの確認応答が即時に行われないことがあります。
アプリサーバーで 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 接続サーバー リファレンスをご覧ください。