Edited at

SiriKitを試してみた集

More than 1 year has passed since last update.

SiriKitで実装できること6つを試してみた。

実際のイメージと(SiriKitを初めて触ったので、)基本的なことを記述しました。

試してみた6つのドメイン(以下の機能を持つアプリがSiri連携できる)


  • audio-video calling(通話機能のあるアプリ)

  • messaging(メッセージ、チャット機能のあるアプリ)

  • payments(支払い機能のあるアプリ)

  • photo-library(写真のライブラリーを使用するアプリ)

  • workout(ワークアウトをするアプリ)

  • ride-booking(乗車予約を管理するようなアプリ)


SiriKitはこんな感じで使える


Audio-Video calling

Siriから通話アプリの電話をかける。

INStartAudioCallIntent


INStartAudioCallIntent pic.twitter.com/9UKchTDVqS

— njcrd (@njc_rd) 2017年2月13日

Audio-Video callingでできること


  • 音声通話を開始する

  • ビデオ通話を開始する

  • ユーザーの通話履歴を検索する


Messaging

Siriから、チャットアプリでメッセージを友達に送る。

INSendMessageIntent


INSendMessageImtent pic.twitter.com/O5zFLadGhl

— njcrd (@njc_rd) 2017年1月20日




Messagingでできること(公式ドキュメントより)


  • メッセージを送る

  • メッセージを検索する

  • メッセージの属性をセットする(既読にするなどのアクション)


Payments

Siriから、アプリの中の支払処理をする。(ApplePayなど)

INSendPaymentIntent


INSendPaymentIntent pic.twitter.com/TYVvFb935w

— njcrd (@njc_rd) 2017年1月20日




Paymentsでできること


  • 他のユーザーに支払いをする

  • 他のユーザーへ支払い要求をする


Photo-library

Siriからフォトライブラリーの中の写真をある条件(日付)で探す。

INSearchForPhotosIntent


INSearchForPhotosIntent pic.twitter.com/sPntN6GGxb

— njcrd (@njc_rd) 2017年2月13日




Photo-Libraryでできること


  • 写真を検索する

  • 写真のスライドショーを再生する


Workout

Siriからウォーキングを開始する。

INStartWorkoutIntent


INStartWorkoutIntent pic.twitter.com/ix9gdbj7zV

— njcrd (@njc_rd) 2017年2月13日

Workoutsでできること


  • ワークアウトを開始する

  • ワークアウトを中断する

  • ワークアウトを再開する

  • ワークアウトを終了する

  • ワークアウトをキャンセルする


Ride-booking

Siriから、乗車手配をする。(Mapアプリからも行える。)

INRequestRideIntent


INRideSharingDomainHandling pic.twitter.com/ZxxpTWtDLy

— njcrd (@njc_rd) 2017年1月20日

Ride-bookingでできること


  • 利用可能な乗り物のリストを取得する (Mapsアプリのみ)

  • 乗車予約する

  • 乗車予約のステータスを確認する


SiriKit基礎まとめ


SiriKitとは

以下の2つのフレームワークで構成されるAppExtensionの一つ。



  • Intents Extension: Siriでユーザーが行いたいことを判断し、処理する(必須)


  • IntentsUI Extension: Siri, Mapsアプリのインターフェースをカスタマイズできる(オプショナル)

6種類の機能を含むアプリをSiriから会話を通して処理を行うよう機能拡張できる。


  • audio-video calling (通話機能のあるアプリ)

  • messaging (メッセージ、チャット機能のあるアプリ)

  • payments (支払い機能のあるアプリ)

  • photo-library (写真のライブラリーを使用するアプリ)

  • workout (ワークアウトをするアプリ)

  • ride-booking (乗車予約を管理するようなアプリ)

例えば、自分で音楽アプリを開発していて、「Siriから気分に合わせて、音楽を再生させたい!」など、自由なことはできない。(今のところ)


Siriがどう動くか

スクリーンショット 2017-01-19 9.20.38.png

処理の流れ


  1. ユーザーがSiriに話しかけた内容を理解する(audio→text変換)。

  2. ユーザーが言ったことから、その意図(intent)を理解する。

  3. ユーザーがしてほしいことを処理するためのアクションを行う。

  4. 視覚、会話の両方でレスポンスを提供する。

アプリ側で用意するもの



  • Vocaburaly(語彙):各フェーズで用意しなければならないのは、Siriがユーザーの意図を理解するために必要(1、2)


  • App Logic(アプリのロジックの実装):ユーザーの意図する処理を行うために必要(3)


  • UI Design(デザイン):アクションのレスポンスをSiri上に表示するために必要(4)


SiriKit用語


ドメイン(domain)

Siriはドメインというアイディアの中で全てを考える。


"At a high level, Siri thinks about everything in the idea of a domain."

(Introduction to SiriKit @WWDC2016)


ドメインは、具体的には、SiriKitで実装できる機能のこと。

現在は、SiriKitが実装できるのは以下の6つ。


  • audio-video calling(通話機能)

  • messaging(メッセージ、チャット機能)

  • payments(支払い機能)

  • photo-library(写真のライブラリーを使用)

  • workout(ワークアウト)

  • ride-booking(乗車予約管理)

この他、CarPlayとRestaurant Reservationが用意されているが、使用に制限あり。(詳しくは、AppleのSiriKit公式ドキュメント


インテント(intent)

英訳すると、「意図」、「趣旨」といった意味。

インテントとは、Siriが理解、アプリとやりとりできるアクションのこと。


"An intent describes a known action that Siri understands and can communicate to your app."

(Introduction to SiriKit @WWDC2016)


各ドメイン毎にいくつかのインテントが存在し、Siriはユーザーが言ったことからどのインテントを使用するか判断する。


パラメーター(parameters)

全てのインテントにはパラメーターが含まれている。

実際に処理を行う際に用いる、値のこと。

例えばSiriに以下のように尋ねてみる。

「Hey Siri、UnicornPayButtercuprainbow polishの代金$85を送って」

SiriはPaymentsドメインの中の支払いを行うためのインテントだと理解し、内容から処理に必要なパラメーターを取得する。

<上の文章から取得できるパラメーター>

UnicornPay → アプリ名

Buttercup → お店の名前

rainbow polish → 支払うサービスの名前

$85 → USドル


インテントをどう扱うか

Siriは、データを集め、それらを処理するintentsオブジェクトに変化させることでユーザーのリクエストを操作する。

ユーザーが喋った内容から、どのインテントで処理するかの判断はSiriが行うが、Siriを通して実行したい処理は実装する必要がある。

使用するインテント毎に、Resolve、Confirm、Handleメソッドが用意されている。



  • Resolve(解決): ユーザーの意味することを理解する段階。


  • Confirm(確認): アプリがユーザーがリクエストするインテントを処理することができるか確認する段階


  • Handle(処理): ユーザーがリクエストする特定のアクションを処理する段階

使用するインテント毎に、Resolve、Confirm、Handleメソッドが用意されている。

Handleメソッドは必ず実装しなければならないが、Resolve、Confirmは必須ではない。(実装が強く推奨されている)