Android/platform

[Android] FCM 메시지 동작의 이해 : Notification과 Data 차이점 정리

mins9273 2024. 11. 25. 11:10
반응형

Firebase Cloud Messaging(FCM) 은 모바일 앱과 서버 간에 메시지를 전송하는 강력한 도구입니다.

 

FCM에서 메시지는 크게 Notification 와 Data Payload 로 나뉩니다.

이 두 가지는 각각 다른 방식으로 동작하고, 앱에서 호출되는 메소드도 다릅니다.

 

이를 이해하려면 먼저 각 메시지의 특성과 동작 방식을 파악해야 합니다.

 

 

Notification

Notification 은 주로 사용자에게 표시되는 푸시 알림을 위해 설계되었습니다.

 

메시지가 FCM 서버에서 클라이언트 앱으로 전송될 때 FCM이 자동으로 메시지를 처리하여 알림을 표시합니다.

이 메시지는 백그라운드 상태 또는 포그라운드 상태에서 다르게 동작합니다.

 

  • 백그라운드 상태
    • 앱이 백그라운드에 있거나 종료된 경우, 메시지는 FCM SDK에 의해 자동으로 처리됩니다.
    • 알림이 기기의 작업 표시줄로 전송되며, 사용자가 알림을 탭하면 기본적으로 앱 런처가 실행됩니다.
      (별도의 코드를 작성할 필요가 없습니다.)
  • 포그라운드 상태
    • 앱이 실행 중인 경우, 알림은 자동으로 표시되지 않습니다.
    • 메시지가 onMessageReceived 메서드로 전달되며, 개발자는 원하는 방식으로 사용자에게 알림을 표시해야 합니다.

 

 

Data

Data 는 앱에서 더 복잡한 작업을 수행할 때 사용됩니다.

 

클라이언트로 전달되는 데이터는 개발자가 직접 처리하며, 메시지 페이로드의 모든 내용이 앱에서 접근 가능합니다.

Data 는 앱의 백그라운드 상태와 포그라운드 상태에서 동일하게 동작합니다.

 

  • onMessageReceived 호출
    • Data Payload 는 항상 onMessageReceived 메서드를 호출합니다. 
    • 앱이 백그라운드에 있거나 포그라운드에 있어도 FCM이 직접 메시지를 처리하지 않고 앱으로 전달합니다.

 

 

또한 FCM 는 Notification Data Payload 를 함께 포함한 메시지를 보낼 수도 있습니다.

만일 Notification 와 Data Payload 를 동시에 사용하는 경우에는 앱이 백그라운드에 있을때 

Notification 는 기기의 작업 표시줄로 전송되고 Data Payload 는 런처 활동의 인텐트 부가 정보로 전송됩니다.

출처 : Firebase

 

 

onMessageReceived 수신

FirebaseMessagingService.onMessageReceived 메서드를 재정의하면 수신된 RemoteMessage 객체를 기준으로 작업을 수행하고 메시지 데이터를 가져올 수 있습니다.

override fun onMessageReceived(remoteMessage: RemoteMessage) {
// Check if message contains a data payload.   
if (remoteMessage.data.isNotEmpty()) {
}

// Check if message contains a notification payload.   
remoteMessage.notification?.let {
}
}

 

 

onMessageReceived 가 제공된 모든 메시지는 수신된 지 20초(Android Marshmallow의 경우 10초) 이내에 처리되어야 합니다. 

onMessageReceived 호출 전에 발생하는 OS 지연에 따라 이 시간이 더 짧아질 수도 있습니다.

 

반응형