리오집사의 기억저장소

1. 메시지 유형 (알림 메시지 vs 데이터 메시지)

알림메시지

  • FCM이 클라이언트 앱을 대신해 최종 사용자 기기에 자동으로 메시지 표시.
  • 사용자에게 표시되는 키 모음이 사전 정의되어 있음.
  • 전송 방법
    • 앱 서버 및 FCM 서버 API 사용 : notification 키를 설정. 선택사항으로 데이터 페이로드 추가 가능. 항상 축소형임
    • 알림 콘솔 사용 : 메시지 본문, 제목 등을 입력하고 전송. 알림 콘솔에서 맞춤 데이터를 제공하여 선택사항인 데이터 페이로드를 추가. 항상 축소형임

 

데이터 메시지

  • 클라이언트 앱이 데이터 메시지 처리를 담당.
  • 데이터 메시지에는 맞춤 키-값 쌍만 있음 (사전 정의 된 키 모음 없음)
  • 전송 방법
    • 앱 서버 및 FCM 서버 API 사용 : data 키만 설정. 축소형, 비축소형 모두 가능
    • iOS에서 사용하기 위해서는 data 키에 맞춤 키-값 쌍을 설정하고 content_availavle을 true로 설정해야 한다.

 

2. 알림 메시지

notification키를 알림 메시지에서 사전 정의된 키 옵션 모음으로 설정

  • 앱이 백그라운드 상태일 경우
    • 메시지가 알림 목록으로 전송
  • 앱이 포그라운드 상태일 경우
    • 다음 콜백이 메시지 처리
      • iOS : didReceiveRemoteNotification 이 처리.
      • Android : onMessageReceived() 가 처리. 데이터 번들의 notification 키에 알림이 포함됨.

 

example

{
  "to": "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
  "notification": {
    "body": "great match!",
    "title": "Portugal vs. Denmark",
    "icon": "myicon"
  }
}

 

 

3. 데이터 메시지

  • 맞춤 키-값 쌍으로 data 키를 설정하여 클라이언트 앱으로 데이터 페이로드를 보낸다.
  • 데이터 메시지에 최대 4KB의 페이로드 포함 가능

기기별 처리

iOS

FCM이 메시지를 저장한 다음, 앱이 포그라운드 상태 AND FCM 연결이 설정된 경우 에만 FCM이 메시지를 전송한다.

  • didReceiveRemoteNotification: 에서 데이터 페이로드를 확인할 수 있음

 

Android

클라이언트 앱이 onMessageReceived() 로 데이터 메시지를 수신하며, 수신한 메시지에 맞게 키-값 쌍을 처리

 

example

(정보는 data 캡슐화 되어 있고, 클라이언트 앱이 콘텐츠를 해석한다.)

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

 

 

4. 알림 메시지 && 데이터 메시지(알림 및 데이터 페이로드가 모두 포함된 메시지)

  • 둘 다 포함된 메시지를 수신한 경우의 앱 동작
    • 앱이 백그라운드 상태인지, 포그라운드 상태인지에 따라 다르게 동작.
    • 특히, 수신 당시에 앱이 활성 상태였는지 여부가 영향을 미친다.
      • 백그라운드 상태인 경우 :
        • (Notification) 알림 페이로드가 앱의 알림 목록에 수신됨
        • (Data) 사용자가 알림을 탭(오픈)한 경우에만, 앱이 데이터 페이로드를 처리
      • 포그라운드 상태인 경우 :
        • 앱에서 페이로드가 둘 다 제공되는 메시지 개체를 수신

example

{
  "to": "APA91bHun4MxP5egoKMwt2KZFBaFUH-1RYqx...",
  "notification": {
    "body": "great match!",
    "title": "Portugal vs. Denmark",
    "icon": "myicon"
  },
  "data": {
    "Nick": "Mario",
    "Room": "PortugalVSDenmark"
  }
}

 

참조(Google Firebase FCM 문서)

반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band