KoreaMango 나무

[WWDC] Meet ActivityKit 본문

iOS/ActivityKit

[WWDC] Meet ActivityKit

KoreaMango 2023. 11. 20. 23:10

Meet ActivityKit - WWDC23 - Videos - Apple Developer

 

Meet ActivityKit - WWDC23 - Videos - Apple Developer

Live Activities are a glanceable way for someone to keep track of the progress of a task within your app. We'll teach you how you can...

developer.apple.com

Live Activity

  • 이벤트나 작업 진행 상황을 지켜보는 방법
  • Live Activity는 시작과 끝이 나뉘어 있으며 백그라운드 앱 런타임이나, 푸시알림을 통해 실시간 업데이트를 제공한다.
  • Dynamic Island는 한번에 최대 2개의 실시간 현황을 표시할 수 있다.
  • 하나는 TrueDepth 카메라에 붙어서 나타나고 다른 하나는 별도의 뷰에서 렌더링 된다.
    • 두 실시간 현황 모두 최소형 표시 방식을 사용한다.
  • 사용자는 언제든지 실시간 현황을 길게 눌러서 확장형으로 표시하고 더 많은 정보를 빠르게 확인할 수 있다.
  • iOS 17에는 잠금화면과 다이나믹 아일랜드 뿐만 아니라 대기 모드일 때도 Live Activity가 나타난다.
  • WidgetKit과 SwiftUI를 사용해 실시간 현황에 상호 작용성을 추가할 수 있다.
  • 버튼이나 토글을 추가해 사용자 경험을 향상시킬 수 있다.
  • Bring Widgets to life를 통해 위젯에 버튼 넣는 방법을 알아볼 수 있다.

Bring widgets to life - WWDC23 - Videos - Apple Developer

 

Bring widgets to life - WWDC23 - Videos - Apple Developer

Learn how to make animated and interactive widgets for your apps and games. We'll show you how to tweak animations for entry transitions...

developer.apple.com

  • Live Activity는 ActivityKit 프레임워크에 의존하며, 앱이 수명 주기를 요청 및 업데이트, 관리할 수 있게 한다.
  • 앱이 Foreground 에 있을 때 실시간 현황을 요청할 수 있다.
    • 앱이 특정한 사용자 동작 이후에 실시간 현황을 요청해야만 한다.
    • 예를 들면 이벤트를 팔로우하거나, 작업을 시작하는 동작
  • API는 잠금화면에서 세 가지 Dynamic island 표시까지 모든 표현 방식을 지원해야 한다.
  • 대기모드일 땐 잠금화면 표현 방식을 화면에 맞게 확대한다.
  • Live Activity Notification을 통해서 실시간 현황을 원격으로 업데이트할 수 있다.
    • Push Noti로 어떻게 관리하는지 알고 싶으면 Update Live Activities with push noti를 참고하자.
    Update Live Activities with push notifications - WWDC23 - Videos - Apple Developer
 

Update Live Activities with push notifications - WWDC23 - Videos - Apple Developer

Discover how you can remotely update Live Activities in your app when you push content through Apple Push Notification service (APNs)...

developer.apple.com

 

 

Life Cycle of Live Activity

  1. Request Activity
  2. Update Content
  3. Observe Activity State
  4. End

1. Request Acitivity

앱을 foreground 에 표시하고 앱을 구성하면 필요한 활동 요청 데이터와 초기 컨텐츠를 얻을 수 있다.

Live Activity을 요청하려면 ActivityAttribues를 구현하여 Live Activity의 정적 및 동적 데이터 집합을 정의해야한다.

동적 데이터 집합은 캡슐화 해서 커스텀 ContentState를 정의한다.

이 프로퍼티가 바뀔 때마다 실시간 현황 UI가 업데이트되어 모험의 현 상태를 화면에 표시할 수 있게 된다.

Push Noti Type은 Live Activity가 ActivityKit Push Noti를 통해 동적 컨텐츠에 업데이트를 수신하는지 알려준다.

Activity.request

2. Update

Dynamic Attributes는 실시간 현황을 업데이트할 때 알려준다.

activity.update 업데이트된 콘텐츠와 알림 구성을 통해 활동 객체의 업데이트 API를 호출할 수 있다.

3. Observe Activity State

활동 상태 변화는 실시간 현황의 수명 주기 내에서 언제든 일어날 수 있습니다 상태는 네 가지입니다 started, finished dismissed, stale이 있다.

활동 객체의 activityStateUpdates API로 비동기식 업데이트 수신 시 이러한 상태를 관찰한다.

activity.activityStateUpdates

또한 활동 객체의 ActivityState를 통해 상태를 확인해 필요시 동기적으로 회수할 수 있다.

activity.activityState

4. End

활동을 종료하기 위해 우선 최종 콘첸츠를 생성해야 한다.

콘텐츠는 최종 상태를 보여준다.

activity.end

 

 

Building Live Activity

Widget

  • WidgetBundle은 2개의 위젯을 가진다.
  • 또한 실시간 현황 구성을 추가하기 위해 ActivityConfiguration을 추가한다.
    • ActivityConfiguration은 위젯 인프라를 활용하며 ActivityConfiguration: Widget
    • 본문에 WidgetConfiguration을 반환해야 한다.
  • ActivityConfiguration 객체를 생성하여 실시간 현황을 알 수 있다.
    • ActivityViewContext를 제공하여 정적 및 동적 속성과 활동 ID를 저장한다.
    • 이 Context는 Attributes Type을 기반으로 생성된다.
    • 이 유형은 활동 요청(Activity Request) 시 사용되는 속성과 일치해야 한다.
  • ActivityConfiguration의 첫 번째 클로저는 잠금 화면 UI를 지정한다.
    • 활동 업데이트에 따라 View Context가 변경될 때 마다 매번 UI가 변경된다.
  • 위젯과 마찬가지로 실시간 현황의 잠금 화면 UI크기는 제공하지 않고 시스템이 적합한 크기를 정하도록 한다.

Dynamic Island

  • 프레젠테이션 방식은 압축형, 최소형, 확장형 총 3개이다.
  • 시스템에서 실행 중인 활동이 앱의 실시간 현황뿐인 경우 압축형
    • 압축형에는 leading과 trailing이 있다.
  • ActivityConfiguration 객체의 DynamicIsland 클로저에서 다시 View Context에 접근하여 expanded와 CompactLeading, compactTrailing minimal 뷰를 생성한다.
  • 두개 이상의 앱이 실시간 현황을 실행하면, 어떤 실시간 현황을 보여줄지 시스템에서 선택하고 최소형 프레젠테이션으로 둘 다 표시한다.
    • 하나는 Dynamic Island에 붙어서 나타나고 하나는 분리되어서 나타난다.
  • 다이나믹 아일랜드를 길게 누르면, 확장형이 나타나게 된다.