アプリサーバーが XMPP 接続サーバー プロトコルを実装している場合、ユーザー端末からクラウドへのアップストリーム メッセージを受信できます。アップストリーム メッセージを開始するには、クライアント アプリから次の要素を含むリクエストを送信します。
SENDER_ID@gcm.googleapis.com
の形式で指定した受信側アプリサーバーのアドレス。- 送信者 ID ごとに一意なメッセージ ID。
- メッセージのペイロードの Key-Value ペアを構成するメッセージ データ。
このデータを受信すると、FCM は、送信側の端末とアプリに関するその他の情報を追加して、アプリサーバーに送信する XMPP スタンザを生成します。
iOS クライアント アプリからアップストリーム メッセージを送信する
iOS クライアント アプリからサーバーにアップストリーム メッセージを送信するには、まずメッセージを作成したうえで FCM に接続し、sendMessage
を呼び出します。
接続するには、AppDelegate
で shouldEstablishDirectChannel
フラグを YES
に設定します。接続は FCM によって管理されます。アプリがバックグラウンドになると接続が閉じ、アプリがフォアグラウンドになると再び開きます。
sendMessage
の呼び出しを次のように構成します。
Objective-C
[[FIRMessaging messaging] sendMessage:message to:receiver withMessageID:messageID timeToLive:ttl];
Swift
Messaging.messaging().sendMessage(message, to: to, withMessageID: messageId, timeToLive: ttl)
各要素の説明は次のとおりです。
to
は、SENDER_ID@gcm.googleapis.com
の形式で指定した受信側アプリサーバーのアドレスです。withMessageID
は一意のメッセージ識別子です。すべてのメッセージ レシーバー コールバックは、このメッセージ ID に基づいて識別されます。message
は文字列によるキーと値の辞書です。文字列でない Key-Value ペアはすべて無視されます。timeToLive
は有効期間です。FCM は、この有効期限に達する前にメッセージを配信できなくなると、クライアントに通知を送信します。
FCM クライアント ライブラリは、メッセージをクライアント アプリにキャッシュし、クライアントがアクティブなサーバー接続を確立したときにこのメッセージを送信します。FCM 接続サーバーは、メッセージを受信すると、これをアプリサーバーに送信します。
アップストリーム メッセージ コールバックを処理する
sendDataMessageFailure
と sendDataMessageSuccess
をリッスンするオブザーバーを追加してアップストリーム コールバックを処理してから、セレクタからエラー情報を取得します。この例では、FIRMessagingSendErrorNotification
がコールバックの処理に使用されるセレクタです。
- (void)sendDataMessageFailure:(NSNotification *)notification { NSString *messageID = (NSString *)message.object; } - (void)sendDataMessageSuccess:(NSNotification *)notification { NSString *messageID = (NSString *)message.object; NSDictionary *userInfo = message.userInfo; // contains error info etc }
ネットワークの使用率を最適化するために、FCM は sendDataMessageFailure
と sendDataMessageSuccess
への応答を一括処理するため、各メッセージの受信確認が即時に行われないことがあります。
アプリサーバーで 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 接続サーバー リファレンスをご覧ください。