NSUserActivity

Panther·2021년 7월 28일
0
post-custom-banner

https://developer.apple.com/documentation/foundation/nsuseractivity

"A representation of the state of your app at a moment in time."

특정 시점에 앱의 상태를 나타냅니다.

Declaration

class NSUserActivity : NSObject

Overview

NSUserActivity 객체는 앱의 상태를 캡처할 수 있는 가벼운 방법을 제공하고, 이후에 이 상태를 사용할 수 있도록 해줍니다. 앱 컨텐트를 보는 것, 문서 편집, 웹 페이지를 보는 것, 비디오를 시청하는 것과 같은 사용자가 하고 있었던 행동에 대한 정보를 캡처하려면 이 객체를 생성하시기 바랍니다. 시스템이 앱을 launch할 때 이 객체가 사용이 가능하다면, 앱은 적합한 상태로 복구하기 위해 해당 객체에 있는 정보를 사용합니다. 스팟라잇 역히 사용자의 검색 결과를 향상시키기 위해 이 객체를 사용합니다. 다른 기기에서도 행동을 계속할 수 있도록 허용하려면 Implementing Handoff in Your App을 살펴보시기 바랍니다.

https://developer.apple.com/documentation/foundation/task_management/implementing_handoff_in_your_app
https://velog.io/@panther222128/Implementing-Handoff-in-Your-App

Siri

어떤 이유에서든 SiriKit이 앱을 launch할 필요가 있다면, 사용자 활동 객체를 생성하고 상호작용 속성에 적합한 INInteraction 객체를 할당합니다. 앱은 스스로 설정하기 위해 상호작용 정보를 사용할 수 있고 SiriKit에 의해 시작된 상호작용과 관련이 있는 정보를 표시합니다. 앱에 전달하길 원하는 추가적인 데이터를 포함하는 커스텀 사용자 활동 객체와 함께 SiriKit을 제공할 수도 있습니다.

iOS 15 및 이후 버전에서 사용자는 시리에게 "share this"라고 요청함으로써 보고 있었던 컨텐트를 공유할 수 있습니다. Mac Catalyst로 설계된 앱은 툴바에 있는 NSSharingServicePickerToolbarItem을 통해 같은 기능을 제공합니다. 공유 가능한 컨텐트를 제공하기 위해 activityItemsConfiguration 혹은 activityItemsConfigurationSource를 사용할 수도 있습니다. iOS에서 위 두 가지 속성이 nil이면, 시리는 앱이 갖는 현재 사용자 활동의 webpageURL 속성을 대체값으로 사용합니다.

Quick Note

macOS와 iOS에 있는 퀵 노트는 NSUserActivity로 표현되는 모든 앱 컨텐트를 연결시킬 수 있습니다. 링크로써 나타나려면 컨텐트는 앱의 현재 활동이어야 하고, 아래 중 적어도 한 가지 아이덴티파이어를 제공해야 합니다.

webpageURL
http: URL, 사용자가 동일한 컨텐트에 들어갈 때마다 일관적인 표준 형식입니다.

persistentIdentifier
이 도메인에 있는 컨텐트를 확인하기 위한 스트링입니다. 이 아이덴티파이어는 여러 기기에 걸쳐 동일한 컨텐트를 확인해야 합니다.

targetContentIdentifier
이 도메인에 있는 컨텐트를 확인하는 스트링입니다. 또한, 앱의 여러 씬을 명확하게 구분할 수 있도록 해줍니다. 아이덴티파이어는 여러 기기에 걸쳐 같은 컨텐트를 확인해야 합니다.

퀵 노트가 잘 작동하도록 하려면 컨텐트는 아래 가이드라인을 고수해야 합니다.

  • 활동 제목은 명확하고 간결해야 합니다. 이 텍스트는 “Photo taken on July 27, 2020” 혹은 “Conversation with Maria”처럼 링크의 컨텐트를 설명합니다. 활동 제목에는 명사를 사용하시기 바랍니다.
  • becomeCurrent(), resignCurrent()를 사용해서 앱의 현재 활동이 최신 상태일 수 있도록 유지합니다.
  • 연결 가능한 아이덴티파이어(위에서 언급한)는 같은 컨텐트에 대해 안정적이고 일관적이어야 합니다. 노트를 앱에 있는 문서에 연결하려고 하는 경우, 그리고 해당 문서에 다시 접속하려면, 시스템은 노틍 다시 연결하는 인디케이터를 보여줍니다. 시스템은 문서가 링크의 기존 소스와 같은지 비교하기 위해 아이덴티파이어를 비교합니다.
  • 앱에 의해 제공되는 활동들에 대한 지원과 연결된 컨텐트를 탐색하는 것에 대한 지원을 무기한으로 유지하시기 바랍니다. 노트에 추가된 링크는 깨진 링크가 데이터 손실을 나타낸다고 느끼는 사용자에게 중요합니다.
  • 존재하지 않는 컨텐트로 이동하려고 하는 활동의 시도를 정상적으로 처리해야 합니다. 예를 들어 이동한 컨텐트의 새 위치로 재연결하거나 에러 메시지를 보여줄 수 있습니다. 사용자가 다른 사용자의 기기에만 존재하는 컨텐트에 연결하려고 할 때, 공유된 노트에서 이와 같은 상황이 발생합니다.

Search Results

사용자가 이후에 검색하길 원하는 정보를 포함하고 있는 NSUserActivity 객체의 경우 isEligibleForSearch 속성을 true로 설정하시기 바랍니다. 검색이 가능하도록 하는 경우 스팟라잇은 사용자 활동 객체를 인덱싱하고, 이후 기기에서 검색이 이뤄지는 동안 사용자 활동 객체들을 고려합니다. 예를 들어 사용자가 앱에서 특정 레스토랑에 대한 정보를 본 경우 이에 상응하는 사용자 활동 객체 검색을 지원할 수 있습니다. 스팟라잇을 사용해 레스토랑에 대한 이후 검색은 사용자 활동 객체로부터 얻은 결과를 포함할 수 있습니다.

기기에서 검색하는 것과 더불어 글로벌 스팟라잇 검색 엔진을 사용해 앱에서 접근된 URL을 제공할 수 있습니다. URL을 공유하는 것은 스팟라잇이 사용자를 위해 검색 결과를 향상시킬 수 있도록 합니다. URL을 제공하려면 활동 객체의 속성인 webpageURL 속성에 URL을 입력하고 isEligibleForPublicIndexing 속성를 true로 설정해야 합니다.

Important
검색 결과를 활용하기 위한 모든 활동 객체들에 강한 참조를 유지해야만 합니다.

앱 데이터의 일반적 목적 인덱싱 메커니즘이 아닌 사용자로부터 초기화된 활동들을 기록하기 위해 사용자 활동 객체를 사용해야 합니다. 사용자가 터치한 컨텐트뿐만 아니라 앱의 컨텐트 전부를 인덱싱하려면, Core Spotlight 프레임워크의 API를 사용하시기 바랍니다.

Topics


Creating a User Activity Object

Creating a User Activity Object

핵심 사용자 상호작용을 확인하고 나중에 복구시키기 위한 정보를 포함시킵니다.

https://developer.apple.com/documentation/foundation/nsuseractivity/creating_a_user_activity_object
https://velog.io/@panther222128/Creating-a-User-Activity-Object


See Also


Activity Sharing

Implementing Handoff in Your App

사용자 활동을 직접 생성, 전송, 수신합니다.

https://developer.apple.com/documentation/foundation/task_management/implementing_handoff_in_your_app
https://velog.io/@panther222128/Implementing-Handoff-in-Your-App


post-custom-banner

0개의 댓글