Skip to content

feat: AtchaV2 Phase 8 — 갱신 채널: FCM 사일런트 푸시(가드) + 폴링 폴백 + 하드닝 - #346

Merged
YuGeonHui merged 2 commits into
env/devfrom
feat/v2-phase8-sync-hardening
Aug 22, 2026
Merged

feat: AtchaV2 Phase 8 — 갱신 채널: FCM 사일런트 푸시(가드) + 폴링 폴백 + 하드닝#346
YuGeonHui merged 2 commits into
env/devfrom
feat/v2-phase8-sync-hardening

Conversation

@YuGeonHui

Copy link
Copy Markdown
Collaborator

요약

  • AlarmSyncService(App)로 갱신 일원화: 앱 시작·포그라운드 복귀·푸시 수신 3경로가 같은 RefreshAlarmUseCase 경유
  • FCM 사일런트 푸시(content-available=1) 수신 → refresh → 재스케줄·배너 갱신 (plist 존재 가드 유지, 알림 권한 프롬프트 없음)
  • UIBackgroundModes: remote-notification + aps-environment entitlements (Tuist DSL)
  • 검수용 GoogleService-Info.plist 투입 (레거시 번들 유용)
  • 하드닝: 막차 종료/경로 없음 UX, 권한 거부, 오프라인, 알람 교체, 배너-알람 시각 일치

🤖 Generated with Claude Code

YuGeonHui and others added 2 commits August 22, 2026 23:20
- AlarmSyncService(App) 신설: 앱 시작(부트스트랩 직후)·포그라운드 복귀·사일런트
  푸시 3경로를 단일 RefreshAlarmUseCase 호출로 일원화 (Phase 7의 HomeViewModel
  복귀 로직 흡수), 성공 결과는 AlarmSyncEvents 스트림으로 홈에 전파
- Domain: AlarmSyncEvents 포트 + ObserveAlarmUseCase 신설 — HomeViewModel은
  refresh 직접 호출 대신 동기화 결과만 구독해 배너·버튼 갱신
- AppDelegate: GoogleService-Info.plist 가드 유지, 구성 성공 시에만
  MessagingDelegate + registerForRemoteNotifications (알림 권한 프롬프트 없음),
  content-available 푸시(type=REFRESH, 레거시 실측) → 동기화, FCM 토큰은
  로깅만(미확정 #5), plist 부재 시 FCM 경로 완전 비활성(폴링만으로 성립)
- Project.swift: UIBackgroundModes[remote-notification] 추가
- 조합 루트를 AppDelegate 소유로 이동 (scene 없는 백그라운드 푸시 대응),
  알람 스택(리포지토리·스케줄러) 1회 생성 공유

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ronment entitlements

- 레거시 plist(com.atcha.iOS용, 사용자 지시)를 Projects/App/Resources/에 투입
  → Firebase 자동 활성 확인 (번들 ID 불일치 경고는 예상된 것, FCM 토큰 발급 동작)
- Tuist entitlements DSL로 aps-environment(development) 추가 — 부재 시
  APNs 등록이 didFailToRegister로 실패하는 것을 시뮬레이터 실측으로 확인
- 검수 관찰용 os Logger: 푸시 수신(AppDelegate)·동기화 시작/성공/실패(AlarmSyncService)
- 시뮬레이터 검증: FCM 토큰 발급 + 앱 시작/포그라운드 복귀 동기화 트리거 E2E 확인.
  simctl push의 content-available 주입은 iOS 26 심 런타임이 거부
  (UIBackgroundModes 선언에도 SpringBoard RequestDenied) — 푸시 수신 최종
  확인은 실기기 + 실서버 푸시 필요

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@YuGeonHui
YuGeonHui merged commit bd802c1 into env/dev Aug 22, 2026
1 check passed
@YuGeonHui
YuGeonHui deleted the feat/v2-phase8-sync-hardening branch August 22, 2026 15:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant