[Android] 푸시 알림 클릭 시 화면 이동 오류 및 PendingIntent 보안 설정 정리
앱을 운영하다 보면 푸시 알림을 보내는 것 자체보다, 사용자가 알림을 '클릭한 이후'에 생기는 버그 때문에 골치 아플 때가 많습니다. 상세 화면으로 바로 안 가고 메인 화면만 열린다거나, 이미 앱이 켜져 있는데 화면이 꼬이거나, 상세 화면에서 뒤로가기를 누르면 앱이 그냥 종료되는 현상 같은 것들입니다. 저의 경우도 예전에 알림 기능을 대충 구현했다가 Android 12 업데이트 이후 PendingIntent 크래시를 겪고 식은땀을 흘린 적이 있습니다. 알림 클릭 처리는 단순한 화면 이동이 아니라 내비게이션 스택, 사용자 인증, 보안 플래그까지 세트로 묶어서 관리해야 합니다. 자꾸 까먹어서 나중에 보려고 실무 기준으로 정리해 둡니다. 푸시 알림 클릭 시 자주 터지는 문제들 보통 알림 기능을 만들 때 아래와 같은 실수를 가장 많이 합니다. 모든 알림에 똑같은 requestCode 를 써서, 마지막에 온 알림 데이터로 덮여버리는 현상 FLAG_IMMUTABLE 또는 FLAG_MUTABLE 을 명시하지 않아 Android 12 이상 기기에서 앱이 터지는 현상 서버가 보내준 알림 payload(screen 값 등)를 검증 없이 그대로 Intent extras에 넣고 라우팅 데이터로 쓰는 경우 (보안 취약점) 알림을 누르고 상세 화면으로 들어갔는데, 뒤로가기를 누르면 메인 화면이 아니라 빈 화면이 나오거나 바탕화면으로 나가버리는 UX 오류 이미 앱이 실행 중인데 알림을 누를 때마다 Activity가 중복으로 계속 쌓이는 현상 해결 방법: 안전한 PendingIntent 생성 팩토리 코드 서버 URL, 사용자 식별자, FCM 토큰 같은 민감한 정보들을 로그나 예제 코드에서 다 걷어내고, 실무에서 안전하게 사용할 수 있도록 구조화한 팩토리 클래스 코드입니다. 서버에서 넘겨받은 payload 값을 먼저 검증(Allowlist 방식)한 뒤, 안전함이 확인된 데이터로만 PendingIntent 를 생성하는 방식입니다. Kotlin data class Noti...