개요
•
목표
◦
위젯: 앱을 열지 않아도 오늘 운동/주·월 진행률 등을 “훑어보기(glance)”로 제공.
◦
실시간 현황: 운동 시작~종료 동안 잠금 화면/다이내믹 아일랜드에 진행률·타이머 등 실시간 상태 표출.
위젯(Widget) 구현 관련 검토
(1) iOS — WidgetKit
항목 | 내용 |
지원 버전 | iOS 14 이상 (WidgetKit 도입 시점) |
지원 기기 | iPhone, iPad, Mac (별도 타깃 필요) |
필수 구성요소 | Widget Extension 추가, SwiftUI 기반 UI 필수 |
통신 방식 | React Native |
갱신 주기 제한 | 시스템 타임라인에 의해 자동 결정 (보통 수십 분~1시간 단위) |
UX/UI 제약 | SwiftUI 기반, 커스텀 자유도는 높지만 애니메이션 및 인터랙션 제한적 |
잠금화면 표시 여부 | iOS 16 이상부터 잠금화면 위젯 가능 (단, 크기·레이아웃 제한 존재) |
(2) Android — AppWidgetProvider
항목 | 내용 |
지원 버전 | Android 8.0 (Oreo, API 26) 이상 권장 |
지원 기기 | 모든 Android 스마트폰 (OEM 무관) |
필수 구성요소 | AppWidgetProvider, RemoteViews, BroadcastReceiver |
통신 방식 | RN → Native Bridge → Broadcast 갱신 트리거 |
갱신 주기 | 최소 30분~시스템 정책에 따라 변동 (Android 12 이후 제한 강화) |
UX/UI 제약 | XML 기반 정적 UI + RemoteViews API 제약 (동적 애니메이션 불가) |
잠금화면 표시 여부 | Android 5.0 이후 기본 잠금화면 위젯은 제거됨 (일부 제조사 커스텀만 가능) |
실시간 현황 구현 관련 검토
(1) iOS — Live Activities / Dynamic Island
항목 | 내용 |
지원 버전 | iOS 16.1 이상 |
지원 기기 | iPhone 14 Pro/Pro Max 이상 (Dynamic Island 지원)기타 기기는 잠금화면에서만 표시 |
필수 구성요소 | ActivityKit, WidgetExtension,liveactivity |
데이터 업데이트 | 앱 내부 이벤트 or APNs Live Activity Push |
UX/UI 커스텀 가능성 | SwiftUI 기반의 높은 커스텀 가능성 (제한된 View hierarchy) |
잠금화면 표시 여부 | 가능 (운동 시간, 진행률 등 표시 가능) |
리스크 | - iOS 16.1 미만 기기 완전 미지원- 푸시 인증서(APNs) 설정 필요- React Native |
(2) Android — 실시간 현황 구현 (Foreground Service + Ongoing Activity API 기반)
항목 | 내용 |
지원 버전 | Android 5.0 (API 21) 이상 전 기기 지원 ※ Android 13 (API 33) 이상에서 권장 - Live Activity |
지원 기기 | 모든 기기 |
구현 방식 | Foreground Service + Ongoing Notification + Ongoing Activity API - Android 13 (API 33) 이상 |
데이터 업데이트 | 앱 내부 상태 변화에 따라 Notification 갱신 |
UX/UI 커스텀 가능성 | 커스텀 Notification View로 상당한 자유도 확보 |
잠금화면 표시 여부 | 가능 (Notification 형태로 노출) |
리스크 | - 배터리 절약 모드에서 갱신 중단- 제조사별 알림 정책 상이- iOS와 달리 시스템 API가 표준화되어 있지 않음 |
(2) Android — 실시간 현황 구현 (Foreground Service + Notification 기반)
항목 | 내용 |
지원 버전 | Android 5.0 (API 21) 이상 전 기기 지원 ※ Android 10 (API 29) 이상에서 권장 |
지원 기기 | 모든 기기 |
구현 방식 | Foreground Service + Ongoing Notification 구조로 실시간 상태 유지- Android 13(API 33) 이상에서는 선택적으로 Ongoing Activity API 확장 가능 |
핵심 동작 원리 | 앱 내에서 운동 시작 시 Foreground Service를 실행하여 시스템이 앱을 종료하지 않도록 유지하고,해당 서비스가 NotificationManager를 통해 상단 고정 알림(Ongoing Notification) 을 지속 표시함.운동 시간, 남은 휴식, 칼로리 소모 등 상태 변경 시 NotificationManager.notify() 로 UI 즉시 갱신 가능 |
데이터 업데이트 | - 앱 내부 상태 변화(운동 시작, 휴식, 종료)에 따라 Notification 내용 실시간 갱신- React Native |
UX/UI 커스텀 가능성 | - RemoteViews를 활용하면 커스텀 알림 UI 제작 가능- 진행률 바, 남은 시간, 운동 아이콘, 버튼(예: 일시정지/종료) 삽입 가능- 다크모드/라이트모드 대응 및 앱 테마 색상 적용 가능 |
잠금화면 표시 여부 | |
예시 UI 시나리오 | 상단바 또는 잠금화면에서 “ |
리스크 및 주의사항 | - 배터리 절약 모드(Doze, App Standby)에서는 서비스 일시 중단 가능 → setForeground()로 최소화 가능- 제조사별 알림 정책 상이 (샤오미, 화웨이 등은 백그라운드 알림 차단 가능성)- 실시간 애니메이션 불가 (RemoteViews 한계)- iOS의 Live Activity처럼 시스템 통합 UI는 아님 |
전체 요약
ios
구현 방식 | 지원 버전 | 잠금화면 표시 가능 여부 | 설명 |
WidgetKit (홈화면 위젯) | iOS 14+ | 홈 화면·사이드 스택에 “오늘 운동 요약, 주간 진행률” 등 표시. 실시간 갱신 불가, 시스템이 일정 주기로 업데이트함. | |
Lock Screen Widget (잠금화면 위젯) | iOS 16+ | iOS 16에서 잠금화면 커스터마이징 기능 추가. “오늘 운동 횟수” 등 간단한 정보 표시 가능. 실시간 반영은 불가. | |
Live Activities (ActivityKit) | iOS 16.1+ | 운동 중, 배달, 타이머 등 “실시간 상태”를 잠금화면 하단에 표시. React Native에서 Swift 모듈 연동 필요. | |
Dynamic Island (Live Activity 확장) | iPhone 14 Pro 이상 (iOS 16.1+) | Live Activity가 Dynamic Island 영역으로 확장되어 “운동 진행률, 남은 시간” 등 실시간 표시 가능. | |
App Group 기반 데이터 공유 | iOS 14+ (WidgetKit과 함께 사용) | React Native |
android
구현 방식 | 지원 버전 | 잠금화면 표시 가능 여부 | 설명 |
일반 Notification | Android 5~현재 | “운동 중입니다 (30분 경과)” 같은 알림 | |
Foreground Service + Ongoing Notification | Android 10(API 29)+ | 앱이 백그라운드여도 유지되는 알림 | |
Ongoing Activity API | Android 13(API 33)+ | iOS Live Activity처럼 “진행 중 상태” 표시 | |
위젯(AppWidget) | Android 8(API 26)+ | 잠금화면엔 표시 안됨 |




