ストリーミングはほとんどのブラウザと
Developerアプリで視聴できます。
-
インテントのドネートとAppのプレゼンスの向上
ユーザがAppを開くことなく、Appの主要部分を適切なタイミングで利用できるようにする方法を紹介します。インテントを作成してシステムにドネートする方法を学び、Siri、集中モード、ショートカット、スマートスタックなどでAppにおける関連性が高く状況に合致した情報を表示することができます。システムが情報をインテリジェントに識別する方法を探り、Appのエンゲージメントと視認性を高めるためのインテントの構成方法を紹介します。
リソース
関連ビデオ
WWDC21
WWDC20
WWDC18
-
ダウンロード
♪ (インテントのドネートと Appのプレゼンスの向上)
WWDCへようこそ ライアン・チャップマンです プロアクティブインテリジェンス チーム所属です 本日はインテントのドネートで Appのプレゼンスを 向上する方法について説明します AppleデバイスのOSは 日々使用するAppとの 更なる統合が進んでいます このシステムと App間の統合が ユーザーに強力な機能を提供する インテリジェントな システム体験の中心です Appがこのコラボレーションに 参加し システム全体で Appのプレゼンスと機能を 拡張する 主な方法の1つが インテントのドネートです 本セッションでは インテントの ドネートとは何かを定義し インテントのドネートの ライフサイクルを説明してから ドネートを成功させるための 構成方法および 最後にシステム全体でのAppの プレゼンスの拡大方法を説明します まずはインテントのドネートを 理解しましょう 3年前のiOS 12で ショートカットが導入されました ショートカットにより Appの機能を アクションとして切り出せます OS全体でAppの機能を 新しい方法や場所で 使えるようになります これはユーザーを引き付け Appの枠を超えて プレゼンスを拡大する 非常に強力な方法です Appの重要な機能を 実行することで 切り出すすべてのアクションを 高速化する必要があります つまりユーザがすでにAppを 使いたいと思っていたことを より迅速に実行できるように しなければなりません 次に 切り出すすべての アクションは 繰り返し可能でありユーザーが 関心を持ち続けるものであるべきです つまりユーザーが何度も 実行したいものということです ユーザーが1回2回だけで十分と 思うことのためにアクションを 切り出すのは よい考えではありません また アクションを使えるのが ある状態のユーザーのみであること などがないように ステートレスで実行可能な アクションのみを 切り出すようにしてください 優れたアクションに関する 詳細については WWDC2021のトーク "ショートカット、Siri、提案のための 優れたアクションのデザイン” を参照してください 切り出すアクションを決めると ショートカットAPIを 確認いただく準備が整います Appのショートカットの提供に 使えるAPIは 2つあります 1つ目は NSUserActivityです NSUserActivityは Appの状態を表す軽量な方法です Spotlightや Handoffなど Appleのその他の機能と 統合されています 2つ目はインテントです インテントとはAppが 実行できるアクションの タイプを表す方法です Siriにはシステムとの統合に 使えるさまざまな機能を サポートする優れた 内蔵インテントが 多数用意されています またインテントでは ショートカットで使う独自の カスタムのインテント定義も サポートしています APIの詳細とショートカットの 提供方法に関しては WWDC2018の "Siriショートカットの導入” セッションをご覧ください このセッションではインテントに 焦点を当て システム全体でAppの機能を 提供するための 新規および既存の機会を紹介します インテントのドネートを行う 最初のステップは 採用したいインテントのタイプを 決定することです Siriには メッセージングや予約 メディアなど 優れた内蔵インテントが存在します またXcodeでショートカットの カスタムインテントを 定義する機能もあります そのため作成するアクションが デフォルトのSiriKitの 内蔵インテントに合致する場合 それを採用するべきです それ以外の場合はXcodeの インテント定義ファイルを 使って独自の定義を 行うことができます Appで採用・定義する インテントを決定したら インテントのドネートを 開始できます インテントのドネートとは Appでユーザーが アクションを実行したことを システムに通知するアクションです システムはこれらの ドネートを保存し それらを使ってシステム全体で Appの機能と プレゼンスを拡張します インテントをドネートするAppは 提案やショートカット 集中モードやスマートスタックおよび Siriなどシステム全体に 現れるようになります さて インテントのドネートについて 大まかに理解したので インテントのドネートの ライフサイクル例を通じて より具体的な理解の助けとなるよう 話を進めていきます 天気Appで天気を 確認する例を 見てみましょう このAppでアクションとして 切り出したい重要な機能は 特定の場所の天気を 確認する機能です このAppにはインテントによって 設定が可能となる ウィジェットが 既にあります これによりウィジェットで 天気を確認したい都市を 選択できます 天気確認のインテントを 定義する方法や そのインテントの ドネート方法および システムがドネートを どう使うかを確認していきましょう Xcodeでインテントを 定義する最初の手順は インテント定義ファイルの作成です 作成するため 新しいファイルを追加します...
SiriKit Intent Definition Fileを選択 次にカスタムインテントを 使うターゲットを選択し インテント定義ファイルの 作成を確認します インテント定義ファイルが 作成されると インテントを定義できます 天気を確認する既存の 内蔵システムインテントが なかったので 新しいインテントを追加します そのインテントを"Check Weather"と呼びましょう
ここからインテントの定義を 開始できます まず"インテントはウィジェット 対象です" オプションをオンにします このインテントがAppの 既存のウィジェットの 構成として機能することを 許可するためです システムはまた私のインテントの ドネートを使って スマートスタック上のウィジェットの インテリジェンスに活用できます ショートカットAppも サポートしたければ "ショートカットAppと Siriに追加"オプションで を選択 このデモでは このオプションをオフにして ウィジェットと提案に 焦点を当てます またインテントを Siriによる提案として表示するため ドネートを使用するように システムを設定したいので オプションを オンのままにしておきます 次にインテントのパラメータを 定義します 天気を確認する場所として パラメータを1つだけ定義できます 次にパラメータタイプを選択します ロケーションは App内で 天気情報がある都市に対応する オブジェクトを表しています そこでカスタムタイプを 使ってこのパラメータを表します IdentifierとdisplayStringを 持つ都市のための カスタムタイプを作成できます
ロケーションパラメータに 戻りましょう ロケーションタイプが 新しいカスタム都市タイプで あることがわかります ウィジェットで値を編集可能にする オプションを保持します これはこのインテントを ウィジェット構成に使うためです このデモでは インテントの Siriでの実行をサポートしないため オプションのチェックを外します ユーザーがウィジェットを 構成する場合 天気予報のロケーションのリストを Appから提供する必要があり ユーザーが保存した都市によって 変更されるため チェックボックスをオンにします 最後に提案でサポートされる パラメータの組み合わせを 定義します インテント定義ファイルを システムが読み取り Appが予測においてサポートする インテントとパラメータの 組み合わせが決定されます この場合 Appは ロケーションパラメーターセットを 使ってインテントを サポートします さてサポートされている 組み合わせとして パラメータを追加します 次に提案に表示される サマリーを定義します 以上です ウィジェットと提案で使える 天気確認カスタムインテントを 定義しました インテントが定義されているので ユーザーがApp内で特定の 場所の天気をチェックするたびに システムにそのインテントを ドネートします インテントをドネートするために インテントクラスのインスタンスを 作成しそのパラメータ値を 設定します インテント作成後 INInteractionオブジェクトの インスタンスを作成し インテントを渡してから インタラクションオブジェクトの donateメソッドを呼び出して そのインテントを システムにドネートします システムは水面下でそのインテントが ドネートされたときの 状況とともに これらのドネートを時系列で保存します 天気予報Appで天気を 確認し続けると Appは引き続き インテントをドネートします この事例ではクパチーノと サンディエゴの 天気を確認しています インテントパラメータを使用して インテントが同じものか どうかを判断します ドネートの色で示されているとおり 2つのクパチーノのドネートは 同じものであり2つのサンディエゴの ドネートとは異なります システムは実際には ユーザーのデバイス上の 他のAppからもドネートを 受け取ります ドネートを削除したい場合は 削除APIを使って個々の またはグループのドネートを 削除できます たとえば 保存されている 天気の場所から サンディエゴを 削除した場合は サンディエゴのロケーションに 関連付けられている インテントを削除できます ドネートを削除すると 関連性の低いアクションが 提案として表示されないように することが重要です インテントをドネートするときは INInteraction識別子と グループ識別子を使うことができ これでドネートした1つ以上の INInteractionsを 後で削除できます 識別子の配列を渡して 個々のインタラクションを 削除するか またはグループ識別子を渡して インタラクションのグループの 削除ができます ではこれらのドネートはシステムで どのように使われているのでしょうか ここではシステムが 数日間にわたって見ている ドネート履歴について 大まかに見ていきましょう ここでは1人のユーザーの 起床時からのドネートを 3日間を通じて 確認することができます このシステムは機械学習と オンデバイスインテリジェンスを 使ってデータ内のパターンを 見つけて個人の現在の状況や 過去の行動パターンに関する インテントを予測します この場合ユーザーが目覚めた後の 天気の確認という 関連性のあるパターンを 見ることができます オンデバイス インテリジェンスはユーザー向けの 機能と統合され Appの機能とプレゼンスを ユーザーに表示します この表示が行われる場所の例を いくつか見てみましょう そうする前に 機械学習とインテリジェンスが すべてプライバシー保護された 状態でデバイス上で動いていることに 注意してください つまりAppleはユーザーを 個人的に識別できるデータは 収集しません では天気の例に戻りましょう 定義したインテントを使って App内の既存のウィジェットを 構成可能にできます インテントを使用するよう ウィジェットを構成すると ウィジェットで天気を見る場所を 選択できるようになります ウィジェットの構成インテントに 一致するインテントを Appがドネートすることで システムはユーザーに スマートスタックにおける ウィジェットのインテリジェンスを 提供できるようになりました たとえばスマートスタックを使って ホーム画面を構成している人が いるとします iOS 15の新機能でスマートスタックは ウィジェットの提案を行います これによりユーザーが スタック内に追加していない ウィジェットを適切なタイミングで スタックの上に配置して 提案できるようになります ウィジェットを提案するかどうか また提案に適切な時間を 決めるために システムはウィジェット設定の インテントに一致する インテントのドネートを利用します 天気の例では ユーザーの起床後に スマートスタックは天気ウィジェットを 適切なタイミングで スタックの一番上に配置しました これはユーザーにウィジェットを 見つけてもらい 魅力的な情報を提供する 素晴らしい方法です すでに天気ウィジェットが スタックにある場合は 天気ウィジェットに ローテーションします ウィジェットの構成や インテリジェンスの追加方法は 2020年のWWDC セッションをご覧ください インテントのドネートは ロック画面やSpotlight検索における Siriによる提案や Siriによる提案ウィジェットのための デバイス上のインテリジェンスを 支えるものでもあります これらの提案により 1回タップするだけで Appの主な機能を実行できます 内蔵のショートカットAppでは macOSやiOSおよびwatchOS間の シンプル/複雑なマルチステップ ショートカットの一部として インテントを使うこともできます またドネートはショートカットAppの ギャラリーで提案されるアクションを 決定するために使われます Siriに話しかけるだけの 音声ショートカットを 設定してカスタムインテントを 実行することもできます 内蔵のINSendMessageIntentの 使用を選択した場合は インテントのドネートにより ユーザーが 重要な人やグループに コンテンツを簡単に提供できるようにする 共有先の提案に使われます iOS 15の新機能では INSendMessageIntentsをドネートすると システムはインテントに 関連づけられている人の情報で ユーザーの現在の集中モードに 強く関連している人を 特定します これらの強力な関連付けにより 特定のユーザーからの メッセージ受信時にそのユーザーの 許可された通知一覧への 追加を提案できます この場合エイガは そのユーザーとエイガの過去の やり取りに基づいて 仕事集中モードの許可された 通知リスト追加への 検討の必要があるユーザーとして 提案されていることがわかります 内蔵の INGetReservationDetailsIntentを 使用する場合は 現在の交通状況に 基づいてレストランを出る 時間をユーザーに通知することや フライトのチェックイン時間の通知に このインテントのドネートが使われます またマップを開くと Siriからの提案も表示されるので 1回タップするだけで空港への 道順を簡単に確認できます iOS 15の新機能として 内蔵のINPlayMediaIntentを使う場合は ロック画面やコントロールセンター またホームAppの 新しいNow Playing UIに インテントのドネートが表示されます ユーザーにとってこれは Appからお気に入りの コンテンツ視聴するのに 最適な方法となります ユーザがAppでPodcastや テレビ番組またムービーなどの 周期的なメディアコンテンツを 消費する場合があります このような場合は INUpcomingMediaManager APIを使って ユーザーがリストに登録していない コンテンツや視聴していない コンテンツの メディアインテントの リストをシステムに提供できます システムは過去のメディアのドネートと Appの今後のメディア情報を 組み合わせて より良いメディアの提案を行います INRelevantShortcut APIを使って Siriの文字盤に自分のインテントを 表示することもできます INRelevantShortcut APIを使うと Apple Watchの文字盤に 表示されるべきショートカットを 時刻や場所などの 関連情報に基づき システムに伝えることができます Siriの文字盤に ショートカットを表示する 方法については2018年の "Siri文字盤でのSiriショートカット" セッションを ご覧ください iOS15の新機能として widgetKindプロパティが INRelevantShortcutオブジェクトに 追加されました これにより対応するウィジェットの スマートスタックでの表示タイミングを システムに示唆できます このプロパティとその使用方法は WWDC2021セッション "ウィジェットへの インテリジェンスの追加"を ご覧ください さてここまでインテントの ドネートのライフサイクルを見て それらがシステム全体で Appのプレゼンスと機能を どう使って スマートスタック 集中モードや提案 ショートカット Siriなどに拡大するか 見てきました インテントのドネートの ライフサイクルを確認したので ここではドネートを成功させるため ドネートをどう構成し 最終的にシステム全体で Appのプレゼンスを 拡大する方法を説明します コーヒーAppで注文する 新しい例を見てみましょう これまでに注文コーヒー インテントを定義し コーヒーのサイズと コーヒーアイテムの 2つのパラメータを切り出しました この事例では 大きなアイスラテとします インテントのドネートに 注文日を含めた場合に 問題となることを 確認してみましょう 2021年6月7日の 大きいアイスラテの ドネートから始まります ただし一旦日付が変更されると インテントの日付パラメータに 新しい値が設定され 2つ目のドネートはまったく異なる インテントとして扱われます しかしドネートするアイテムと サイズは同じです システムはドネートを時系列で 違うものとして処理し続けています ドネートの色に基づくと ドネートが日をまたいで 同じでないことが わかります システムが複数日にわたって 確認しているドネート履歴の 概要を見ると 大きなアイスラテの注文の 有意なパターンが 見つからないことがわかります インテント定義ファイルに どのように入力したかを 見て何がだめなのか把握しましょう 3つのパラメータ(アイテム・ サイズ・日付)を定義しました そしてこの3パラメータを サポートするパラメータの 組み合わせを追加しました これにより3パラメータ すべてを使って 予測のためにインテントの ドネートのパターンを見つける方法を 決める必要があると システムに通知されます この場合サポートされている アイテムとサイズおよび 日付の組み合わせを含めると システムはドネートにおける パターンを適切に 見つけられませんでした これを解決するには サイズとアイテムの パラメータのみを含む 組み合わせを定義します こうすることでシステムは インテントのドネートと 時系列に沿ったパターンの 比較時にアイテムとサイズの パラメータのみの使用で あることを認識します これでシステムには 日付を含まない 大きなアイスラテの ドネートが表示されます 2日目に システムは 大きなアイスラテに 相当するドネートが確認できます 3日目も同じです ドネート履歴の概要を もう一度見ると 大きなアイスラテの注文に 関連するパターンが 起床直後に あることがわかります ドネートの効果を最大化するには インテントのドネートが 繰り返される 可能性が高く ドネートするインテントの ペイロードがドネート全体で 一貫していることを確認します つまりタイムスタンプは 含むべきではありません システムと 日々使用するAppとの統合が さらに進んでおり インテントのドネートは 重要な統合ポイントとなります Appの機能とプレゼンスを システム全体に 拡張するという利益が インテントのドネートでもたらされます ありがとうございました 残りのWWDC2021も お楽しみください ♪
-
-
0:01 - Intent donation example
// Donate your intent. let intent = CheckWeatherIntent() intent.location = weatherLocation let interaction = INInteraction(intent: intent, response: nil) interaction.donate { (error) in // Handle the error. }
-
0:02 - Intent deletion example
// Donate your intent. let interaction = INInteraction(intent: intent, response: response) interaction.identifier = "68753A44-4D6F-1226-9C60-0050E4C00067" interaction.groupIdentifier = "san-diego" interaction.donate { (error) in // Handle the error. } // Delete individual donations. INInteraction.delete(with: ["68753A44-4D6F-1226-9C60-0050E4C00067"]) { (error) in // Handle the error. } // Delete group donations. INInteraction.delete(with: "san-diego") { (error) in // Handle the error. }
-
0:03 - Intent donation example 2
// Donate your intent. let intent = OrderCoffeeIntent() intent.item = item intent.size = size intent.date = date let interaction = INInteraction(intent: intent, response: nil) interaction.donate { (error) in // Handle the error. }
-
-
特定のトピックをお探しの場合は、上にトピックを入力すると、関連するトピックにすばやく移動できます。
クエリの送信中にエラーが発生しました。インターネット接続を確認して、もう一度お試しください。