iOS에서 업스트림 메시지 전송

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

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

데이터가 수신되면 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: 문자열인 키와 값으로 구성된 사전입니다. 문자열이 아닌 키-값 쌍은 모두 무시됩니다.

  • 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 메시지를 보내야 합니다. FCM이 ACK를 수신하지 않으면 앱 서버에 메시지를 보내려고 다시 시도할 수 있습니다.

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

업스트림 메시지 구문의 자세한 내용은 XMPP 연결 서버 참조를 확인하세요.

다음에 대한 의견 보내기...

도움이 필요하시나요? 지원 페이지를 방문하세요.