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 문서)