본문 바로가기
WWDC

[WWDC16] Introducing SiriKit

by 고고 2022. 5. 2.

유튜브 링크: https://www.youtube.com/watch?v=Cce5UglhPAo&t=963s 

 

 

SiriKit으로는 아래같은 시리 기능을 지원할 수 있습니다.

 

 

 

Speech 단계에서는 말을 듣고 유저가 하려는 것을 Intent로 추출합니다.

이 Intent를 가지고 앱에서 Action을 수행합니다.

Action을 수행한 후 Response를 UI로 제공합니다.

출처:https://www.youtube.com/watch?v=Y4jdJGlXKL4

 

1. Speech를 받습니다.

 

 

2. Speech를 Intent로 변환하여 App Logic을 수행합니다.

 

 

3. 필요한 경우 UI를 제공합니다.

 

 

Siri는 Messaging, VoIP calling, Payments, Workouts, Ride booking, Photos, List and Notes, Visual Code, Car Command, CarPlay, Restaurant Reservations 도메인에서 동작합니다.

 

 

SiriKit은 Intent라는 동작을 인식하고, 그에 필요한 파라미터들을 받습니다. 

아래 예시에서는 도메인이 Payments이고, Intent는 sendPayment, Intent의 파라미터로는 App, Payee, Amount, Currency, Note가 있습니다.

 

Intent는 수행될 동작이고, 파라미터가 있을 수 있습니다. 도메인에 정의되어 있습니다.

 

 

 

IntentResponse는 Intent의 결과입니다. 성공인지 실패인지 결과 코드를 담고 있습니다. 또한 NSUserActivity를 이용해 시리를 떠나 앱으로 돌아갔을 때 액션을 취할 수 있습니다. AppDelegate에서 NSUserActivity를 받아볼 수 있습니다.

 

 

Intent의 Lifecycle(생명주기)입니다.

Resolve에서는 유저가 제공한 값을 시리가 이해합니다.

Confirm에서 intent의 예상되는 결과값을 말해주어 한번 더 확인합니다.

Handle에서 요청된 결과를 수행합니다.

 

 

1. Resolve

Resolve의 과정에서 동작을 수행하기 위한 파라미터를 파악하여 파라미터가 다 있다면 success를, 부족하다면 failure를 줍니다.

 

유저의 요청에 따라 응답하는 값이 다릅니다.

 

 

예를 들어 disambiguation은 아래 목록같이 리스트를 띄워 유저가 고르게 할 수 있습니다.

 

 

2. Confirm

Confirm에서는 필요한 상태를 체크하고 Intent Response를 제공합니다. 

 

 

아래 예시에서는 서비스 서버가 정상적으로 돌아가고, 유저가 로그인해있고, 충분한 파라미터가 있는지 확인하여 IntentResponse를 제공합니다.

 

 

3. Handle

요청된 액션을 수행하고 그 결과를 알려줍니다.

 

 

SiriKit에는 Intents extension과 Intents UI extension이 있습니다.

또한 유적 하는 말을 인식하기 위한 App vocabulary, User vocabulary가 있습니다.

 

 

Intents Extension에서는 Intents를 지원합니다.

Siri가 활성화되어있을 때 백그라운드에서 돌아갑니다.

Resolve, Confirm, Handle단계를 구현합니다.

 

 

또 Intents Extension에서 Info.plist를 통해 잠겨있을 때에 제한을 둘 수 있습니다. 그 외에 Local Authentication framework, Apple Pay가 사용가능합니다.

 

 

Intents UI extension은 옵셔널입니다. UIViewController를 제공하고 앱의 인터페이스를 시리를 통해 가져옵니다. 확실한 intent를 위해 사용 가능합니다.

 

 

Vocabulary에는 App-specific과 User-specific으로 나누어져 있습니다. 시리가 단어와 구문을 이해하기 위한 보조입니다.

 

App-specific vocabulary는 앱의 단어와 구문입니다. 앱의 모든 유저들에게 알려져 있어야 하고 plist에 정의됩니다. 

 

 

plist에는 사용 예시, 파라미터의 구문, 발음, 예시가 있습니다.

 

 

User-sepeific vocabulary는 유저 개인에게 특화되어 있는 구문들입니다. OrderedSet을 사용합니다.

 

예를 들어 연락처가 있을 때 즐겨찾기, 최근 연락처, 다른 연락처 순으로 우선수위를 둘 수 있습니다.

 

 

보통 연락처, 운동 이름, 앨범, 포토 키워드 등을 저장합니다. 

필요한 값들만 제공해야 하고 변화가 있을 때 데이터를 갱신해야 합니다.

 

 

앱을 처음 열면 아래 사진과 같은 권한 허용 alert를 띄웁니다. 무슨 데이터가 시리에게 가는지 설명해야 합니다.

 

 

이 이후로는 좋은 시리 경험을 위한 디자인입니다.

 

1. 홈버튼을 길게 눌러 시리를 호출했을 때

 

 

2. 음성으로 시리를 호출했을 때

상위 3가지 reminder를 읽어줍니다.

홈버튼을 누른다는 의미는 핸드폰을 볼 수 있는 상황일 가능성이 크고, 음성으로 시리를 호출한다는 것은 핸드폰을 볼 수 없는 상황일 가능성이 있기 때문에 두 방식의 차이가 있습니다.

 

 

 

시리가 당신을 돕는 방법입니다.

시리는 여러 다른 요청을 테스트할 수 있습니다. 또한 핸즈프리(손을 사용하지 않는 상황) 등 여러 상황에서 테스트할 수 있습니다. 당신이 시리에 정보를 제공하면 시리가 유저에게 정보를 제공해줍니다.

 

 

다음은 디자인 가이드라인입니다.

 

1. 준비하기

유저는 그동안 개발하며 여러 지식이 있는 당신과 같지 않습니다.

따라서 실제 사람들에게 어떠한 질문을 할 것인지 물어보는 것이 좋습니다.

 

 

2. 좋은 청취자 되기

예를 들어 00까지 가는 택시 호출해줘. 라고 요청했을 때 도착지의 기본값은 현재 주소이겠죠. 따라서 좋은 기본값을 골라야 합니다. 나쁜 기본값(너무 비싼 택시로 호출된다던지..)로 유저를 놀라게 하는 것을 피합시다.

 

3. 질문하기

 

 

확인하기

 

명확하게 하기

 

 

마지막으로 확인하기

 

4. 요청에 대답하기

 

 

커스텀 UI

 

 

앱에서는 follow up 액션을 지원하되 유저를 놀라게 하지 않고 필요한 동작만 수행해야 합니다.

 

 

 

시리에게 What can you do? 라고 물어보면 아래와 같이 가능한 목록을 보여줍니다.

 

 

이것을 Guide Example라고 합니다.

 

 

Guide Examples에는 앱 이름을 포함하고, 짧게 유지하고, 각각의 intent에 대한 여러 예제를 제공하는 것이 좋습니다.

 

 

Hey Siri, Would you please 등 불필요한 구문은 빼고 기능에 집중하는 것이 좋습니다.

 

 

 

경험을 반복하세요.

 

 

 

마치며.

SiriKit, Extensions, Intens, Vocaulary, 대화 디자인에 대해 이야기했습니다.

댓글