ユーザーがアプリで実行したアクションを行うショートカットを、Siriにドネートします。
概要
アプリでユーザーが実行したいアクションをSiriが予測し、そのショートカットをSpotlight検索画面、ロック画面、Apple WatchのSiriの文字盤でユーザーに提示することができます。Siriはアプリがドネートする情報を使って、アプリで利用可能なショートカットを学習していきます。ユーザーは、パーソナライズした音声フレーズをSiriに追加して、ドネートされたショートカットを呼び出すこともできます。Siriへのフレーズ追加について詳しくは、ショートカットの管理(英語)を参照してください。
適切なタイミングでショートカットをドネートする
ユーザーがアプリでアクションを実行するたびにショートカットをドネートします。ユーザーがアクションを実行したときに、1つのアクションについて1回だけドネートを行います。ユーザーが再び同じアクションを実行した場合は、もう1回ドネートします。たとえば、ユーザーがアプリを使ってレストランのスープを注文できる場合、ユーザーが注文した後に「order soup」アクションのショートカットをドネートします。ユーザーが別の注文をした場合は、もう1回「order soup」をドネートします。
ただし、ユーザーがアクションを実行した時に、1つのアクションについて複数のショートカットをドネートしないでください。また、アプリでユーザーが完了していないアクションについてはドネートしないでください。ユーザーがスープを一度も注文していない場合は、「order soup」アクションのショートカットをドネートしないでください。
メモ
Siriの文字盤にショートカットを表示させるには、ショートカットを関連するショートカットとして保存します。詳しくは関連するショートカット(英語)を参照してください。
アプリは、以下のいずれかのオブジェクトを使用してショートカットをドネートできます。
-
NSUser
(英語)。銀行アプリで最近の取引を表示するなど、アクションにアプリ内のビューが関係する場合は、ユーザーアクティビティを使ってショートカットをドネートします。Activity -
INInteraction
(英語)。スキーやスノーボードのトラッキングアプリでアクティビティを記録するなど、アクションにユーザーが達成したタスクが関係する場合は、インタラクションを使ってショートカットをドネートします。
ユーザーアクティビティをドネートする
NSUser
(英語)は、ドネート向けに、HandoffやSpotlight検索といったAppleのほかの機能とも統合する軽量なアプローチを提供します。
NSUser
(英語)を使用してドネートするには、Info.plistのNSUser
配列でタイプとしてアクティビティを定義します。アクティビティタイプは、リスト内で一意の逆ドメイン名でなければなりません。
アプリ内でNSUser
(英語)のインスタンスを作成し、そのtitle
(英語)、user
(英語)、およびrequired
(英語)に、アプリが後でそのアクティビティを再開するために必要な情報を設定します。 また、is
(英語)プロパティをtrue
に、persistent
(英語)を一意の文字列に設定します。これは、ドネートした情報を削除するために必要です(ドネートしたショートカットの削除を参照)。ユーザーアクティビティでsuggested
(英語)プロパティを設定すると、ユーザーがSiriにフレーズを追加する際に使用できる音声フレーズも提案できます。
次に、ユーザーアクティビティオブジェクトでbecome
(英語)メソッドを呼び出して「現行」アクティビティとしてマークします。これによってアクティビティがSiriにドネートされます。別の方法として、オブジェクトをUIView
(英語)またはUIResponder
(英語)オブジェクトに追加することもできます。この場合も、アクティビティが「現行」としてマークされます。
後でアクションをハンドルするため、アプリデリゲートでapplication(_:
(英語)メソッドを実装します。
インタラクションをドネートする
INInteraction
(英語)オブジェクトを使用してドネートすることもできます。このタイプのドネートでは、ユーザーがアプリで行いたいアクション(またはタスク)を表すIntentとのインタラクションをドネートします。このタイプのドネートは、ユーザーアクティビティを使用したドネートと比較して、ドネートされた情報をSiriがIntentパラメータに分解でき、よりインテリジェントな予測が可能になるというメリットがあります。
ソースコードを検討する前に、システムによって提供されたIntentのリストに目を通し、アクションに適したものがあるかどうか確認してください(Siriのドメイン(英語)を参照)。アクションを最も適切に記述するIntentを使用し、適切なものがない場合はカスタムインテントを作成してください。
Intentをドネートするには、Intentクラスのインスタンスを作成します。パラメータ値を設定し、必要に応じてパラメータに画像を追加します。ユーザーがSiriに追加する音声フレーズを提案するため、Intentのsuggested
(英語)プロパティを、フレーズを含む文字列に設定します。
重要
Siriは、Intent Definition Fileを読んで、アプリが予測に関してサポートするIntentとパラメータの組み合わせを判断します。Siriが最適な提案を行えるように、アプリがサポートするすべてのIntent(システム提供のIntentおよびカスタムインテント)とそのパラメータの組み合わせをIntent Definition Fileに追加してください。
Intentを作成した後、INInteraction
(英語)のインスタンスを作成し、Intentを渡してそのdonate(completion:)
(英語)メソッドを呼び出します。これによって、ショートカットに関する情報がSiriに伝わります。
ショートカットをハンドルするため、アプリデリゲートでapplication(_:
(英語)メソッドを実装します。アクションをハンドルする時になると、システムがアプリを開きます。ショートカットをハンドルするたびにアプリを開く必要がない場合は、ユーザー体験を向上させるため、アプリにIntents App Extensionを提供します。アプリを開かなくても、このExtensionがバックグラウンドでショートカットをハンドルするので、Siri内でより豊かな体験を提供できます。Intents App Extensionについての詳細は、Intents App Extensionの開発を参照してください。
Intents App Extensionを提供する場合も常に、application(_:
(英語)メソッドをアプリデリゲートに実装する必要があります。Siriでショートカットをタップする、といった特定のユーザーアクティビティによってアプリが開き、ユーザーはアプリがショートカットをハンドルすることを期待します。たとえば、アクションを完了するにはアプリがユーザーから追加情報を得る必要がある場合など、バックグラウンドで実行できないショートカットをハンドルするのは、アプリ側の責任です。