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を用いた登録
手順は以下です。
-
NSUserActivityTypes
をInfo.plistに登録する - アプリ内の処理で
NSUserActivity
をインスタンス化する -
title
、userInfo
、requiredUserInfoKeys
等、必要なプロパティ情報を設定する -
isEligibleForSearch
とisEligibleForPrediction
プロパティをtrue
にする -
persistentIdentifier
プロパティを一意になる文字列で設定する(NSUserActivityPersistentIdentifier
構造体として生成する必要がある) - Siriからあるフレーズを指定して起動したい場合、
suggestedInvocationPhrase
プロパティを設定する - コントローラオブジェクトのプロパティに 2. で作成した
NSUserActivity
を保持させる(※補足1) -
NSUserActivity
のbecomeCurrent()
メソッドを呼ぶ
上記でアクティビティの登録は完了です。
あとは、登録したアクティビティがタップされた時のハンドリング処理をAppDelegate
のapplication(_:continue:restorationHandler:)
メソッドに実装します。
上記の手順が完了するとSpotlight検索で検索をかけるとアクションが実行できるようになり、実行することでSiriのサジェストにも出てくるようになります。
※補足1:
Apple公式ドキュメントのNSUserActivity
の利用時の注意に対する対応です。
アクティビティやそのメタデータが確実にインデックスされるよう、実際にインデックスされるまでの間は、当該アクティビティに対する強い参照を保持していなければなりません。それには2つのやり方があります。ひとつは、アクティビティを生成するコントローラオブジェクトのプロパティに当該アクティビティをアサインする方法です。
参照:https://developer.apple.com/jp/documentation/General/Conceptual/AppSearch/Activities.html
INInteractionを用いた登録
手順は以下です。
- 提供したいアクションがSiriKitの「Intent Domains」にあるかを確認し、なければカスタムIntentを作成する(※補足2)
-
INIntent
継承クラスを作成する - 必要なパラメータ、画像を設定する
- Siriからあるフレーズを指定して起動したい場合、
suggestedInvocationPhrase
プロパティを設定する -
INInteraction
をインスタンス化し、 2. で作成したINIntent
継承クラスを渡す -
donate(completion:)
メソッドを呼び出し、Siriにショートカットを伝える
上記で登録は完了です。
あとは、ハンドリング処理をAppDelegate
のapplication(_: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