문제
서버는 FCM에 넘긴 메시지를 회수할 수 없다. 소유권 검증 직후 계정이 바뀌거나 외부 전송이 이미 진행 중이면
이전 계정의 메시지가 도착할 수 있다.
현재 Notification의 title·body는 백그라운드에서 앱의 계정 검사보다 먼저 표시될 수 있다.
수신 측 검증으로 이를 막으려면 data-only 메시지를 사용하고, 클라이언트가 accountId를 확인한 뒤 로컬 알림을 만든다.
서버만 먼저 바꾸면 이전 클라이언트의 백그라운드 알림이 사라지며 iOS의 data-only 백그라운드 전달에도 제약이 있다.
전환 정책
accountId는 대상 설치 세대 소유 계정의 10진 문자열로 전달한다.
- 로그아웃 상태이거나 현재 계정과
accountId가 다르면 표시하지 않는다.
- 서버와 클라이언트를 함께 전환한다. 전환 전에는 검증 직후 이전된 설치에서 이전 계정의 title·body가 표시될 수 있다.
할 일
- title·body를 data로 옮기고 계정 검증 뒤 로컬 알림을 생성하도록 클라이언트와 함께 배포한다.
- 계정 전환·로그아웃 때 등록 해제와 불일치 메시지 무시를 적용한다.
- 플랫폼별 백그라운드 전달 제약을 반영한 사용자 동작을 확정한다.
검증
- 소유권·전송 후보 선택·
accountId 결정의 변경은 서비스 단위 테스트로 확인한다.
- 설치 이전·해제와 최초 전송·재시도가 겹치는 경우 및 플랫폼별 백그라운드 표시를 수동 확인한다.
완료 조건
- 기존 단일 소유권과 최초 전송·재시도의 세대 검증이 유지되어 있다.
- 백그라운드에서도 현재 계정과 다른 메시지는 표시되지 않는다.
- 서버·클라이언트 전환이 완료되어 있고 외부 전송의 회수 한계가 명시되어 있다.