記事

ショートカットのドネート(donate、提供)

ユーザーが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」アクションのショートカットをドネートしないでください。

Appは、以下のいずれかのオブジェクトを使用してショートカットをドネートできます。

  • NSUserActivity(英語)。銀行Appで最近の取引を表示するなど、アクションにApp内のビューが関係する場合は、ユーザーアクティビティを使ってショートカットをドネートします。

  • INInteraction(英語)。スキーやスノーボードのトラッキングAppでアクティビティを記録するなど、アクションにユーザーが達成したタスクが関係する場合は、インタラクションを使ってショートカットをドネートします。

ユーザーアクティビティをドネートする

NSUserActivity(英語)は、ドネート向けに、HandoffやSpotlight検索といったAppleのほかの機能とも統合する軽量なアプローチを提供します。

NSUserActivity(英語)を使用してドネートするには、Info.plistNSUserActivityTypes配列でタイプとしてアクティビティを定義します。アクティビティタイプは、リスト内で一意の逆ドメイン名でなければなりません。

App内でNSUserActivity(英語)のインスタンスを作成し、そのtitle(英語)userInfo(英語)、およびrequiredUserInfoKeys(英語)に、Appが後でそのアクティビティを再開するために必要な情報を設定します。 また、isEligibleForPrediction(英語)プロパティをtrueに、persistentIdentifier(英語)を一意の文字列に設定します。これは、ドネートした情報を削除するために必要です(ドネートしたショートカットの削除を参照)。ユーザーアクティビティでsuggestedInvocationPhrase(英語)プロパティを設定すると、ユーザーがSiriにフレーズを追加する際に使用できる音声フレーズも提案できます。

次に、ユーザーアクティビティオブジェクトでbecomeCurrent()(英語)メソッドを呼び出して「現行」アクティビティとしてマークします。これによってアクティビティがSiriにドネートされます。別の方法として、オブジェクトをUIViewController(英語)またはUIResponder(英語)オブジェクトに追加することもできます。この場合も、アクティビティが「現行」としてマークされます。

後でアクションをハンドルするため、Appデリゲートでapplication(_:continue:restorationHandler:)(英語)メソッドを実装します。

インタラクションをドネートする

INInteraction(英語)オブジェクトを使用してドネートすることもできます。このタイプのドネートでは、ユーザーがAppで行いたいアクション(またはタスク)を表すIntentとのインタラクションをドネートします。このタイプのドネートは、ユーザーアクティビティを使用したドネートと比較して、ドネートされた情報をSiriがIntentパラメータに分解でき、よりインテリジェントな予測が可能になるというメリットがあります。

ソースコードを検討する前に、システムによって提供されたIntentのリストに目を通し、アクションに適したものがあるかどうか確認してください(Siriのドメイン(英語)を参照)。アクションを最も適切に記述するIntentを使用し、適切なものがない場合はカスタムIntentを作成してください。

Intentをドネートするには、Intentクラスのインスタンスを作成します。パラメータ値を設定し、必要に応じてパラメータに画像を追加します。ユーザーがSiriに追加する音声フレーズを提案するため、IntentのsuggestedInvocationPhrase(英語)プロパティを、フレーズを含む文字列に設定します。

Intentを作成した後、INInteraction(英語)のインスタンスを作成し、Intentを渡してそのdonate(completion:)(英語)メソッドを呼び出します。これによって、ショートカットに関する情報がSiriに伝わります。

ショートカットをハンドルするため、Appデリゲートでapplication(_:continue:restorationHandler:)(英語)メソッドを実装します。アクションをハンドルする時になると、システムがAppを開きます。ショートカットをハンドルするたびにAppを開く必要がない場合は、ユーザー体験を向上させるため、AppにIntents App Extensionを提供します。Appを開かなくても、このExtensionがバックグラウンドでショートカットをハンドルするので、Siri内でより豊かな体験を提供できます。Intents App Extensionについての詳細は、Intents App Extensionの開発を参照してください。

Intents App Extensionを提供する場合も常に、application(_:continue:restorationHandler:)(英語)メソッドをAppデリゲートに実装する必要があります。Siriでショートカットをタップする、といった特定のユーザーアクティビティによってAppが開き、ユーザーはAppがショートカットをハンドルすることを期待します。例えば、アクションを完了するにはAppがユーザーから追加情報を得る必要がある場合など、バックグラウンドで実行できないショートカットをハンドルするのは、App側の責任です。

関連項目

ショートカット

SiriショートカットとショートカットAppによるユーザー操作の追加

カスタムのIntentおよびパラメータを追加して、ユーザーがSiriやショートカットAppを使ってより迅速かつ効率的に操作できるようにします。

ドネートしたショートカットの削除

ドネートした情報をSiriから削除します。

Soup Chef:ショートカットによる迅速なApp操作(英語)

Appのアクションを行うショートカットを提供することによって、ユーザーがSiriでAppを簡単に使えるようにします。

ショートカットの管理(英語)

ユーザーがSiriにショートカットを追加できるようにします。また、Appからユーザーにショートカットを提案します。

関連するショートカット(英語)

Apple WatchのSiriの文字盤にショートカットを表示します。

enum INShortcut(英語)

システムがユーザーに提案したり、ユーザーがSiriに追加したりできる、Appで利用可能なアクションです。

class INObject(英語)

カスタムのIntentパラメータを表すオブジェクト。