C++ 클라이언트 앱에서 업스트림 메시지 전송

XMPP 연결 서버 프로토콜을 앱 서버에 구현하면 사용자의 기기에서 클라우드로 보낸 업스트림 메시지를 수신할 수 있습니다. 업스트림 메시지를 시작하기 위해 클라이언트 앱에서 다음을 포함한 요청을 보냅니다.

  • SENDER_ID@fcm.googleapis.com 형식의 수신 앱 서버 주소
  • 발신자 ID마다 고유한 메시지 ID
  • 메시지 페이로드의 키-값 쌍을 구성하는 메시지 데이터

데이터가 수신되면 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.toSENDER_ID@fcm.googleapis.com 형식의 수신 앱 서버 주소입니다.

  • message.message_id는 고유한 메시지 식별자입니다. 모든 메시지 수신자 콜백은 이 메시지 ID를 기준으로 식별됩니다.

  • message.data는 문자열인 키와 값의 매핑입니다.

  • message.time_to_live는 기기가 오프라인 상태인 경우 FCM 스토리지에 메시지를 보관해야 하는 시간(초)을 지정합니다. 만료되기 전에 FCM이 메시지를 전송하지 못하면 클라이언트로 알림을 돌려보냅니다.

FCM 클라이언트 라이브러리는 클라이언트 앱에 메시지를 캐시 처리하여 클라이언트의 서버 연결이 활성 상태가 되면 메시지를 보냅니다. 메시지가 수신되면 FCM에서 앱 서버로 메시지를 보냅니다.

앱 서버에서 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 연결 서버 참조를 확인하세요.