記事

App用のレレバントショートカットの定義

Apple WatchのSiriの文字盤に表示するレレバントショートカットをSiriに提供します。

概要

Apple WatchのSiriの文字盤では、その時の状況や時刻、または位置情報に応じてショートカットをユーザーに提示することができます。App内のどのアクションがユーザーに妥当であるか検討し、ジムに到着した時にワークアウトを開始するなど、ユーザーが将来実行する可能性があるアクションを判断してください。レレバントショートカットとして指定することで、そのようなアクションをAppからSiriに伝えることができます。

レレバントショートカットを作成する

AppにレレバントショートカットをSiriに伝えるには、まずシステム提供のIntentまたはカスタムIntentを使ってINIntent(英語)を作成するか、各アクションのNSUserActivity(英語)オブジェクトを作成します。次に、IntentおよびユーザーアクティビティそれぞれにINShortcut(英語)オブジェクトを作成します。ショートカットを使ってINRelevantShortcutRole(英語)オブジェクトを作成し、shortcutRole(英語)を設定してショートカットの目的に関するヒント(アクションの実行または情報の表示)をSiriに伝えます。

リスト1

ワークアウトを開始するためのレレバントショートカットを作成する

// Add an intent to the list of suggestions. To create
// a shortcut from an intent, the intent must be valid.
if let shortcut = INShortcut(intent: startWorkoutIntent) {

    let relevantShortcut = INRelevantShortcut(shortcut: shortcut)
    relevantShortcut.shortcutRole = INRelevantShortcutRole.action

}

レレバントプロバイダを追加する

ショートカットをユーザーに提示するタイミングのヒントをSiriに伝えるには、レレバントショートカットのrelevanceProviders(英語)プロパティに1つ以上のプロバイダを追加します。レレバントプロバイダでは、ユーザーに対するショートカットの関連性が高くなったことを示す特定の状況、日付、時刻、位置情報などのパラメータを指定できます。例えば、ユーザーがジムに到着した時にワークアウトの開始を提示するようSiriに指示できます。

リスト2

位置情報プロバイダをレレバントショートカットに追加する

// Add an intent to the list of suggestions. To create
// a shortcut from an intent, the intent must be valid.
if let shortcut = INShortcut(intent: startWorkoutIntent) {

    let relevantShortcut = INRelevantShortcut(shortcut: shortcut)
    relevantShortcut.shortcutRole = INRelevantShortcutRole.action

    // Create a location provider for Apple Park Fitness Center.
    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つずつ用意します。

レレバントショートカットを設定する

App用のレレバントショートカットの作成を続け、それぞれを配列に格納していきます。ショートカットの作成と格納が終わったら、default(英語)のレレバントショートカットストアを使ってsetRelevantShortcuts(_:completionHandler:)(英語)を呼び出し、レレバントショートカットの配列を渡してSiriに伝えます。

リスト3

ジムに到着した時にワークアウトを開始するためのレレバントショートカットを追加する

var relevantShortcuts:[INRelevantShortcut] = []

// Add an intent to the list of suggestions. To create
// a shortcut from an intent, the intent must be valid.
if let shortcut = INShortcut(intent: startWorkoutIntent) {

    let relevantShortcut = INRelevantShortcut(shortcut: shortcut)
    relevantShortcut.shortcutRole = INRelevantShortcutRole.action

    // Create a location provider for Apple Park Fitness Center.
    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.")
    }
}

レレバントショートカットを置き換える

Appにより設定済みのリストに、レレバントショートカットを追加することはできません。代わりに、前述と同じ手順に従ってリストを置き換える必要があります。

この手順を実行すると、レレバントショートカットが前のセットから新しいセットに置き換えられます。Appにより定義されているレレバントショートカットをすべて削除する場合は、setRelevantShortcuts(_:completionHandler:)(英語)を呼び出し、空の配列を渡します。

リストの置き換えは、レレバントショートカットの追加または削除が必要な場合に行います。1日に2回以上リストを置き換える必要はありません。また、同じ内容のレレバントショートカットを頻繁に再送信することにもメリットはありません。

関連項目

最初のステップ

class INRelevantShortcut(英語)

ショートカットとユーザーへの関連性を定義するオブジェクト。

class INRelevantShortcutStore(英語)

レレバントショートカットを保存するオブジェクト。