앱 삭제 후 알림이 안와요
FCM??
먼저 푸시 알림을 보내기 위해서는 파이어베이스에 대한 이해가 필요하므로, 파이어베이스의 공식문서를 차근차근 정리해 보았다.
FCM 아키텍처?
Firebase 클라우스 메시징(FCM)은 무료로 메시지를 안정적으로 전송할 수 있는 교차 플랫폼 메시징 솔루션이다. FCM은 아래처럼 활용한다면, 메시지를 보낼 수 있다. 자체 앱 서버를 구현하거나, 또는 Firebase용 Cloud Functions을 활용해서 FCM 백엔드로 메시지를 보낸다는 요청을 보낸다. -> FCM 백엔드는 메시지 요청을 받아서 topic을 통해 메시지를 확장하고, 메시지 ID와 같은 메시지 메타데이터를 생성한다. -> 기기로 타겟팅된 메시지를 라우팅 하고, 메시지 전송을 처리하고, 필요한 경우 플랫폼별 구성을 적용하는 플랫폼 수준의 전송 레이어이다.
- 알림이 표시되거나 앱의 포그라운드/백그라운드 상태 및 관련 애플리케이션 로직에 따라 메시지가 처리되는 사용자 기기의 FCM SDK이다.
FCM에서 메시지를 수신하도록 기기를 등록해야 하며, 클라이언트 앱의 인스턴스가 메시지를 수신하도록 등록하여 앱 인스턴스를 고유하게 식별하는 등록 토큰을 받는다.
Problem
Zippu 프로젝트에서 푸시 알림을 활용한 서비스를 개발하던 도중 테스트 앱을 삭제 한 뒤, 기존에 잘 오던 알림이 오지 않는 문제가 발생하였다.
FCM 등록 토큰 관리
푸시 알림을 보내기 위해서는 사용자의 FCM 토큰을 서버에서 잘 관리해야 한다. 만약 오래된 등록 토큰이 있는 비활성 장치에 메시지를 전송한다면, 제대로 푸시가 전달되지 않을 수 있다. FCM API를 사용하는 모든 앱에서 따라야 하는 몇 가지 기본 규칙이 있다.
- 서버에 등록 토큰을 저장한다. 서버의 중요한 역할은 각 클라이언트의 토큰을 추적하고 활성 토큰의 업데이트된 목록을 유지하는 것이다. 코드와 서버에 토큰 타임스탬프를 구현하고 이 타임스탬프를 정기적으로 업데이트하는 것이 좋다.
- 오래된 토큰을 제거한다. 잘못된 토큰 응답의 명백한 경우에 토큰을 제거하는 것 외에도 토큰이 오래되었다는 다른 징후를 모니터링해야 할 수도 있다.
👉 내가 놓친 부분: 등록 토큰 검색 및 저장
앱을 처음 시작할 때 FCM SDK는 클라이언트 앱 인스턴스에 대한 등록 토큰을 생성한다. 이는 API의 대상 지정 전송 요청에 포함하거나 대상 지정 Topic에 대한 Topic 구독에 추가해야 하는 토큰이다. 앱은 초기 시작 시 이 토큰을 검색하고 타임스탬프와 함께 앱 서버에 저장해야 한다. 이 타임스탬프는 FCM SDK에서 제공하지 않으므로 코드와 서버에서 구현해야 한다.
또한 다음과 같이 토큰이 변경될 때마다 토큰을 서버에 저장하고 타임스탬프를 업데이트하는 것이 중요하다.
- 앱이 새 기기에서 복원.
- 사용자가 앱을 제거/재설치.
- 사용자가 앱 데이터를 지움.
위의 경우처럼 토큰이 변경됐다면, 기존 토큰은 만료되어 버린다. 만료된 토큰으로 푸시 알림을 보내려 한다면, FCM 백엔드에서는 잘못된 토큰에 대한 응답을 감지하고 토큰이 잘못되었다는 것을 응답으로 전달한다.
Improvement
정기적으로 토큰 업데이트
- 앱 진입시 Apple 플랫폼의 경우 token(completion): Android의 경우 getToken()을 사용하여 현재 토큰을 검색한 다음 저장을 위해 현재 토큰을 앱 서버에 보내고 로컬에도 저장한다. => 타임스탬프 미포함
이부분을 수정하여 서버에 보낼 때 타임스탬프 포함시켰다. ( 서버측에서 토큰 변경 여부에 관계없이 정기적으로 토큰의 타임스탬프를 업데이트하여, 토큰을 주기적으로 업데이트하면 효율적인 토큰 관리하기 위함)
- 앱에 진입시 로컬에 저장된 토큰이 있다면 해당 토큰을 사용하고 아니라면 현재 토큰을 검색한 다음 서버에 보내 저장한다.
- 하.. 로컬에 저장해서 재사용한 이부분이 아주 단단히 착각한 부분이었다. 따라서 해당 부분을 제거하고 앱 진입시마다 현재 토큰(이는 앞서 설명한것 처럼 특정 상황에서 변한다)을 검색하여 업데이트 해주었다.
> 참고 자료
- https://firebase.google.com/docs/cloud-messaging/fcm-architecture?hl=ko