비축소형 메시지 (데이터 메시지, 알림 && 데이터 메시지)
- 각각의 개별 메시지가 기기로 전송됨을 의미
- 서버에 접속하여 데이터를 가져오기 위해 모바일 앱으로 'ping'을 보내는 것이 아닌, 유용한 콘텐츠를 전송
- 항상 축소형인 알림 메시지를 제외하고는 모두 비축소형
- FCM은 전송 순서를 보장하지 않음
사용 사례 : 채팅 메시지(메시지마다 콘텐츠가 달라,모든 메시지를 전송), 중요한 메시지
- 축소 없이 저장할 수 있는 메시지는 최대 100개.
- 이 한도에 도달하면 저장된 메시지가 모두 삭제됨
- 기기가 다시 온라인 상태가 되면, 한도에 도달했음을 나타내는 특수 메시지 수신
- 이를 활용해 보통 앱에서 앱 서버에 전체 동기화를 요청하는 방식으로 이 문제를 해결할 수 있음.
축소형 메시지 (알림 메시지)
- 메시지가 아직 기기로 전송되지 않은 경우, 동일한 축소 키가 포함된 새 메시지로 대체할 수 있는 메시지.
- 즉, 최근 메시지만 의미가 있는 경우 사용
- 지정한 기간에 대해 앱 서버에서 사용할 수 있는 다른 축소 키를 기기당 최대 4개씩 허용.
- 즉, FCM 연결 서버에는 모바일 기기 1대마다 4개의 다른 동기화 전송 메시지를 동시에 저장할 수 있으며, 메시지는 각각 다른 축소 키를 사용한다.
- 이를 초과하면, FCM이 축소 키를 4개만 유지하며, 어떤 키를 유지할지는 보장되지 않는다.
- iOS에서 앱 서버가 동기화 전송 메시지를 보내야 하는 경우
- content_available 을 설정해야 한다.
- 비활성 클라이언트 앱은 백그라운드에서 로직을 실행
- 반면, 포그라운드 앱은 메시지를 didReceiveRemoteNotification: 으로 전달한다.
사용 사례 : 동기화 전송 메시지
- 동기화 전송 메시지란, 모바일 앱에 서버의 데이터와 동기화 할 것을 알리는 '핑'
- ex) 최신 득점에 대해 업데이트하는 스포츠 앱
비축소형, 축소형 결정 방법
- 성능 면에 있어서는 축소형 메시지를 선택하는 것이 좋다.
- 단, 축소형은 FCM 연결 서버에 사용할 수 있는 축소 키를 토큰당(모바일 기기 1대당) 최대 4개만 허용한다는 걸 고려.
- 모든 메시지가 클라이언트 앱에서 중요하므로 모두 전송되어야 한다? -> 비축소형
- 메시지에 담아야 할 내용들이 많다? -> 비축소형
- 메시지에 다양한 걸 담아서, 앱의 동작을 다르게 해야 할 것들이 많다? -> 비축소형
- 이전 메시지를 대체하는 실시간 최신 메시지의 내용이 중요하다? -> 축소형(collapse_key 매개변수를 설정해라.. 붕괴키?기존 메시지를 붕괴시키는? 뭔지 모르겠지만 true, false 같은 형태의 값을 가지겠구먼)
참조(Google Firebase FCM 문서)