WWDC Quick Look 💓 By SwiftGGTeam
Donate intents and expand your app’s presence

Donate intents and expand your app’s presence

元の動画を見る

ハイライト

Apple は、開発者がアプリ内でユーザーが完了した繰り返しアクションを Intent Donation を通じてシステムに引き渡すことを許可しており、システムはこれらの記録を使用して、Siri、ショートカット、フォーカス、スマート スタック、および提案に関連する機能を表示します。

主要内容

多くのアプリの主要な機能はインターフェイスの奥深くに隠されています。

ユーザーは毎朝天気をチェックし、毎日出勤前に同じコーヒーを注文し、毎週同じ人にメッセージを送信します。アプリはこれらの動作を認識しますが、システムは認識しません。システムが認識しない限り、ロック画面、検索、ウィジェット スタック、または Siri で機能を事前にユーザーの目の前に配置することはできません。

以前は、開発者は関数をショートカット アクションに作成できました。問題は、アクション自体はアプリが実行できることのみを説明していることです。このユーザーがいつそれを実行するか、パラメータは何か、このアクションが繰り返されるかどうかなど、必ずしもシステムに通知されるわけではありません。

Apple はこのセッションで Intent Donation について話しています。ユーザーがアプリで操作を完了すると、アプリは対応するインテント (インテント) を作成し、パラメーターを入力して渡します。INInteraction.donate()システムにお任せください。システムは操作をそのコンテキストとともに保存し、オンデバイス インテリジェンスを使用してパターンを見つけます。

このように、天気アプリは「天気を確認する」機能を提供するだけではありません。また、このユーザーが朝クパチーノの天気をよくチェックしていることもシステムに伝えます。コーヒー アプリは単に「コーヒーを注文する」機能を提供するだけではありません。また、このユーザーは起床後に大きなアイスラテを注文することが多いこともシステムに伝えます。

この事件の結末は明白だった。アプリの機能は、スマート スタック、Siri の提案、ショートカット、フォーカス、および Siri に表示されます。ユーザーは、最初にアプリを開いてボタンを見つける必要はありません。

寄付は反復可能なアクションを表すものでなければなりません

Appleの判断基準は非常に厳しいものです。

アクションは、ユーザーが本来やりたかったことを加速する必要があります。これは何度も実行され、長期的にはユーザーにとって価値があるものでなければなりません。また、ステートレスであり、すぐに実行できる必要があります。

「ある街の天気を調べる」は寄付に適しています。 「アカウントの削除」は寄付には適していません。前者は繰り返し発生しますが、後者は通常 1 回だけ発生します。

パラメーターはシステムがパターンを認識できるかどうかを決定します

システムはインテントのパラメータを比較して、複数の寄付が同等かどうかを判断します。

天気の例では、2 つのクパチーノの天気クエリは同じタイプの動作とみなされます。クパチーノとサンディエゴは別の公演として見なされます。このようにして、システムは、それらが出現する時間とシーンを個別に学習することができます。

コーヒーの例は別の問題を示しています。予測をサポートするパラメータの組み合わせに注文日を入れると、今日のラージアイスラテと明日のラージアイスラテが異なるIntentとなる。システムには、「毎朝ラージアイスラテを注文する」モードは表示されません。

解決策は、インテント定義ファイルに次のように入力するだけです。itemそしてsizeサポートされているパラメータの組み合わせを入力してください。日付をインテントに含めることはできますが、予測の同等性の決定に日付を含めないでください。

詳細

寄付可能なインテントを定義する

(03:28) 最初のステップは、どのインテントを使用するかを決定することです。

SiriKit は、メッセージ、予定、メディア、その他のシナリオをカバーする組み込みのインテントを提供します。アクションが既存の組み込みインテントに対応する場合は、最初に組み込みタイプを使用します。一致するものがない場合は、Xcode で SiriKit インテント定義ファイルを作成し、カスタム インテントを定義します。

天気の例はカスタムを使用しますCheckWeatherIntent。が含まれていますlocationパラメータ、タイプはカスタマイズされますCity。このインテントはウィジェットの対象となり、Siri の提案の対象になります。ウィジェットの設定ではユーザーが都市を選択する必要があるため、locationパラメーター オプションはアプリによって動的に提供されます。

let intent = CheckWeatherIntent()
intent.location = weatherLocation

let interaction = INInteraction(intent: intent, response: nil)
interaction.donate { (error) in
    // Handle the error.
}

キーポイント:

  • CheckWeatherIntent()Xcode のインテント定義ファイルに対応するカスタム天気クエリ インテントを作成します。
  • intent.location = weatherLocationユーザーがクエリした都市を入力すると、システムはパラメーターを使用して、クパチーノやサンディエゴなどのさまざまな操作を区別します。
  • INInteraction(intent: intent, response: nil)インテントをシステムに提供されるオブジェクトとしてインタラクションにラップします。
  • interaction.donateこの操作はシステムに保存させます。
  • errorコールバックは寄付の失敗を処理するために使用され、この例では特定のエラー処理については拡張されていません。

システムによる寄付の使用方法

(09:15) 寄付が完了すると、これらの記録は、ユーザーがアクションを実行したコンテキストとともに保存されます。

天気予報アプリは、ユーザーが都市の天気を表示するたびにインテントを寄付します。システムは、Intent パラメータに基づいてレコードが同等であるかどうかを判断します。 2 つのクパチーノ クエリは同じカテゴリに属し、2 つのサンディエゴ クエリは別のカテゴリに属します。

次に、システムはデバイス上で機械学習を使用して動作パターンを見つけます。セッション中の例としては、ユーザーは起床後によく天気をチェックします。システムがこのパターンを認識すると、気象関連機能をフロントエンド機能に公開できます。

let intent = CheckWeatherIntent()
intent.location = weatherLocation

let interaction = INInteraction(intent: intent, response: nil)
interaction.donate { (error) in
    // Handle the error.
}

キーポイント:

  • ユーザーが実際の操作を完了するたびにインテントを作成すると、寄付記録にユーザーの行動が反映されます。
  • locationこれは、インテントが同等であるかどうかをシステムが判断するための重要なパラメータです。
  • 同じパラメータ値が繰り返し現れる場合、システムは予測可能なパターンを検出する可能性があります。 -セッションでは、機械学習とインテリジェント処理はデバイス側で完了し、Appleは個人を特定できるデータを収集しないと明記されています。

期限切れの寄付を削除する

(09:58) 寄付は追加だけでなく、削除もできません。

ユーザーがサンディエゴの天気予報の場所を削除した場合、関連付けられた寄付をそのままにしておくと、間違った提案が表示されます。システムは引き続きサンディエゴの天気を確認することを推奨する場合があります。 Apple は、コンテンツの有効期限が切れたら、個人の寄付または寄付のグループを削除することをお勧めします。

// 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.
}

キーポイント:

  • interaction.identifier単一の寄付に対してラベルを設定します。ラベルは後でラベルによって削除できます。
  • interaction.groupIdentifier同じ都市などの寄付グループのグループを設定するsan-diego
  • INInteraction.delete(with: ["68753A44-4D6F-1226-9C60-0050E4C00067"])指定された ID を持つ 1 つまたは複数のインタラクションを削除します。
  • INInteraction.delete(with: "san-diego")同じグループ内の寄付を削除します。
  • 削除コールバックも返されますerror、削除の失敗を処理するために使用されます。

ウィジェットとスマート スタックに寄付を使用させましょう

(11:49) 天気の例のインテントはウィジェットとして構成することもできます。

ユーザーは天気ウィジェットを構成するときに、表示する都市を選択できます。アプリによって提供されたインテントがウィジェット構成インテントと一致すると、システムはスマート スタックにウィジェット インテリジェンスを提供できます。

iOS 15 のスマート スタックはウィジェットの提案をサポートします。ユーザーがスタックに天気ウィジェットをまだ持っていない場合、システムは適切なタイミングでそれをスタックの一番上に提案できます。ユーザーがすでに天気ウィジェットを持っている場合、システムは適切なタイミングでそのウィジェットに切り替えることができます。

let intent = CheckWeatherIntent()
intent.location = weatherLocation

let interaction = INInteraction(intent: intent, response: nil)
interaction.donate { (error) in
    // Handle the error.
}

キーポイント:

  • インテント定義ファイルの「インテントはウィジェットに適しています」CheckWeatherIntentウィジェットの設定に使用できます。
  • locationパラメーターを使用すると、ユーザーはウィジェットを構成するときに都市を選択できます。
  • アプリが同様のインテントを寄付し続けた後、スマート スタックはこれらのレコードを使用して、関連ウィジェットをいつ表示するかを決定できます。
  • セッションの説明、ウィジェット インテリジェンスの詳細は、WWDC 2021 の「ウィジェットへのインテリジェンスの追加」で詳しく説明されています。

組み込みインテントによってもたらされるシステム露出

(13:13) インテント寄付により、複数のシステム エントリも推進されます。

カスタム インテントは、ロック画面、Spotlight 検索ウィジェット、Siri 提案ウィジェット、およびショートカットのアクションとして表示できます。組み込みインテントは、より具体的なシステム機能に接続します。

Apple は、セッション内の 3 つの組み込みインテントをリストしています。

  • INSendMessageIntent: 提案を共有するために使用されます。 iOS 15 では、メッセージ オブジェクトを使用して、どの連絡先が現在のフォーカスに強く関連しているかを判断します。
  • INGetReservationDetailsIntent: レストランの予約、フライトのチェックイン、マップでのワンクリック ナビゲーションの提案。
  • INPlayMediaIntent: iOS 15 では、ロック画面、コントロール センター、ホーム アプリの再生中 UI にメディアの寄付が表示されます。
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.
}

キーポイント:

  • intentこれは、カスタム インテントまたは SiriKit の組み込みインテントの 1 つです。
  • responseインテントと一緒に渡すことができますINInteraction、例は示していますresponse: response形状。
  • 組み込みインテントのセマンティクスはシステムによって理解されるため、提案の共有、フォーカス、予定のリマインダー、再生中などのシステム エクスペリエンスに接続できます。
  • identifierそしてgroupIdentifierコンテンツの有効期限が切れたときにレコードをクリーンアップする組み込みインテントにも役立ちます。

メディア コンテンツの未再生リストを提供する

(15:32) メディア アプリには追加の入り口があります。

ユーザーがアプリ内でポッドキャスト、テレビ番組、映画などの定期的なメディア コンテンツを消費する場合、アプリはINUpcomingMediaManagerAPI は、ユーザーがまだ聞いたり見たことはないが、興味があるかもしれないメディア インテントのリストをシステムに提供します。このシステムは、過去のメディア提供と今後のメディアを組み合わせて、より適切なメディア推奨を生成します。

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.
}

キーポイント:

  • このコードは、パラメータ付きのインテントの寄付構造を示しています。メディアインテントの寄付も同じパターンに従います。
  • intent.item = itemintent.size = sizeintent.date = dateインテントが複数のパラメータを運ぶことができることを示します。
  • メディア シナリオの場合、セッションではエントリ API がINUpcomingMediaManager
  • 推奨事項は、過去のメディアの寄付とアプリが提供する未消費メディアのリストを組み合わせて生成されます。

パラメータの組み合わせを使用して、予測に悪影響を与えないようにする

(17:13) コーヒーの例は、予測に使用されるパラメーターの組み合わせに変更されたタイムスタンプを入れるという最も一般的な間違いを示しています。

ユーザーは 3 日連続でラージアイスラテを注文しました。サポートされているパラメータの組み合わせに次のものが含まれる場合、itemsizeそしてdate、システムは 3 つの異なるレコードを認識します。日付は日々変わり、記録は記録間で同等ではなくなり、パターンは消えてしまいます。

Apple が提供した修正は次のとおりです。サポートされているパラメータの組み合わせには次のものが含まれます。itemそしてsize。このようにして、システムは 3 日分のラージアイスラテを同等の寄付とみなし、「起床後にラージアイスラテを注文する」パターンを発見します。

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.
}

キーポイント:

  • OrderCoffeeIntent()これは、Coffee アプリのカスタム インテントです。
  • intent.item = itemセッション中のアイスラテなどのコーヒーカテゴリーを示します。
  • intent.size = sizeラージなどのカップ形状を指します。
  • intent.date = date注文の日付は記録される場合がありますが、同等性を予測するために使用されるパラメータの組み合わせに含めるべきではありません。
  • インテント定義ファイルでサポートされているパラメータの組み合わせには、繰り返しの動作を確実に表すパラメータのみが含まれている必要があります。

重要ポイント

1.「朝に自動的に表示される」天気ウィジェットを作成する

  • 内容: ユーザーが毎朝特定の都市の天気をチェックした後、対応する天気ウィジェットがスマート スタックに表示される可能性が高くなります。
  • 実行する価値がある理由: セッションでは、一致するウィジェット構成インテントを寄付することでスマート スタック ウィジェット インテリジェンスを推進できると明示的に述べています。
  • 開始方法: 作成するCheckWeatherIntent、追加しますlocationパラメーター、ウィジェットの対象となるかどうか、および Siri の提案の対象となるかどうかを確認します。ユーザーが都市の天気を確認した後に呼び出されますINInteraction.donate()

2. 定期的なコーヒーの提案をする

  • 対処法: ユーザーが同じコーヒーを頻繁に注文する場合は、Siri の提案またはショートカットでワンクリックで注文を入力できるようにします。
  • 実行する価値がある理由: システムは、繰り返される寄付とコンテキストに基づいてパターンを検索しますが、パラメーターは安定している必要があります。
  • 開始方法: 定義OrderCoffeeIntent、予約するitemそしてsize予測パラメータの組み合わせとして;注文が正常に行われた後、インテントを寄付します。毎日変化する日付をサポートされるパラメータの組み合わせに含めないでください。

3. チャット アプリに Focus の連絡先提案を統合する

  • 対処方法: ユーザーが頻繁に同僚にメッセージを送信する場合、Work Focus のヘルプ システムは、これらの連絡先への通知を許可することを提案します。
  • 実行する価値がある理由: iOS 15 ではINSendMessageIntent寄付を行っている人々に連絡して、どの人々が現在のフォーカスに強く関係しているかを判断してください。
  • 開始方法: メッセージの送信に成功したら寄付してくださいINSendMessageIntent;適切な値を設定しますgroupIdentifier、セッションが削除されたとき、または連絡先の有効期限が切れたときに、寄付をクリーンアップします。

4. 予約アプリにチェックアウトと空港リマインダーの入り口を作成する

  • やるべきこと: レストランの予約やフライト情報が到着したら、システムが適切な時間に出発またはチェックインのリマインダーを表示できるようにします。
  • 実行する価値がある理由: セッションが明示的に言及されているINGetReservationDetailsIntent寄付は、レストランの予約、フライトのチェックイン、地図の提案に充てられます。
  • 開始方法: 予約を作成した後に寄付してくださいINGetReservationDetailsIntent;予約をキャンセルするときに使用しますidentifier対応する寄付を削除します。

5. ポッドキャスト アプリに未聴のエピソードの提案を提供する

  • 内容: ユーザーがロック画面またはコントロール センターを開いたときに、まだ聞いていない番組の新しいエピソードを簡単に確認できるようになります。
  • 実行する価値がある理由:INPlayMediaIntentiOS 15のNow Playing UIに入ります。INUpcomingMediaManager未使用のメディアのリストが利用可能です。
  • 開始方法: メディアを再生しながら寄付しますINPlayMediaIntent; ユーザーの未再生コンテンツ リストを維持します。INUpcomingMediaManagerシステムに提供されます。

関連セッション

コメント

GitHub Issues · utterances