Firebase Summit에서 발표된 모든 내용을 살펴보고 Firebase로 앱을 빠르게 개발하고 안심하고 앱을 실행하는 방법을 알아보세요. 자세히 알아보기

Android에서 업스트림 메시지 보내기

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

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

이 데이터를 수신하면 FCM은 앱 서버에 보낼 XMPP 스탠자를 작성하여 보내는 장치 및 앱에 대한 몇 가지 추가 정보를 추가합니다.

Android 클라이언트 앱에서 업스트림 메시지 보내기

Android 앱은 FirebaseMessaging.send 를 사용하여 업스트림 메시지를 보낼 수 있습니다.

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());

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")
})

업스트림 메시지 콜백 처리

FirebaseMessaging 을 사용하면 onMessageSentonSendError 콜백을 구현하여 업스트림 메시지의 상태를 확인할 수 있습니다. 오류의 경우 onSendError 는 오류 코드와 함께 SendException 을 반환합니다. 예를 들어 클라이언트가 20개 메시지 제한에 도달한 후 더 많은 메시지를 보내려고 하면 SendException#ERROR_TOO_MANY_MESSAGES 를 반환합니다.

기기가 오프라인 상태이거나 FCM 서비스에서 업스트림 메시지를 서버로 전달할 수 없는 경우 Android 클라이언트 앱 인스턴스는 최대 20개의 보류 메시지를 누적할 수 있습니다. FCM이 메시지를 성공적으로 보내기 전에 이러한 메시지가 만료되면 onSendErrorSendException#ERROR_TTL_EXCEEDED 를 반환합니다.

네트워크 사용을 최적화하기 위해 FCM은 onMessageSentonSendError 에 대한 응답을 일괄 처리하므로 각 메시지에 대한 승인이 즉각적이지 않을 수 있습니다.

앱 서버에서 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 연결 서버 참조 를 참조하십시오.