ドキュメント

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

ユーザーがアプリで実行したアクションを行うショートカットを、Siriにドネートします。

概要

アプリでユーザーが実行したいアクションをSiriが予測し、そのショートカットをSpotlight検索画面、ロック画面、Apple WatchのSiriの文字盤でユーザーに提示することができます。Siriはアプリがドネートする情報を使って、アプリで利用可能なショートカットを学習していきます。ユーザーは、パーソナライズした音声フレーズをSiriに追加して、ドネートされたショートカットを呼び出すこともできます。Siriへのフレーズ追加について詳しくは、ショートカットの管理(英語)を参照してください。

適切なタイミングでショートカットをドネートする

ユーザーがアプリでアクションを実行するたびにショートカットをドネートします。ユーザーがアクションを実行したときに、1つのアクションについて1回だけドネートを行います。ユーザーが再び同じアクションを実行した場合は、もう1回ドネートします。たとえば、ユーザーがアプリを使ってレストランのスープを注文できる場合、ユーザーが注文した後に「order soup」アクションのショートカットをドネートします。ユーザーが別の注文をした場合は、もう1回「order soup」をドネートします。

ただし、ユーザーがアクションを実行した時に、1つのアクションについて複数のショートカットをドネートしないでください。また、アプリでユーザーが完了していないアクションについてはドネートしないでください。ユーザーがスープを一度も注文していない場合は、「order soup」アクションのショートカットをドネートしないでください。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

関連項目

ショートカット

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

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

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

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

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

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

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

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

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

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

enum INShortcut(英語)

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

class INObject(英語)

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