티스토리 뷰

반응형

(본 글은 iOS 10기준으로 작성되었습니다.)


안녕하세요 :) Zedd입니다.

오늘은 SiriKit을 사용해볼거에요. 

ㅎㅎ..저도 처음 써보는거라..떨리네요.

그래서 왕초보를 달았습니다ㅎㅎ

일단 시작하기 전에..Siri에 대해 간단하게 알아봅시다.

사실, 시리가 알아듣는다면 아무것도 없는 앱도 시리가 "열어준답니다".

열어만 준다고 하는게 맞겠네요. 



제디오스라는 앱을 급하게 만들었어요. "제디오스"라는 이름을 가진 앱은 정말 방금 만든 정말 아무것도 없는, 프로젝트가 만들어진 그 상태 그대로 폰에 올린상태에요.

그리고 이제 시리한테 부탁합니다.



그러면 이렇게 시리가 "제디오스"라는 앱을 가진 앱을 열어줍니다.



정말 아무것도 안해도 열어는 줍니다.

단, 시리가 알아들어야 열어줍니다.......ㅎㅎ...제가 굳이 한글로 앱 이름을 지은 이유도...영어는 잘 못알아듣는것 같더라구요....제 발음이 이상한....건..

크흠



분명히 페이코(빠르게) 열어줘 라고 했는데도...페이 코 라고 알아듣네요..

아무튼 제 폰에 있는 앱들로 많이 해보니까, 알아들어서 열어주는 앱들도 많지만 못알아듣는 앱들도 많더라구요.


이건..모르시는분들을 위해서 설명드렸습니다. 저는 SiriKit을 앱에서 사용해야지만 Siri가 열어주는줄...

그럼 SiriKit으로는 뭘 할 수 있을까요?



바로 이런것을 할 수 있는 것이죠.

뭔가 이걸 말로 ㅇ어떻게 해야하는건지 모르겠지만, 뭔가 위에처럼 뭔가 동작을 할 수 있게 하려면 SiriKit을 사용해야합니다.


SiriKit도 사용안했는데 Siri로 앱을 동작?..어떠한 기능을 수행하라고 하게 한다면



ㅠㅠ

그래서 오늘은...! SiriKit을 사용해서 저 "제디오스"앱의 어떤 기능을 Siri가 해주게 만드는 것이 목표입니다ㅎㅎ..

자, 그럼 얼른 Siri와 동작하는 앱을 만들고 싶지만..! 

SiriKit에 대해서 먼저 알아볼거에요.


왕초보를 위한 SiriKit사용해보기 - SiriKit알아보기



<Sirikit>에 가시면 아주 친절하게 한글로...!!

SiriKit에 대해서 설명해주고 있네요. 


SiriKit은 iOS 10 앱과 Siri를 연동시켜 사용자가 음성만으로 콘텐츠와 서비스를 통해 작업을 실행할 수 있습니다. SiriKit은 Siri가 더 많은 앱에서 메시지 전송, 사진 검색, 전화 통화를 지원하도록 확장할 뿐 아니라 차량 예약 및 개인 송금 등과 같은 새로운 서비스 지원도 추가합니다.


여기서 알 수 있는 사실. 

SiriKit은 iOS 10부터 사용가능하다!!


여기는 SiriKit에 대한 도큐먼트입니다.

간단하게 살펴봅시다. 


먼저, SiriKit은 2가지의 프레임워크를 포함하고 있어요. 

첫번째는 intents, 그리고 intents UI 프레임워크죠.

intents App extension은 SiriKit에서 사용자의 요청을 받고, 앱의 특정 작업으로 전환합니다.

예를들어, 사용자가 Siri에게 메세지를 보내거나, 여행을 예약하거나, 앱을 사용하여 운동을 시작하도록 요청 할 수 있습니다.

간단하게 말해서 intents 프레임워크는 우리의 앱과 시스템의 커뮤니케이션을 도와주는 프레임워크입니다.


intents UI 앱 extension은 디게 어렵게 설명이 되어있는데, 간단하게 말해서



저기있는 UI들을 커스텀하게 만들 수 있도록 도와주는 프레임 워크 입니다.

intents UI은 옵션사항이라 해도 되고 안해도 되고 ~.~




여기까지 정리하자면, SiriKit은 iOS 10부터 사용가능하고, intents와 intents UI프레임워크를 사용해야 한다네요.


intents와 intents UI프레임워크만 사용하면 SiriKit으로 다 할 수 있느냐?

아닙니다.

SiriKit으로는 할 수 있는 동작의 범위가 정해져있는데요..!!


VoIP Calling - 통화를 시작하고 사용자의 통화 기록을 검색 할 수 있음.

● Messaging - 메세지를 보내고 사용자의 받은 메세지를 검색 할 수 있음.

● Payments - 사용자끼리 돈을 보내거나, 청구서를 지불 할 수 있음.

● Lists and Notes - 메모 및 할일 목록을 만들고 관리함.

● Visual Codes - QR코드를 사용하여 연락처 및 지불정보를 전달 할 수 있음.

● Photos - 사진을 검색하고 보여줄 수 있음.

● Workouts - 피트니스 루틴을 시작, 종료 및 관리

● Ride Booking - 탈것을 예약할 수 있음.

● Car Commands - 차량 문 잠금장치를 관리하고 차량의 상태를 확인할 수 있음.

● CarPlay - 차량의 CarPlay 시스템과 상호작용 할 수 있음.

● Restaurant Reservations - 지도 앱의 도움을 받아 레스토랑 예약을하고, 관리할 수 있음


 이것이 바로 intents Domain인데요. SiriKit으로 할 수 있는 것들이에요.


그럼 도대체 SiriKit은 어떻게 동작하냐?


바로 이렇게 동작합니다.

하나하나 설명드릴게요.


먼저, WWDC 

Introducing SiriKit을 번역..?할거에요.

SiriKit이 어떻게 상호작용하는지등에 대한 원리를 잘 설명해주고 있어요. 영상을 보고 싶은 분들은 위 링크를 타고 가주세요 :)

아래 그림들은 위 링크의 PDF파일에서 가져온거에요! 무려 319페이지zzzzzzzzzz
자, Siri에게 말을 걸었을 때, Siri가 하는 일들을 살펴봅시다. 



Siri가하는 첫 번째 일은 사용자가 말한 것을 이해하는 것입니다. Siri는 유저의 Speech를 오디오로 읽어들여, 그것을 Text로 바꿉니다.



그런 다음 텍스트를 가져 와서 사용자가하려고하는 것의 구조화 된 표현으로 변환합니다. 이는 intent라고 부릅니다.



intent를 기반으로, Siri는 유저의 요청을 수행하기 위해 Action을 취합니다.



그리고 나서, 시각적으로나 구두적으로 Response를 제공합니다.


이 4단계에는 많은 딥러닝 기술이 들어가있다고 해요.
convolutional neural network(콘볼루션 신경망)도 있다고 합니다.

이 사이사이에 이제 뭔가가 들어가게 되는데, 방금까진 Siri가 하는일을 알아보았죠?

이제는 app이 하는 일을 알아볼거에요. 


먼저 Vocabulary

Vocabulary는 앱이 Siri와 상호 작용할 때 알아야하는 단어를 앱에 알려주는 방식입니다


자 다음 두번째로는


App Logic입니다. 

이것은 앱의 기능(functionality)으로, 앱이 주어진 intent를 기반으로 취할 Action과 Response입니다.

그리고 마지막으로,

User Interface.

이것은 앱이 Response를 줄 수있는 선택적인(optional) 커스텀 유저 인터페이스입니다. 위에서 intents UI는 선택사항이라고 그랬죠?



이제 Siri가 하는일, App이 하는일 따로따로 봤으니

둘이 같이 봐봅시다.

여기서는 UnicornChat이라는 앱을 사용해서 예를 듭니다. 메시지를 보낼 수 있는 앱이에요. 

사용자는 Siri에게 말하죠. 

"Hey Siri, UnicornChat메세지를 Zedd에게 보내줘"


자, 여기서 Siri는 Zedd라는 이름을 데이터베이스에 가지고 있지는 않지만, 앱은 어휘(Vocabulary)를 통해 이 정보를 공유합니다.

또한 앱은 Siri가 "Zedd"가 "수신인(recipient)라는 것을 인식하도록 도와줍니다. "Zedd"가 연락처에 있기때문이죠.

이제, Siri는 recipient. 즉 Zedd에게 메세지만 보내면 됩니다.

처음에 사용자가 "Hey Siri, UnicornChat메세지를 Zedd에게 보내줘"라고 그랬죠?

Siri는 UnicornChat의 App extension을 확인합니다. 메세지를 보낼 수 있는지요!

만약 UnicornChat이 메세지를 보낼 수 있다면, Siri는 사용자에게 질문할거에요.


"Zedd에게 뭐라고 보낼까요?"


그럼 이제 사용자가 말하겠죠.

"뭐해?라고 보내줘"


그러면 이제, app이 할 일은 사용자가 말한 제약조건(constraints)을 기반으로 각각의 파라미터를 분류하고 정렬하는 것입니다. 

자, 다음으로 일어나는 일은 Siri는 모든 정보를 객체로 구조화 하는 것입니다. 

구조화된 intent는 다음과 같은 정보가 포함됩니다.


Domain : 메세지

Intent : sendMessage

Recipient : Zedd

Content : 뭐해?


그런다음, 구조화된 intent는 App extension으로 전송되어 처리됩니다.

intent를 처리하는 과정에서, intent는 intent와 연동되는 intentResponse를 생성하고, intent와 연동된 app을 설명하는 매개변수를 포함합니다. 

각 intentResponse에는 App이 요청을 완료할 수 있는지 여부를 Siri에 알리는 Response Code도 포함됩니다. 

일부 Domain에는 전송할 수 있는 매우 구체적인 오류 응답 코드가 있습니다. 



그리고 그 과정에서 Siri는 사용자를위한 사용자 인터페이스를 제공합니다.


그 다음은 intent의 life cycle입니다. 

intent를 다룰 때, App Extension이 수행해야하는 세 가지 기본 작업이 있습니다. 이건 Siri가 하는게 아니라, app이 하는 일이에요. 

Resolve, Confirm, Handle이죠.

하나씩 살펴봅시다. 

Resolve : Siri가 사용자가 제공 한 값(value)을 이해하도록 돕습니다.

앱은 이벤트의 모든 매개변수를 해결(Resolve)해야 합니다. 결과적으로 앱은 Resolve를 여러번(각 매개변수 당 한 번) 호출하며, 앱과 사용자가 요청되는 내용에 동의 할 때 까지 동일한 매개변수에서 여러번 호출 할 수 도 있습니다. 

Confirm : 앱은 요청된 intent를 처리할 수 있는지 확인(Confirm) Siri에게 예상결과에 대해 알려야합니다.

Handle : 마지막으로, 앱은 intent를 처리(Handle)하고 요청된 결과를 달성하기 위한 단계를 수행해야합니다. 



역시 글로만 하면 잘 모르겠네요..다음 글은 진짜 Siri extension을 사용해볼게요!!

구조화된 intent도 볼거고.. 

SiriKit너무 어렵네요 XD..

오늘도 도움이 되었길 바라며 안녕~.~




반응형