내가 구현해야할 알림 설정 이론 공부. 이론만 빠삭할듯
1. 클라이언트에서 fcm 에 등록을 요청한다.
2. fcm 은 token 을 클라이언트에게 발급한다.
3. 클라이언트는 앱 서버에 자신의 정보와 해당 토큰을 전달하고 서버는 이를 맵핑하여 저장한다.
4. 맵핑된 정보를 토대로 앱 서버는 푸시알림을 보내고 싶을 때 클라이언트의 요청 없이 fcm에 요청을 보낸다.
5. fcm은 앱 서버에서 받은 토큰으로 해당 클라이언트를 찾아 푸시알림을 보낸다.
클라이언트가 가진 앱마다 fcm에서 받은 토큰은 모두 다르다! 토큰은 스마트폰자체에서 fcm으로 요청하는 것이 아닌 설치된 앱에서 요청을 하니까요..
그래서 앱 서버가 토큰을 알게 되면 클라이언트의 요청을 받을 필요가 없어짐 ..
프론트에서 해야할 일
fcm 에 앱 등록,
앱 fcm 연동,
서버에 로그인 요청할 때 fcm 토큰 전송(등록)
서버에 로그아웃 요청할 때 fcm 토큰 전송(삭제)
앱 실행할 때 로드인되어 있으면 fcm토큰을 서버에 전송 ( 타임스탬프 갱신 )
fcm토큰이 갱신될 때 로그인되어있으면 fcm토큰을 서버에 전송
백엔드에서는
로그인 시 유저fcm 토큰 저장,
로그아웃 시 유저 fcm토큰 삭제,
앱 실행 시 유저 fcm 토큰 타임스탬프 갱신
토큰의 신선도 관리
fcm 토큰이란
앱이 FCM 서버와 통신하기 위해 사용되는 고유한 식별자
앱은 서버와 통신할 때 토큰을 사용하여 FCM 서버에서 앱을 식별하고, 이를 통해 메시지 전송을 할 수 있다
FCM의 토큰은 앱이 설치된 디바이스마다 고유하다. 앱이 설치된 디바이스를 추가하거나 삭제할 때 토큰이 변경될 수 있다.
서버는 이러한 FCM 토큰을 사용하여 특정 디바이스에 메시지를 전송할 수 있다.
FCM에 앱을 등록하고, 앱도 FCM과 연동한다.
앱 프론트는 필요할 때 FCM 토큰을 발급받고 백엔드로 보낸다.
백엔드는 토큰을 유저 정보와 연동하여 DB에 보관하다가, 필요할 때 조회해서 Notification Provider에 푸시 알림을 요청한다.
FCM 토큰에 관해
토큰의 만료 :
FCM 토큰은 정해진 수명이나 갱신 주기가 없다.
따라서, 시간과 관계없이 아래 이벤트가 발생하지 않는다면 만료되지 않는다.
- 앱이 인스턴스 ID를 삭제한 경우
- 앱이 새 기기에서 복원되었을 경우
- 사용자가 앱을 제거 / 재설치한 경우
- 사용자가 앱 데이터를 지운 경우
토큰 관리 :
- 서버에 등록 토큰을 저장한다.
- 토큰의 신선도 보장을 위해 오래된 등록 토큰을 제거한다.
- 토큰을 언제 서버에 보낼까?
- 로그인 시점에 보낸다 or 앱을 실행할 때마다 보낸다.
- 토큰은 언제 삭제할까?
- Provider가 Notfication Server로 푸시 요청을 했을 때, 토큰이 만료되어 에러 메시지가 오는경우, 핸들링하여 그 토큰을 삭제한다.
고려해야 할 부분 :
- 같은 기기에서 다른 아이디를 쓰는 경우
- 로그아웃 시점에 서버에서 유저 토큰을 삭제한다.
- 같은 아이디로 여러 기기를 쓰는 경우
- 하나의 유저가 여러 토큰을 보유할 수 있게 스키마를 구성한다
'플러터' 카테고리의 다른 글
flutter : DioInterceptor (0) | 2024.06.15 |
---|---|
flutter : context 가져오기 (0) | 2024.06.15 |
Riverpod 프로바이더 종류 (0) | 2024.04.09 |
bloc (2) | 2024.03.29 |
플러터 Dart (0) | 2023.10.29 |