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

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

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

데이터가 수신되면 FCM이 전송 기기와 앱에 대한 추가 정보를 포함하여 XMPP 스탠자를 작성해 앱 서버로 보냅니다.

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

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

자바
Android

FirebaseMessaging fm = FirebaseMessaging.getInstance();
fm.send(new RemoteMessage.Builder(SENDER_ID + "@gcm.googleapis.com")
        .setMessageId(Integer.toString(messageId))
        .addData("my_message", "Hello World")
        .addData("my_action","SAY_HELLO")
        .build());

Kotlin
Android

val fm = FirebaseMessaging.getInstance()
fm.send(RemoteMessage.Builder("$SENDER_ID@gcm.googleapis.com")
        .setMessageId(Integer.toString(messageId))
        .addData("my_message", "Hello World")
        .addData("my_action", "SAY_HELLO")
        .build())

업스트림 메시지 콜백 처리

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

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

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