ドキュメント
アプリ用のレレバントショートカットの定義
Apple WatchのSiriの文字盤に表示するレレバントショートカットをSiriに提供します。
概要
Apple WatchのSiriの文字盤では、その時の状況や時刻、または位置情報に応じてショートカットをユーザーに提示することができます。アプリ内のどのアクションがユーザーに妥当であるか検討し、ジムに到着した時にワークアウトを開始するなど、ユーザーが将来実行する可能性があるアクションを判断してください。レレバントショートカットとして指定することで、そのようなアクションをアプリからSiriに伝えることができます。
メモ
コンパニオンwatchOSアプリのないiOSアプリは、レレバントショートカットを設定してSiriの文字盤に表示することができます。ただし、コンパニオンアプリがあり、レレバントショートカットがiOSアプリとwatchOSアプリの両方に設定されている場合、2つのアプリで設定されている情報の新しい方がSiriの文字盤に表示されます。
レレバントショートカットを作成する
アプリにレレバントショートカットをSiriに伝えるには、まずシステム提供のIntentまたはカスタムインテントを使ってINIntent
(英語) を作成するか、各アクションのNSUserActivity
(英語) オブジェクトを作成します。次に、IntentおよびユーザーアクティビティそれぞれにINShortcut
(英語) オブジェクトを作成します。ショートカットを使ってINRelevantShortcutRole
(英語) オブジェクトを作成し、shortcutRole
(英語) を設定してショートカットの目的に関するヒント(アクションの実行または情報の表示)をSiriに伝えます。
リスト1
ワークアウトを開始するためのレレバントショートカットを作成する
if let shortcut = INShortcut (intent: startWorkoutIntent) {
let relevantShortcut = INRelevantShortcut (shortcut: shortcut)
relevantShortcut.shortcutRole = INRelevantShortcutRole .action
}
レレバントプロバイダを追加する
ショートカットをユーザーに提示するタイミングのヒントをSiriに伝えるには、レレバントショートカットのrelevanceProviders
(英語) プロパティに1つ以上のプロバイダを追加します。レレバントプロバイダでは、ユーザーに対するショートカットの関連性が高くなったことを示す特定の状況、日付、時刻、位置情報などのパラメータを指定できます。たとえば、ユーザーがジムに到着した時にワークアウトの開始を提示するようSiriに指示できます。
リスト2
位置情報プロバイダをレレバントショートカットに追加する
if let shortcut = INShortcut (intent: startWorkoutIntent) {
let relevantShortcut = INRelevantShortcut (shortcut: shortcut)
relevantShortcut.shortcutRole = INRelevantShortcutRole .action
let location = CLLocationCoordinate2D (latitude: 37.336_971 , longitude: -122.013_050 )
let region = CLCircularRegion (center: location, radius: 0.1 , identifier: "Apple Park Fitness Center" )
let locationProvider = INLocationRelevanceProvider (region: region)
relevantShortcut.relevanceProviders = [locationProvider]
}
時間に基づく状況で使うINDailyRoutineRelevanceProvider
(英語) とINDateRelevanceProvider
(英語) を組み合わせて使わないでください(INDailyRoutineRelevanceProvider.Situation.evening
(英語) と「午後8時」など)。予期しない結果を招く恐れがあります。代わりに、各シナリオに複数のレレバントショートカットを用意します。つまり、INDailyRoutineRelevanceProvider.Situation.evening
(英語) にレレバントショートカットを1つ用意し、「午後8時」には2つ目のショートカットを使います。
1つのレレバントショートカットに複数の位置情報プロバイダを適用した場合も同様の問題が発生します。代わりに、位置情報ごとにレレバントショートカットを1つずつ用意します。
重要
アプリが提供するショートカットがレレバントショートカットの場合でも、アプリ内でユーザーがアクションを実行するたびに、アプリはIntentまたはユーザーアクティビティをショートカットとしてドネートする必要があります。このようにドネートすることで、システムがレレバントショートカットをユーザーに提示するタイミングを判断しやすくなります。ドネートについて詳しくは、ショートカットのドネート(donate、提供) を参照してください。
レレバントショートカットを設定する
アプリ用のレレバントショートカットの作成を続け、それぞれを配列に格納していきます。ショートカットの作成と格納が終わったら、default
(英語) のレレバントショートカットストアを使ってsetRelevantShortcuts(_:completionHandler:)
(英語) を呼び出し、レレバントショートカットの配列を渡してSiriに伝えます。
リスト3
ジムに到着した時にワークアウトを開始するためのレレバントショートカットを追加する
var relevantShortcuts:[INRelevantShortcut ] = []
if let shortcut = INShortcut (intent: startWorkoutIntent) {
let relevantShortcut = INRelevantShortcut (shortcut: shortcut)
relevantShortcut.shortcutRole = INRelevantShortcutRole .action
let location = CLLocationCoordinate2D (latitude: 37.336_971 , longitude: -122.013_050 )
let region = CLCircularRegion (center: location, radius: 0.1 , identifier: "Apple Park Fitness Center" )
let locationProvider = INLocationRelevanceProvider (region: region)
relevantShortcut.relevanceProviders = [locationProvider]
relevantShortcuts.append(relevantShortcut)
}
INRelevantShortcutStore .default .setRelevantShortcuts(relevantShortcuts) { (error) in
if let error = error {
print ("Failed to set relevant shortcuts. \(error))" )
} else {
print ("Relevant shortcuts set." )
}
}
レレバントショートカットを置き換える
アプリにより設定済みのリストに、レレバントショートカットを追加することはできません。代わりに、前述と同じ手順に従ってリストを置き換える必要があります。
この手順を実行すると、レレバントショートカットが前のセットから新しいセットに置き換えられます。アプリにより定義されているレレバントショートカットをすべて削除する場合は、setRelevantShortcuts(_:completionHandler:)
(英語) を呼び出し、空の配列を渡します。
リストの置き換えは、レレバントショートカットの追加または削除が必要な場合に行います。1日に2回以上リストを置き換える必要はありません。また、同じ内容のレレバントショートカットを頻繁に再送信することにもメリットはありません。