Search
🔫

Sentry로 FCM 웹 푸시 알림 에러 해결하기

분야
FE
주제
FE
심각도
높음🔥
제보자
Sentry
담당자
작성자
상태
처리 중
이슈링크(optional)
작성일자
2025/08/06 06:00
공개여부
공개
글감

문제 상황

어떤 것을 하려다가 문제가 발생했는가?
아이폰 Safari에서 웹 푸시 알림 설정을 변경했을때 FirebaseError 발생하고, 사용자에게 실제 설정 변경 여부와 관계없이 ‘설정이 저장되었습니다’라는 정상 문구 안내
발생한 환경
PROD ONLY(DEV에서는 재현 불가)
발생한 문제(에러)
에러 메시지
Messaging: This browser doesn't support the API's required to use the Firebase SDK. (messaging/unsupported-browser).
TypeScript
복사
에러 발견 방법 : Discord와 연동된 Sentry 에러 알림 수신

원인

추정되는 원인
getMessaging 함수를 브라우저 환경이 아닐 때 호출한다고 판단
FCM(Firebase Cloud Messaging)의 getMessaging
FCM의 기능을 사용하기 위해 필요한 messaging 객체를 반환
웹 브라우저나 모바일 애플리케이션에서 푸시 메시지를 수신하는 데 사용
실제 원인
PR 리뷰 중 팀원의 도움으로 일부 브라우저에서 Firebase Messaging API의 필수 기능이 지원되지 않는 것을 알게됐고, 이에 대한 예외 처리 로직의 부재가 근본적인 원인임을 파악함 < 무작정 구글링하지 말고 에러 메시지에 더 집중할걸,,
에러 발생 패턴 분석: Sentry 대시보드 확인 및 직접적인 브라우저 테스트를 통해 에러가 특정 브라우저에서만 반복적으로 발생하는 것을 확인

최종 해결

최종 해결을 위한 시행착오(optional)
if ( typeof window !== "undefined" && typeof window.navigator !== "undefined" ) { messaging = getMessaging(app); }
TypeScript
복사
… 했지만 근본적인 해결책은 따로 있었다는 것!
해결방법
isSupported()를 활용한 브라우저 지원 여부 검증 로직을 추가해서 FCM API를 지원하는 환경에서만 푸시 알림 관련 기능이 작동하도록 개선하고, 지원하지 않는 환경 사용자에게는 적절한 안내 메시지(데스크탑 이용 권장) 제공하여 사용자 경험 개선
코드
// 사용자 브라우저가 푸시 알림 기능을 지원하는지 확인 const checkBrowserSupport = async () => { const isApiSupported = await isSupported(); if (isApiSupported) messaging = getMessaging(app); else { let error = new Error(unsupportedMsg); error.name = "브라우저 알림 지원 제한"; throw error; } }; // FCM APP을 등록 후 브라우저 알림 권한을 요청하고, 토큰을 반환 export const requestFcmAndGetDeviceToken = async (): Promise<string | null> => { checkBrowserSupport(); // ... const token = await getToken(messaging!, { ... } // FCM 토큰 제거 및 브라우저 알람 권한 해제 export const deleteFcmToken = async (): Promise<void> => { checkBrowserSupport(); // await deleteToken(messaging!); ... }
TypeScript
복사
1.
브라우저 지원 여부 확인 추가(checkBrowserSupport)
isSupported()로 FCM API 지원 여부를 체크하는 로직 추가
지원  → 에러 처리 → 사용자 안내 메시지 모달 띄움
2.
FCM API 호출 전 호환성 검증 로직 적용
FCM 토큰을 요청(requestFcmAndGetDeviceToken)하거나 삭제(deleteFcmToken)할 때 무조건 checkBrowserSupport 호출 → 브라우저가 푸시 알림을 지원하지 않으면 동작하지 않도록 방지

참고자료