• 시리에게 어떻게 말을 전달하고, 시리가 어떻게 응답할 것인가?
    • 다양한 언어, 다양한 형식으로 전달될 수 있다.
    • 여러 앱들사이에서 일관성 있게 동작해야한다.
    • Speech - Intent - Action - Response 단계
  • 앱개발자 입장에서의 시리 실행 과정
    • Speech에서 Vocabulary가 추출된다.
    • Vocabulary를 분석해서 Intent를 구성한다.
    • Intent는 앱에서 처리된다.
    • 이후 시리의 UI에 뷰가 뜨게 된다.
  • 시리의 언어로 말하기
    • 도메인 기반
    • 알려진 동작들, 혹은 인텐트
    • 인텐트는 수행될 동작을 나타내며 0~n개의 파라미터를 가진다.
    • 인텐트는 앱에서 처리된 후, 응답 코드로 결과를 전달하게 된다.
  • 인텐트의 라이프사이클
    • Resolve: 인텐트를 만들기 위해 파라미터를 채우는 과정. 여러번 일어날 수 있고, 같은 파라미터도 여러번 채워질 수 있다.
      • 바로 ok혹은 확인 요청, 여러 후보 중 하나를 선택하도록 할 수 있음
      • 정보가 부족하다면 디테일한 정보 혹은 해당 값을 요구할 수 있음.
      • 처리할 수 없다면, 처리할 수 없다고도 응답 가능
      • 특정 값은 필요하지 않을 수 있고, 이를 체크하면 알아서 처리
    • Confirm: 인텐트를 확정
      • 여기서 확정을 위한 얼럿 형태의 UI를 띄울 수 있음
    • Handle: 실제로 결과를 처리하는 것
      • 사용자에게 최대한 피드백을 제공할 것
      • 네트워크 처리로 인해 시간이 많이 걸라면 시리가 로딩 UI를 처리할 수 있다.
  • 앱에 시리킷 추가하기
    • Intents 익스텐션
      • 시리킷의 근간
      • 1개 이상의 인텐트를 추가
      • 시리가 동작할 때 백그라운드에서 돌아감
      • 인텐트의 라이프사이클에 관여할 수 있는 메소드가 들어간다.
      • 잠겨 있는 동안은 실행되지 않도록 하거나, 잠금이 풀려있더라도 추가 인증을 요구할 수 있다.
    • intents UI 익스텐션
      • 시리에게 커스텀 UI를 제공하기 위한 수단
      • UIViewController 기반
      • 인터렉션은 불가능
    • 앱에서
      • 앱단어장
        • 앱은 각자 고유한 용어를 쓸 수 있다.
        • 메인 앱 번들에 plist 형태로 추가
        • 로컬라이징 권장
        • 형태
          • 유저의 사용 예제
          • 파라미터
            • 구체적인 단어
            • 발음
            • 앱에서의 해당 단어의 사용 예제
      • 유저 단어장
        • 특정 유저에게만 통용되는 단어
        • 용어들의 OrderedSet 형태로 제공 -> 이는 우선순위를 줄 수 있게 하기 위함
        • 추가 및 삭제 가능
      • 시리킷을 사용할 때는 사용자 권한을 물어봐야 함
  • 시리킷과 iOS는 긴밀하게 통합되어 있다.
    • Contact와 CallKit등과도 긴밀하게 연결되어 있다.
  • 앱 선택하기
    • 유저는 사용할 앱 이름을 말해야 된다.
    • 번들에 있는 displayName이 사용된다.
  • 디자인 가이드라인
    • 대화기반 인터페이스
      • 많은 부분을 자동으로 해주지만, 다양한 상황에서 올바르게 동작하도록 테스트할 것
    • 준비
      • 유저의 입장에서 볼 것: 유저는 개발자와 같지 않다.
        • 실제 사람이 어떻게 말하는 지 체크할 필요가 있다.
      • 유저의 요청을 최대한 살려라
        • 기본 값을 최대한 제공하라
        • 유저가 기대하지 않는 응답을 기본값으로 하지는 말 것
      • 최대한 간결하게 응답할 것
        • 필요한 것만 물어볼 것
      • 컨펌창이 필요하다면
        • 옵션수는 최대한 적게
        • 정말로 필요한지, 그렇게 큰 임팩트가 있는지 확인 할 것
      • 모호함 제거
        • 가짓수를 최대한 적게, 사용자가 제공한 정보를 이용해서 필터링
      • 필요하다면 커스텀 UI
        • 모든 사이즈에 대응
        • 최대한 간결하게, 중복되지 않도록
      • 예시는 최대한 간결하게, 기능에 집중
    • 무엇보다 반복적인 테스트만이 답