본문 바로가기
WWDC

[WWDC19] Introducing SiriKit Media Intents

by 고고 2022. 5. 9.

링크: https://developer.apple.com/videos/play/wwdc2019/207/

 

Introducing SiriKit Media Intents - WWDC19 - Videos - Apple Developer

iOS 13 enhances SiriKit by bringing all new support for audio content playback. See how to provide an excellent, hands-free experience...

developer.apple.com

 

iOS 13 이상부터 오디오 유스케이스를 위한 미디어 도메인 지원을 시작합니다.

 

목차

1. 새 SiriKit Media Intents 소개

2. SiriKit Media Reqeusts 핸들링

3. Best Practices

 

 

1. 새 SiriKit Media Intents 소개

아래와 같은 말을 Intent로 변환합니다.

 

 

 

새 SiriKit Media Intents에는 아래 4가지가 있습니다.

INPlayMediaIntent, INAddMediaIntent, INUpdateMediaAffinityIntent, INSearchForMediaIntent.

 

 

 

SiriKit Media가 지원하는 미디어 타입은 아래의 총 다섯가지입니다.

Music, Podcasts, Audiobooks, Radio, General.

 

 

 

 

2. SiriKit Media Reqeusts 핸들링

SiriKit Media Intents는 다른 Intents들의 프로세싱 과정과 동일합니다.

Intents app extension에서 이루어집니다.

 

 

Intent는 Resolve, Confirm, Handle 순서로 처리가 이루어집니다.

Resolve 단계에서는 재생할 미디어 아이템 객체를 1개 이상 반환합니다. 만약 객체를 찾지 못하거나 오류가 발생했다면 unsupported를 반환합니다.

 

 

 

Confirm단계에서는 진짜로 재생할 것인지 확인합니다. 미디어 도메인에서는 확인을 거치는 것을 추천하지 않습니다.

 

 

 

Handle단계는 가장 간단합니다. 백그라운드에서 앱을 동작시키기 때문입니다.

 

 

 

백그라운드에서는 평소처럼 음악을 재생하면 됩니다.

 

 

 

resolve함수입니다. INPlayMediaIntent를 받아 INPlayMediaMedaiItemResolutionResult를 반환합니다. 찾지 못한다면 unsupported를, 찾는다면 mediaItem과 함께 success를 반환합니다.

 

 

 

confirm단계는 생략되었습니다.

handle함수입니다. 앱에서 핸들하도록 넘깁니다.

 

 

 

background에서 앱을 launch하기 위해 AppDelegate에서 구현한 함수입니다.

 

 

 

- Demo

우선 Intents Extension을 추가합니다.

 

 

 

그리고 Intents Extension이 아닌 원래 iOS 앱에 Siri Capability를 추가합니다.

 

 

Intents Extension의 General 탭에서 Intents를 추가합니다.

 

 

 

Intents Extension을 만들면 아래와 같은 기본 IntentHandler가 생성됩니다.

 

 

 

INPlayMediaIntentHnalding 프로토콜을 따르게 바꾸고 resolve, handle 메소드를 추가합니다.

 

 

 

아래 resolve 함수에서는 unsupported를 반환합니다.

 

 

 

 

unsupported는 시리에서 아래와 같이 찾지 못했다고 반응합니다.

 

 

 

예제 파일에서 아래와 같은 다른 resolve 함수들을 볼 수 있습니다.

 

 

 

handle 함수입니다.

 

 

 

AppDelegate에서 .handleInApp을 처리하는 함수입니다.

성공할 시에는 INPlayMediaIntent를 반환합니다.

 

 

 

성공 시에 아래와 같이 시리에서 처리됩니다.

 

 

 

지금까지는 Intents Extension에서 INPlayMediaIntent Handling이었습니다.

데모에서는 INAddMediaIntent의 Handling도 조금 다루지만 첫번째와 비슷한 방법이기에 생략합니다.

 

 

 

데모 요약

 

 

 

3. Best Practices

Shortcuts에서는 resolve 함수는 필요하지 않고, handle과 background 앱 런치는 동일합니다.

 

 

 

WatchOS에서는 foreground에서 앱을 열고 WKExtensionDelegate에서 handle됩니다.

그리고 resolve 함수에서는 네트워크를 이용하지 ㅇ낳고 디바이스 캐시를 사용하는 것을 권장합니다.

 

 

 

Resolve에서 효과적인 검색 함수 작성하기.

곡 제목을 검색할 때 주의해야 할 흔한 엣지 케이스는 다음과 같습니다.

- 대소문자, 특수기호

 

 

 

-  유저는 피처링, 에디션 등을 말하지 않을 수 있다는 점

 

 

 

- 제목에 podcast가 들어가도 mediaType으로 분류된다는 점

 

 

 

- 같은 단어도 다양하게 포맷팅될 수 있다는 점

 

 

 

resolve메소드로 반환한 INMediaItem으로 시리가 무슨 대답을 할지 설정할 수 있습니다.

 

 

 

보통 앱에서 찾을 수 없는 음악일 때에 unsupported를 리턴합니다.

그 외에도 데이터가 필요하지만 없는 경우 또는 앱의 특정 조건을 만족하지 못한 경우의 오류가 있을 수 있습니다. 이는 INPlayMediaMediaItemUnsupportedReason의 리스트에 있습니다.

 

 

 

시리에게 사람들이 말할 수 있는 것은 다음과 같습니다.

- 지정되지 않은 미디어를 재생하는 요청

confirm 단계를 사용하지 않기에 무엇을 재생할지 묻기보다는, 추천 음악이나 유저의 관심 음악 중에 임의로 선택하는 것을 권장합니다.

 

 

 

- Playback 옵션

 

 

 

- 검색 옵션

최신순, 인기순, 추천순 정렬 옵션이 있습니다.

 

 

- INMediaReferenceCurrentlyPlaying

유저가 현재 듣고 있는 음악에 대해 라이브러리에 넣거나 좋아요 기능을 요청할 수 있습니다.

 

 

 

- User specified vocabulary

유저의 플레이리스트 명과 같은 vocabulary를 사용할 수 있습니다.

 

 

 

마치며

댓글