📝 기능 설명
저장한 링크를 스케줄러가 주기적으로 확인하고, 이전 검사 결과 또는 링크 상태와 달라진 내용이 있을 때 사용자에게 알림을 표시하는 기능을 구현합니다.
백엔드에서는 특정 기간마다 사용자가 저장한 링크를 스케줄러로 점검하고, 변경된 사항이 있으면 FCM을 통해 프론트 앱으로 알림을 전송합니다.
프론트에서는 FCM 메시지를 수신한 뒤 푸시 알림과 앱 내부 알림 모달을 통해 사용자가 변경 결과를 확인할 수 있도록 합니다.
이번 작업에서는 알림 수신 흐름, 앱 내부 모달 디자인, 푸시 알림 메시지 문구, 변경 있음/변경 없음 케이스별 표시 정책을 함께 정리합니다.
📋 구현할 Task
📎 우선 확인 대상
FCM 및 알림 수신 흐름:
- FCM token 등록 위치
- push notification listener 등록 위치
- foreground message handler
- notification response handler
- 앱 시작 시 알림으로 진입하는 흐름
앱 내부 알림 UI:
- 공통 모달 컴포넌트
- 알림 모달 신규 컴포넌트
- 변경 있음 상태 UI
- 변경 없음 상태 UI
- 상세 보기 버튼
- 닫기 버튼
관련 화면 후보:
app/(tabs)/(home)/saved-links.tsx
app/(tabs)/(home)/scan-result.tsx
app/(tabs)/(home)/scan-result-caution.tsx
app/(tabs)/(home)/scan-result-block.tsx
app/(tabs)/(home)/index.tsx
app/(tabs)/(folder)/[id].tsx
메시지 데이터 후보:
notificationId
type
status
checkedAt
savedLinkId
url
title
previousVerdict
currentVerdict
changedCount
summary
deepLink
📎 알림 문구 초안
변경 있음 - 푸시 알림:
- 제목:
저장한 링크에 변경 사항이 있어요
- 본문:
스케줄러가 이전과 달라진 검사 결과를 감지했어요. 자세한 내용을 확인해보세요.
변경 있음 - 앱 내부 모달:
- 제목:
변경 사항이 발견됐어요
- 본문:
저장한 링크의 검사 결과가 이전과 달라졌어요. 변경된 내용을 확인해보세요.
- 주요 버튼:
변경 내용 보기
- 보조 버튼:
닫기
변경 없음 - 푸시 알림:
- 제목:
저장한 링크에 변경 사항이 없어요
- 본문:
최근 확인 결과, 이전과 달라진 내용은 발견되지 않았어요.
변경 없음 - 앱 내부 모달:
- 제목:
변경 사항이 없어요
- 본문:
스케줄러가 저장한 링크를 확인했지만, 이전과 달라진 내용은 발견되지 않았어요.
- 주요 버튼:
확인
여러 링크 변경 시 문구:
- 제목:
저장한 링크 {n}개에 변경 사항이 있어요
- 본문:
스케줄러가 여러 링크의 변경 사항을 감지했어요. 변경된 내용을 확인해보세요.
📎 처리 방향
- FCM payload에는 화면 표시용 문구만 의존하지 않고, 프론트에서 상태값을 기준으로 문구를 구성할 수 있도록 합니다.
- 변경 여부는
status: "changed" | "unchanged" 또는 유사한 명확한 값으로 구분합니다.
- foreground 상태에서는 시스템 푸시만 의존하지 않고 앱 내부 알림 모달을 표시합니다.
- background 또는 terminated 상태에서는 사용자가 푸시 알림을 눌렀을 때 관련 저장 링크 또는 검사 결과 화면으로 이동하도록 처리합니다.
- 변경 있음 상태는 사용자가 바로 상세 내용을 확인할 수 있도록
변경 내용 보기 액션을 제공합니다.
- 변경 없음 상태는 정보성 안내로 처리하고, 사용자의 추가 행동을 강제하지 않습니다.
- 변경 없음 알림을 실제로 푸시로 보낼지 여부는 백엔드 스케줄러 정책과 사용자 피로도를 고려해 결정합니다.
- 알림 문구는 너무 기술적인 표현보다 사용자가 이해하기 쉬운 표현을 우선 사용합니다.
- FCM payload 원문이 비어 있거나 예상과 다른 값이어도 앱이 깨지지 않도록 fallback 문구를 제공합니다.
📝 기능 설명
저장한 링크를 스케줄러가 주기적으로 확인하고, 이전 검사 결과 또는 링크 상태와 달라진 내용이 있을 때 사용자에게 알림을 표시하는 기능을 구현합니다.
백엔드에서는 특정 기간마다 사용자가 저장한 링크를 스케줄러로 점검하고, 변경된 사항이 있으면 FCM을 통해 프론트 앱으로 알림을 전송합니다.
프론트에서는 FCM 메시지를 수신한 뒤 푸시 알림과 앱 내부 알림 모달을 통해 사용자가 변경 결과를 확인할 수 있도록 합니다.
이번 작업에서는 알림 수신 흐름, 앱 내부 모달 디자인, 푸시 알림 메시지 문구, 변경 있음/변경 없음 케이스별 표시 정책을 함께 정리합니다.
📋 구현할 Task
📎 우선 확인 대상
FCM 및 알림 수신 흐름:
앱 내부 알림 UI:
관련 화면 후보:
app/(tabs)/(home)/saved-links.tsxapp/(tabs)/(home)/scan-result.tsxapp/(tabs)/(home)/scan-result-caution.tsxapp/(tabs)/(home)/scan-result-block.tsxapp/(tabs)/(home)/index.tsxapp/(tabs)/(folder)/[id].tsx메시지 데이터 후보:
notificationIdtypestatuscheckedAtsavedLinkIdurltitlepreviousVerdictcurrentVerdictchangedCountsummarydeepLink📎 알림 문구 초안
변경 있음 - 푸시 알림:
저장한 링크에 변경 사항이 있어요스케줄러가 이전과 달라진 검사 결과를 감지했어요. 자세한 내용을 확인해보세요.변경 있음 - 앱 내부 모달:
변경 사항이 발견됐어요저장한 링크의 검사 결과가 이전과 달라졌어요. 변경된 내용을 확인해보세요.변경 내용 보기닫기변경 없음 - 푸시 알림:
저장한 링크에 변경 사항이 없어요최근 확인 결과, 이전과 달라진 내용은 발견되지 않았어요.변경 없음 - 앱 내부 모달:
변경 사항이 없어요스케줄러가 저장한 링크를 확인했지만, 이전과 달라진 내용은 발견되지 않았어요.확인여러 링크 변경 시 문구:
저장한 링크 {n}개에 변경 사항이 있어요스케줄러가 여러 링크의 변경 사항을 감지했어요. 변경된 내용을 확인해보세요.📎 처리 방향
status: "changed" | "unchanged"또는 유사한 명확한 값으로 구분합니다.변경 내용 보기액션을 제공합니다.