반응형
FCM 토큰은 일정 조건에서 변경되며, 변경 시 적절한 대응을 하지 않으면 푸시가 유실되거나, 서버와의 싱크가 깨질 수 있다. FCM 토큰은 언제 바뀌고, 어떻게 대응하면 되는지 실무 기준으로 정리해본다.
1. FCM 토큰이 변경되는 주요 케이스
상황 | 설명 |
---|---|
앱 데이터 삭제 | 앱 설정 > 저장 공간 > 데이터 삭제 시 토큰도 초기화됨 |
앱 재설치 | 앱을 삭제했다가 재설치하면 새로운 토큰이 발급됨 |
사용자 백업/복원 | 기기에 따라 백업 복원 후 토큰이 변경될 수 있음 |
Firebase 인스턴스 ID 삭제 | deleteInstanceId() 호출 시 강제 초기화됨 |
Google 계정 제거 | 시스템 설정에서 계정을 제거하거나, Google Play 서비스 설정이 초기화될 경우 |
간헐적인 보안 갱신 | 구글 서버 정책에 따라 비정기적으로 토큰이 갱신될 수 있음 |
2. 변경 감지는 이렇게: onNewToken()
Firebase는 토큰이 변경될 때 자동으로 호출되는 콜백을 제공하는데,
아래처럼 FirebaseMessagingService
를 상속한 서비스 클래스에 오버라이드해서 처리된다.
public class MyFirebaseMessagingService extends FirebaseMessagingService {
@Override
public void onNewToken(@NonNull String token) {
super.onNewToken(token);
Log.d("FCM", "New token: " + token);
// 서버로 전송하는 로직
sendTokenToServer(token);
}
}
3. 앱 실행 시 토큰 확인 & 서버 동기화
앱 실행 시 또는 로그인 직후에 FCM 토큰을 가져와서 서버에 동기화하는 것도 좋은 방법이다.
FirebaseMessaging.getInstance().getToken()
.addOnCompleteListener(task -> {
if (task.isSuccessful()) {
String token = task.getResult();
sendTokenToServer(token); // 서버에 전송
}
});
로그인 기반 앱이라면, 사용자 ID와 함께 토큰을 저장해서 유저별 푸시 식별에 활용할 수 있다.
3. 서버와의 싱크가 안 맞으면 ?
- 푸시가 특정 사용자에게 도달하지 않음
- 서버가 삭제된 토큰으로 계속 푸시 시도 → 리소스 낭비
- 복수 기기 사용 시, 푸시 대상이 꼬이는 현상
이런 문제를 막으려면 FCM 토큰을 항상 최신 상태로 유지하고 서버와 동기화해야 한다
FCM 토큰은 언제든 바뀔 수 있고, 한 번 받아놓고 끝나는 게 아니라, 생명주기 관리가 필요한 “변하는 값” 이라는 걸 인지하고 개발해야 안정적인 푸시 서비스가 가능하다
반응형
'Android' 카테고리의 다른 글
[안드로이드]FCM 에서 PendingIntent가 재사용되는 문제와 해결 방법 (0) | 2025.04.21 |
---|---|
[안드로이드] 딥링크에 대하여.. (0) | 2025.04.16 |
[안드로이드] EditText 외부 선택 시 키보드 제거_kotlin (Button 터치 예외처리추가) (0) | 2024.11.25 |
[안드로이드] kotlin uuid 생성코드 (1) | 2024.09.10 |
[안드로이드] 에뮬레이터 네트워킹(localhost 테스트) (0) | 2022.12.19 |