iOS でのアップストリーム メッセージの送信

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

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

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

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

iOS クライアント アプリからサーバーにアップストリーム メッセージを送信するには、まずメッセージを作成したうえで FCM に接続し、sendMessage を呼び出します。

接続するには、AppDelegateshouldEstablishDirectChannel フラグを 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 接続サーバーは、メッセージを受信すると、これをアプリサーバーに送信します。

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

sendDataMessageFailuresendDataMessageSuccess をリッスンするオブザーバーを追加してアップストリーム コールバックを処理してから、セレクタからエラー情報を取得します。この例では、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 は sendDataMessageFailuresendDataMessageSuccess への応答を一括処理するため、各メッセージの受信確認が即時に行われないことがあります。

アプリサーバーで 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 メッセージを送信する必要があります。ACK を受信しないと、FCM はアプリサーバーへのメッセージの送信を再試行することがあります。

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

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

フィードバックを送信...

ご不明な点がありましたら、Google のサポートページをご覧ください。