Group Study (2021-2022)/Android

[Android] 6주차 스터디 - FCM (Firebase Cloud Messaging)

알 수 없는 사용자 2021. 11. 14. 00:44

1.  FCM 이란 ?

FCM은 Firebase Cloud Messaging의 약자로, 무료로 메시지를 안정적으로 전송할 수 있는 교차 플랫폼 메시징 솔루션이다. 교차 플랫폼 메시징 솔루션이기 때문에 FCM을 이용하여 개발을 진행하면, 플랫폼에 종속되지 않고 push 메시지를 보낼 수 있다는 점에서, push 메시지를 보내기 위해 기존에 각 플랫폼 환경별로 개발해야 하는 불편함을 해결하는 대안이 된다고 볼 수 있다.


 

2.  FCM의 주요 기능

  1. 알림 메시지 / 데이터 메시지 전송
    사용자에게 표시되는 알림 메시지 또는 데이터 메시지를 전송하고 어플리케이션 코드에서 임의로 처리한다.

    메시지 종류 알림 가능 여부 알림 저장 개수 알림 처리 방법
    알림 메시지 가능 여러 알림 저장하지만, OS 환경마다 다르다 앱이 백그라운드 일 때
    데이터 메시지 가능 1개의 알림만 저장 앱이 포그라운드 일 때
  2. 다양한 메시지 타겟팅
    단일 기기, 기기 그룹, 주제를 구독한 기기 등 3가지 방식으로 클라이언트 앱에 메시지를 배포할 수 있다.

  3. 클라이언트 앱에서 메시지 전송
    FCM의 신뢰성 높고 배터리 효율적인 연결 채널을 통해 기기에서 다시 서버로 확인, 채팅, 기타 메시지를 보낼 수 있다.

 

3.  FCM의 동작 원리 및 FCM 클라우드 메시지의 흐름

FCM 공식 문서 사진 참조

FCM 클라우드 메시지는 크게 송신자 ( 앱 서버, HTTP 프로토콜 사용하는 서버, Firebase Console GUI ) ,  FCM Backend Server, 수신자 ( Android 및 모바일 기기 ) 로 구성되어 있다. 구체적으로, HTTP를 통해 FCM 클라우드 메시지가 처리되는 과정을 요약해보면 총 4개의 단계로 정리할 수 있다.

 

  1. 송신자(ex. FCM의 앱 서버)가 HTTP Post Request 메시지를 요청한다.
  2. FCM Backend Server에서, 1에서의 메시지의 이상 유무에 따라 적절한 응답을 한다. (비동기 통신)
  3. FCM Backend Server에서 여러 가지(우선순위, 앱과의 통신 가능 여부)를 고려하여 실제 클라우드 메시지를 수신자(ex. 기기)에 보낸다.
  4. 수신자(ex. 기기)는 받은 메시지를 적당히 처리하고 응답 메시지를 보낸다.

 

4.  안드로이드 앱에서의 FCM 메시지 수신

Firebase 알림은 수신하는 앱의 포그라운드/백그라운드 상태에 따라 달라진다. 포그라운드 상태인 앱에서 알림/데이터 메시지를 수신하려면 onMessageReceived 콜백을 처리하는 코드를 추가로 작성해주어야 한다.

 

앱 상태 알림 데이터 모두
포그라운드 onMessageReceived onMessageReceived onMessageReceived
백그라운드 작업 표시줄 onMessageReceived 알림: 작업 표시줄
데이터: 인텐트 부가 정보

 

  1. 알림(Notification): 일반 객체만 오는 경우

    {
      "message":{
        "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
        "notification":{
          "title":"Portugal vs. Denmark",
          "body":"great match!"
        }
      }
    }​
     
  2. * 포그라운드: onMessageReceived를 통해 메시지가 전달된다.
    * 백그라운드: 작업 표시줄을 통해 메시지가 전달된다.

  3. 데이터 (최대 4kb) 로 오는 경우

    {
      "message":{
        "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
        "data":{
          "Nick" : "Mario",
          "body" : "great match!",
          "Room" : "PortugalVSDenmark"
        }
      }
    }​

    * 포그라운드 : onMessageReceived를 통해 메시지가 전달된다.
    * 백그라운드 : onMessageReceived를 통해 메시지가 전달된다.

  4. 알림과 데이터 모두 오는 경우

    {
      "message":{
        "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
        "notification":{
          "title":"Portugal vs. Denmark",
          "body":"great match!"
        },
        "data" : {
          "Nick" : "Mario",
          "Room" : "PortugalVSDenmark"
        }
      }
    }​

    * 포그라운드 : onMessageReceived에서 알림, 데이터 두 객체 모두를 받아 처리한다.
    * 백그라운드 : 알림은 system tray로 받아지고, 데이터는 앱을 클릭했을 때 intent로 받을 수 있다.

 


fcm push에 대한 추가적인 자세한 내용은 다음의 링크에서 확인할 수 있습니다.

 

https://firebase.google.com/docs/cloud-messaging