Upgrade to Pro — share decks privately, control downloads, hide ads and more …

NewsPicksで音声入力SiriKitを試してみた

 NewsPicksで音声入力SiriKitを試してみた

Ippei Fukuyori

August 29, 2016
Tweet

Other Decks in Programming

Transcript

  1. SiriKit (Intents, Intents UI) • SiriKitというフレームワークはない • IntentsとIntents UIというフレームワーク ◦

    Intents … Siriからの入力(Intent)を受け取り、処理を行い、処理結果を返す ◦ Intents UI … Intentsで返した処理結果を独自の UIで表示する • 単体のアプリとして実装するのではなくApp Extensionとして既存のアプリ(本体ア プリ)に組み込む 引用: https://developer.apple.com/library/ios/documentation/General/Conceptual/ExtensibilityPG/ExtensionOverview.html Siri NewsPicksSiriExtension NewsPicks
  2. Intents Domain • サードパーティアプリでSiriKitが利用できるシーンは限られている (Siriが反応するフレーズがあらかじめ決められている) • 6つのIntents Domain、16のUser Intention Intents

    Domain User Intention(やれること) VoIP Calling 音声通話・ビデオ通話の開始、通話履歴の検索 Messaging メッセージの送信・検索 Photo Search 写真の検索、スライドショーの再生 Payments 他のユーザーへの支払い、支払い要求 Workout ワークアウトの開始・終了など Ride booking 乗車予約、予約状況の確認
  3. Intents Domain • サードパーティアプリでSiriKitが利用できるシーンは限られている (Siriが反応するフレーズがあらかじめ決められている) • 6つのIntents Domain、16のUser Intention Intents

    Domain User Intention(やれること) VoIP Calling 音声通話・ビデオ通話の開始、通話履歴の検索 Messaging メッセージの送信・検索 Photo Search 写真の検索、スライドショーの再生 Payments 他のユーザーへの支払い、支払い要求 Workout ワークアウトの開始・終了など Ride booking 乗車予約、予約状況の確認 →独自のIntentを  追加することはできない
  4. Intents Domain • サードパーティアプリでSiriKitが利用できるシーンは限られている (Siriが反応するフレーズがあらかじめ決められている) • 6つのIntents Domain、16のUser Intention Intents

    Domain User Intention(やれること) VoIP Calling 音声通話・ビデオ通話の開始、通話履歴の検索 Messaging メッセージの送信・検索 Photo Search 写真の検索、スライドショーの再生 Payments 他のユーザーへの支払い、支払い要求 Workout ワークアウトの開始・終了など Ride booking 乗車予約、予約状況の確認 なんとなくニュースの 検索に使えそう 差出人 →配信メディア 受信日時 →ニュースの配信日時
  5. Siriがやってくれること1 - Message Intents • ユーザーの言葉を適切に(?)解釈し、要素に分解し、Intentオブジェクトに変換す る 「NewsPicksでソフトバンクが含まれるメッセージを検索」   アプリ名   検索キーワード   

     User Intention ◦ 実際には「ソフトバンクが」が検索キーワードとして認識される ◦ 「メッセージを検索」ではなく「ニュースを検索」にしたいがニュースのドメインは提供されていないの で、アプリで処理されず Web検索が行われる
  6. Siriがやってくれること2 - Message Intents • 処理を行うための情報が足りない場合、インタラクティブに追加情報を取得する Siri: 「どなたからのメッセージを検索しますか?」 あなた: 「渡辺さん」

    Siri: 「どなたからのメッセージを検索しますか?」 あなた: 「日経」 Siri: 「私には"日経"はわかりませんでした。」 →ニュースなのでメディア名を差出人として指定したいが、  Siriは「日経」さんを人として認めてくれない
  7. • ターゲット追加 ◦ アプリとしてではなく、 App Extensionとして動作する • Info.plistに追加 • ハンドラ(実際の処理)を実装

    実装方法 メッセージを送信する 最初に呼ばれるメインクラス →Intentのタイプによって  ハンドラを振り分け メッセージを検索する
  8. IntentHandlerの振り分け • INExtensionクラスを継承 • INExtensionはINIntentHandlerProvidingプ ロトコルの実装クラス • 複数のDomainをサポートする場合でも全て このメソッドが呼ばれる •

    今回はメッセージを検索する Intentをサポー トするので、入力は INSearchForMessagesIntent • 返すIntentHandlerは INSearchForMessagesIntentHandlingを実 装したクラス(SearchMessageHandler) • Xcodeが生成するサンプルコードは、ひとつ のクラスに全て実装されているが、 Intent毎 あるいはDomain毎にクラスをわけた方がい いと思う