Edited at

Siri Shortcutsについて調べてみた【ショートカット登録編】

More than 1 year has passed since last update.

WWDC18で発表されたSiriのShortcuts機能についてリファレンスを参考に調べてみました。


概要

ユーザーの日常のルーチンを適切なタイミングでサジェストしてくれ、ショートカット実行させてくれる便利な機能です。

ロックスクリーン、Spotlight検索、SiriのApple Watchインターフェースから直接アプリのアクションを実行することができます。


Siri Shortcutsでできること


  • ショートカットの登録

  • ショートカットの削除

  • ショートカットフレーズの設定

  • Siriにユーザーが実行したい行動と関連したアクションであることを伝える


ショートカットの登録

リファレンスには以下のように書かれており、ユーザーがアプリ内のアクションを実行したタイミングで登録すべきとのことです。


You should donate shortcut after each time the user performs the action in your app.


ショートカットの登録は以下2つのどちらかを使います。

* NSUserActivity

* INInteraction


NSUserActivityを用いた登録

手順は以下です。



  1. NSUserActivityTypesをInfo.plistに登録する

  2. アプリ内の処理でNSUserActivityをインスタンス化する



    1. titleuserInforequiredUserInfoKeys等、必要なプロパティ情報を設定する


    2. isEligibleForSearchisEligibleForPredictionプロパティをtrueにする


    3. persistentIdentifierプロパティを一意になる文字列で設定する(NSUserActivityPersistentIdentifier構造体として生成する必要がある)

    4. Siriからあるフレーズを指定して起動したい場合、suggestedInvocationPhraseプロパティを設定する



  3. コントローラオブジェクトのプロパティに 2. で作成したNSUserActivityを保持させる(※補足1)


  4. NSUserActivitybecomeCurrent()メソッドを呼ぶ

上記でアクティビティの登録は完了です。

あとは、登録したアクティビティがタップされた時のハンドリング処理をAppDelegateapplication(_:continue:restorationHandler:)メソッドに実装します。

上記の手順が完了するとSpotlight検索で検索をかけるとアクションが実行できるようになり、実行することでSiriのサジェストにも出てくるようになります。

※補足1:

Apple公式ドキュメントのNSUserActivityの利用時の注意に対する対応です。


アクティビティやそのメタデータが確実にインデックスされるよう、実際にインデックスされるまでの間は、当該アクティビティに対する強い参照を保持していなければなりません。それには2つのやり方があります。ひとつは、アクティビティを生成するコントローラオブジェクトのプロパティに当該アクティビティをアサインする方法です。


参照:https://developer.apple.com/jp/documentation/General/Conceptual/AppSearch/Activities.html


INInteractionを用いた登録

手順は以下です。


  1. 提供したいアクションがSiriKitの「Intent Domains」にあるかを確認し、なければカスタムIntentを作成する(※補足2)


  2. INIntent継承クラスを作成する


    1. 必要なパラメータ、画像を設定する

    2. Siriからあるフレーズを指定して起動したい場合、suggestedInvocationPhraseプロパティを設定する




  3. INInteractionをインスタンス化し、 2. で作成したINIntent継承クラスを渡す


  4. donate(completion:)メソッドを呼び出し、Siriにショートカットを伝える

上記で登録は完了です。

あとは、ハンドリング処理をAppDelegateapplication(_:continue:restorationHandler:)に実装します。

※補足2:Intentの作成

https://developer.apple.com/documentation/sirikit/creating_an_intents_app_extension


参考

Donating Shortcuts:https://developer.apple.com/documentation/sirikit/donating_shortcuts