위젯 & 실시간 현황 기술 검토 보고서

개요

목표
위젯: 앱을 열지 않아도 오늘 운동/주·월 진행률 등을 “훑어보기(glance)”로 제공.
실시간 현황: 운동 시작~종료 동안 잠금 화면/다이내믹 아일랜드에 진행률·타이머 등 실시간 상태 표출.

위젯(Widget) 구현 관련 검토

(1) iOS — WidgetKit

항목
내용
지원 버전
iOS 14 이상 (WidgetKit 도입 시점)
지원 기기
iPhone, iPad, Mac (별도 타깃 필요)
필수 구성요소
Widget Extension 추가, SwiftUI 기반 UI 필수
통신 방식
React Native Widget 간 직접 통신 불가 → App Group 공유 스토리지(NSUserDefaults / File) 사용 필요
갱신 주기 제한
시스템 타임라인에 의해 자동 결정 (보통 수십 분~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 ActivityKit 직접 연동 불가 → 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 Native 모듈(Kotlin) 브릿지로 상태 전달 후 알림 내용 변경
UX/UI 커스텀 가능성
- RemoteViews를 활용하면 커스텀 알림 UI 제작 가능- 진행률 바, 남은 시간, 운동 아이콘, 버튼(예: 일시정지/종료) 삽입 가능- 다크모드/라이트모드 대응 및 앱 테마 색상 적용 가능
잠금화면 표시 여부
가능- Android의 Foreground Notification은 기본적으로 잠금화면에서도 표시됨- setVisibility(Notification.VISIBILITY_PUBLIC) 옵션 설정 시 상세 내용 표시 가능
예시 UI 시나리오
상단바 또는 잠금화면에서 “ 하체 루틴 진행 중 · 12분 남음” 형태로 표시되고,탭 시 앱의 운동 기록 화면으로 진입
리스크 및 주의사항
- 배터리 절약 모드(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과 함께 사용)
가능 (Live Activity와 데이터 연동 시)
React Native Widget Live Activity 간 데이터 전달용. NSUserDefaults나 파일 기반으로 공유.
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)+
(홈화면 전용)
잠금화면엔 표시 안됨