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