記事

Siriの文字盤カードでのショートカット情報の表示

デフォルトのカードテンプレートを使ってApple Watch専用のショートカット情報をカスタマイズして表示します。

概要

Apple WatchのSiriの文字盤に、レレバントショートカットをカードで表示し、以下の情報を提供できます。

  • Appのアイコンと名前(システムによって提供されます)

  • タイトル、サブタイトル、およびカスタム画像(ショートカットの作成に使用したIntentまたはユーザーアクティビティ、あるいはINDefaultCardTemplate(英語)オブジェクトによって提供されます)

Intentを使用しているショートカットを表示する

AppがINIntent(英語)オブジェクトを使ってショートカットを作成している場合、システムはIntentの定義ファイルで定義されているIntent設定からIntentのタイトルとサブタイトルを取得します。画像を含めるには、IntentでsetImage(_:forParameterNamed:)(英語)を呼び出し、INImage(英語)を渡します。

リスト1

サンプルApp「Soup Chef」でスープを注文するIntentに画像を設定する

orderSoupIntent.setImage(INImage(named: menuItem.iconImageName), forParameterNamed: \OrderSoupIntent.soup)

ユーザーアクティビティを使用しているショートカットを表示する

AppがNSUserActivity(英語)オブジェクトを使ってショートカットを作成している場合、システムはユーザーアクティビティのタイトルプロパティからタイトルを取得します。サブタイトルを指定するには、コンテンツタイプkUTTypeItem(英語)を使ってCSSearchableItemAttributeSet(英語)を作成し、contentDescription(英語)プロパティを設定します。画像を含めるには、属性セットでthumbnailData(英語)を設定します。

リスト2

NSUserActivityオブジェクトでタイトル、サブタイトル、画像を設定する

import CoreSpotlight
import MobileCoreServices

let userActivity = NSUserActivity(activityType: "com.myapp.myactivity")
userActivity.title = "Title"

let attributes = CSSearchableItemAttributeSet(itemContentType: kUTTypeItem as String)
attributes.contentDescription = "Subtitle"
attributes.thumbnailData =  imageLiteral(resourceName: "custom-image").pngData()

userActivity.contentAttributeSet = attributes

カードテンプレートを使用する

Apple Watch専用のUIを表示したい場合は(SiriがユーザーのiPhoneやiPadに表示するショートカットのタイトルよりも短いタイトルを表示する場合など)、watchTemplate(英語)プロパティを設定して、レレバントショートカットにデフォルトのカードテンプレートを提供します。Appは、このテンプレートを使ってtitle(英語)subtitle(英語)、およびimage(英語)をカスタマイズできます(カードに表示されるAppのアイコンと名前を変更または削除することはできません)。

リスト3

サンプルApp「Soup Chef」で注文Intentにテンプレートを設定する

let order = Order(quantity: 1, menuItem: menuItem, menuItemOptions: [])
let orderIntent = order.intent

guard let shortcut = INShortcut(intent: orderIntent) else { return nil }

let suggestedShortcut = INRelevantShortcut(shortcut: shortcut)

let localizedTitle = NSString.deferredLocalizedIntentsString(with: "ORDER_LUNCH_TITLE") as String
let template = INDefaultCardTemplate(title: localizedTitle)
template.subtitle = NSString.deferredLocalizedIntentsString(with: menuItem.shortcutNameKey + "_SUBTITLE") as String
template.image = INImage(named: menuItem.iconImageName)

suggestedShortcut.watchTemplate = template

リスト3のコードにより、図1にあるSiriの文字盤カードが作成されます。サンプルコード一式をダウンロードするには、Soup Chef:ショートカットによる迅速なApp操作(英語)を参照してください。

図1

Soup Chefからのレレバントショートカットが表示されているSiriの文字盤

ランチ注文を提案するレレバントショートカットが表示されているSiriの文字盤のスクリーンショット。

システムは、カードテンプレートでAppが提供している情報に応じて、4つあるレイアウトのいずれかを使って情報を表示します。例えば、画像が提供されていない場合、タイトルとサブタイトルフィールドのみのレイアウトが使用されます。また、タイトルのみが提供されている場合は、タイトルを2行で表示できるレイアウトが使用されます。

図2

Siriの文字盤カードのレイアウト例

Siriの文字盤カードの4つのレイアウトを示した画像。1つ目のレイアウトには、タイトル、サブタイトル、画像が表示されています。2つ目のレイアウトには、タイトルとサブタイトルが表示されています。3つ目のレイアウトには、タイトルと画像が表示されています。4つ目のレイアウトには、タイトルのみが2行で表示されています。

関連項目

Siriの文字盤カード

class INDefaultCardTemplate(英語)

Siriの文字盤でのショートカットをカスタマイズするためのカードテンプレート。