FCM(firebase cloud messaging)
- 애플리케이션의 서버와 클라이언트 사이에 메시지를 전송할 수 있게 해주는 무료의 크로스 플랫폼 메시징 솔루션
- 현재 구현 목표는 프론트에서 알람 정보를 받아 서버에서 알람을 보낼 시 사용자의 컴퓨터, 모바일 기기에 실시간으로 알람(푸쉬 메시지)이 뜨게 만들기 위함.
아키텍쳐 구성도
(출처 : 공식 사이트)
1. Message buliding and targeting
- FCM 서버 프로토콜을 지원하는 신뢰할 수 있는 서버 환경에서 메시지 요청을 구현 (공식 문서)
- 즉 우리가 만들고 있는 서버가 신뢰할 수 있는 서버인지 firebaseConfig (후에 다룸)에 apikey나 여러가지 정보를 서버로 보내 firebase에서 '신뢰할 수 있는 서버'임을 증명하고, 해당 기기들의 토큰 (메시지를 받을 사용자의 컴퓨터, 모바일 디바이스 토큰)을 발급한다.
2. FCM backend
- 메시지 요청을 수락하는 등 여러 기능을 수행하는 FCM 백엔드는 주제를 통해 메시지 팬아웃을 수행하고 메시지 ID와 같은 메시지 메타데이터를 생성 (공식 문서)
- 토큰과 함께 메시지를 전송하면 FCM backend로 가서 메시지 요청을 수락하거나 메타데이터를 생성한다고 한다. firebase 서버에서 다 해주니 정확히는 모르겠다.
- 기기로 타겟팅된 메시지를 라우팅하고, 메시지 전송을 처리하고, 필요한 경우 플랫폼별 구성을 적용합니다. ex) Android 전송 레이어(ATL), Apple 푸시 알림 서비스(APN), 웹 앱용 웹 푸시 프로토콜 (공식 문서)
- 토큰을 토대로 각각의 디바이스로 푸시 알람을 전송한다는 듯 하다. firebase 서버에서 다 해주니 정확히는 모르겠다. 현재 웹으로만 해서 그런 지 모르겠으나, 위와 마찬가지로 따로 설정할 건 없었다.
4. SDK on service
- 알림이 표시되거나 앱의 포그라운드/백그라운드 상태 및 관련 애플리케이션 로직에 따라 메시지가 처리됩니다. (공식 문서)
- 위의 단계들로 각각의 디바이스 토큰(즉, 사용자의 디바이스)로 알람이 전송되고, 알람이 수신되었을 시 'push'등의 이벤트가 발생하며 데이터가 들어와 해당 알람 데이터를 처리해 줄 수 있다.
(화면에 띄우기 등)
정리
나름대로 정리를 하자면,
-
- 먼저 firebase 콘솔에서 apikey 등을 발급받는다. (api 사용이니 당연히 해야지)
-
- 위에서 발급받은 설정 정보 (특정 config 코드를 발급해준다)를 firebase로 보내 초기화하여 인증한다.
-
- 사용자가 접속한 디바이스에서 토큰을 발급받는다.
-
- 해당 토큰들을 DB 저장 등을 통해 유지하고, 우리가 알람을 보낼 시 해당 토큰들을 fcm 백엔드로 같이 보내 경로를 설정할 수 있게 해준다. (토큰 보내면 알아서 해줌)
-
- fcm 백엔드와 Platform-level message transport (위의 2, 3단계)가 알아서 사용자의 디바이스로 알람을 보낸다.
-
- 사용자 측에서 알람을 받을 시 발생하는 이벤트로 데이터를 처리하여 알람을 띄우던가 한다.
일단 내 머리 속에선 이 정도로 갈피가 잡혀있다.
나도 처음 사용한 것이었고, 작동이 가능한 정도로만 구현했기 때문에 코드가 복잡하거나 비효율적일 수 있다.