WWDC Quick Look 💓 By SwiftGGTeam
Add configuration and intelligence to your widgets

Add configuration and intelligence to your widgets

元の動画を見る

ハイライト

iOS 14 および macOS Big Sur の WidgetKit は、インテント設定、Siri Suggestions の寄付、および TimelineEntryRelevance を使用して、同じウィジェット インスタンスにユーザーが選択したコンテンツを表示させ、Smart Stack が適切なタイミングでコンテンツを最上位に表示できるようにします。

主要内容

多くのウィジェットの最初のバージョンでは情報を表示できますが、ユーザーはすぐに 2 番目の問題に遭遇することになります。それは、同じアプリ内に複数のコンテンツがあり、そのうちの 1 つだけがホーム画面に表示されるということです。取引アプリの例が典型的です。ユーザーは複数のカードを持っている可能性があり、最近の購入ウィジェットにはそのうちの 1 つのカードからの取引のみが表示される必要があるか、食品や交通機関などのカテゴリのみが表示される必要がある場合があります。

開発者がすべての選択肢に対して独自の設定ページを作成する必要がある場合、ウィジェットは重くなります。 Apple は別の方法を採用しています。開発者がインテント定義ファイルでパラメータを宣言し、システムがこれらのパラメータに基づいてウィジェットの背面に構成インターフェイスを生成します。ユーザーは、ウィジェットを長押しして「ウィジェットの編集」をクリックすることで、カードとカテゴリーを選択できます。構成されたインテント インスタンスは、実行時にウィジェット拡張機能に渡されます。 (03:24)

「どのコンテンツを表示するか」は設定で解決します。インテリジェントなスケジューリングで「いつ表示するか」を解決します。スマート スタックは、ユーザーの行動とアプリによって提供される相関信号に基づいて、適切なウィジェットをスタックの先頭に移動します。天気予報アプリでの今後の雷雨や、取引アプリでの 50 ドル以上の消費はすべて、セッションで与えられた特定のシナリオです。 (17:43)

このセッションの鍵は、構成とインテリジェントなスケジューリングを結び付けることです。ユーザーはウィジェット上のカードを選択します。ユーザーが同じカードを表示すると、アプリはインテントを寄付します。システムはこのタイミング パターンを学習します。同じカードのウィジェットがすでにスマート スタックに存在する場合、システムはそれを正しいタイミングで表示することができます。 (20:04)

詳細

インテントを使用してウィジェット構成アイテムを定義する

(03:24) ウィジェットの設定インターフェイスはインテントから来ています。インテントには一連のパラメーターが含まれており、それぞれが構成 UI 上の 1 行になります。デモでViewRecentPurchasesIntentパラメータは 2 つあります。CardそしてCategory

Intent Definition File
ViewRecentPurchases intent

parameters:
  Card      -> custom Card type
  Category  -> enum, default value: All

eligible:
  Intent is eligible for widgets

キーポイント:

  • Intent Definition Fileインテント、パラメータ、タイプが宣言される Xcode 内の場所です。 -Intent is eligible for widgetsこのインテントをウィジェットとして構成可能にします。 -Cardカスタム タイプはアプリ内のカードを表すため、カスタム タイプを使用します。 -Category分類セットは固定されているため、列挙型を使用します。
  • Xcode は、たとえば、インテント クラスを生成します。ViewRecentPurchasesIntent、これには、対応するパラメーター属性が含まれます。

構成アイテムに動的オプションを提供する

(09:40) 多くの設定値は、インテント定義ファイルにハードコーディングできません。クレジット カードのリストはログイン ユーザーに応じて変更されるため、Card パラメーターには動的なオプションが必要です。動的オプションをオンにすると、システムは、候補値を提供するためにアプリまたはインテント拡張機能を必要とするインテント ハンドラー プロトコルを生成します。

Card parameter
  Dynamic Options: on

generated methods:
  provideCardOptionsCollection
  defaultCard

runtime data:
  app cards -> custom Card objects -> INObjectCollection -> completion handler

キーポイント:

  • provideCardOptionsCollectionユーザーが選択できるカードのリストを返します。 -defaultCardウィジェットが最初に追加されたときに使用されるデフォルトの Card を返します。 -INObjectCollectionタイル化されたリストを返すことも、セクションごとにグループ化することもできます。
  • 検索を開始した後、provideCardOptionsCollection検索語が受信され、ユーザーが入力すると追加の検索結果が返されます。
  • 新しいウィジェットをホーム画面にドラッグすると、デフォルトのカードの内容が最初に表示されるため、デフォルト値は重要です。

StaticConfiguration から IntentConfiguration への切り替え

(13:47) 構成項目を定義した後、ウィジェット拡張機能を静的構成からインテント構成に変更する必要があります。プロバイダーも次のように変更する必要がありますIntentTimelineProvider, これにより、タイムライン メソッドはユーザーが選択したインテント パラメーターを受け取ります。

Widget definition:
  StaticConfiguration
    -> IntentConfiguration(intent: ViewRecentPurchasesIntent)

Timeline provider:
  TimelineProvider
    -> IntentTimelineProvider

timeline input:
  intent.card
  intent.category

キーポイント:

  • IntentConfigurationこのウィジェットをどのインテントで構成する必要があるかを WidgetKit に指示します。 -IntentTimelineProviderこのメソッドはもう 1 つのインテント パラメータを取得します。
  • ウィジェットはデフォルトのカードを表示するだけでなく、intent.cardトランザクションデータを選択します。 -intent.categoryトランザクション リストのフィルタリングを続けることができます。
  • 同じウィジェット タイプに複数のインスタンスを持つことができ、各インスタンスは異なる構成を保存します。

構成ページのテキスト、色、パラメータの関係をカスタマイズします。

(15:13) システムは構成 UI を生成しますが、開発者がまったく調整できないわけではありません。ウィジェット拡張機能では、構成ページのタイトルと説明を設定できます。アセット カタログとビルド設定では、構成ページのアクセント カラーと背景色を設定できます。インテント定義ファイルは、パラメータを別のパラメータに依存させることができます。

configuration UI customization:
  configurationDisplayName
  description
  Global Accent Color Name
  Widget Background Color Name

parameter relationship:
  Mirror Calendar App = false
    -> show Calendar parameter

キーポイント:

  • configurationDisplayNameそしてdescriptionウィジェット設定関連のインターフェイスに表示されます。
  • 名前付きのカラーは、ウィジェット拡張機能のアセット カタログに配置されます。 -Global Accent Color Nameアクセントカラーをコントロール。 -Widget Background Color Nameウィジェットの背面の背景色を制御します。
  • パラメータの親子関係がカレンダーに適している 例: ミラーカレンダーアプリを終了すると、手動で選択したカレンダーパラメータが表示されます。

インテント寄付を使用してスマート スタックがユーザーの習慣を学習できるようにする

(19:13) スマート スタックは、ユーザーの行動に基づいてウィジェットを上部に移動します。 iOS 14 では、ショートカットやカスタム インテントの寄付もウィジェットの表示タイミングに影響を与えることができます。デモでは、ユーザーがアプリで特定のカードの最近の消費状況を確認すると、ホスト アプリが同じカードを寄付します。ViewRecentPurchasesIntent

setup:
  mark intent eligible for Siri Suggestions
  Supported Combinations: Card

host app behavior:
  user views recent purchases for AcmeCard
  create INInteraction with ViewRecentPurchasesIntent
  donate interaction

prediction:
  system predicts Card at the learned time
  matching configured widget can surface in Smart Stack

キーポイント:

  • Intent is eligible for Siri Suggestionsシステムにこの意図を予測させます。 -Supported Combinations予測に意味のあるパラメーターを指定します。
  • Card のみを選択した場合、Category はマッチングに参加せず、AcmeCard を表示するウィジェットが上位に移動する可能性があります。
  • カードとカテゴリを同時に選択すると、両方のパラメータに一致するウィジェットのみがシステムによって考慮されます。
  • 寄付はホストアプリ内で発生し、そのタイミングはユーザーが実際に対応する情報を閲覧したときとなります。

TimelineEntryRelevance を使用して重要なコンテンツにマークを付ける

(23:33) システムは、タイムライン エントリの関連性に基づいてウィジェットを表示するかどうかも決定します。TimelineEntryRelevance含むscoreそしてduration。デモでは、50 ドルを超える購入を関連性の高いイベントとして扱い、より高いスコアを使用して、このエントリが表示される価値が高いことをシステムに伝えます。

TimelineEntry:
  date timestamp
  rendered view
  relevance: TimelineEntryRelevance

TimelineEntryRelevance:
  score
  duration

score examples:
  1.0  -> purchase over $50
  0.1  -> minor purchase
  0.0  -> no recent purchase

キーポイント:

  • score他のアプリのウィジェットではなく、過去に同じウィジェットによって提供されたスコアとのみ比較してください。 -score0 以下は、現在関連情報がないため、先頭に移動しないことを意味します。 -durationライブスコアなど、時間枠が明確なコンテンツに適しています。 -duration0 の場合、関連性は次の関連性が受信されるまで持続します。
  • タイムラインの更新中に相関関係を変更したくない場合は、TimelineEntryRelevance空白のままにしておきます。

重要ポイント

1. 選択可能な口座残高ウィジェットを作成する

機能: ユーザーがホーム画面に複数の残高ウィジェットを配置できるようにし、各インスタンスにカード、アカウント、またはウォレットを表示します。

実行する価値がある理由: セッション トランザクション アプリの例としては、さまざまなカードに対して複数の最近の購入ウィジェットや期日ウィジェットを作成することが挙げられます。

開始方法: インテント定義ファイルでアカウント パラメーターを定義し、動的オプションを開いて、provideCardOptionsCollection現在のユーザーのアカウント リストを返し、ウィジェットを次のように変更します。IntentConfiguration

2. カテゴリ別にフィルタリングされた最近の記録ウィジェットを作成する

何をすべきか: ユーザーに「食品」、「交通」、「サブスクリプション」などのカテゴリを選択させると、ウィジェットには対応するレコードのみが表示されます。

実行する価値がある理由:Categoryこれは、デモの 2 番目のパラメーターです。デフォルト値は「All」で、フル録音から徐々に絞り込むのに適しています。

開始方法: カテゴリを enum パラメーターにし、そのデフォルト値を設定してから、IntentTimelineProviderインテント パラメータを使用して、タイムライン エントリのデータをフィルタリングします。

3. ユーザーがよく読むコンテンツを Smart Stack に寄付する

何をすべきか: ユーザーが毎日正午にプロジェクト、アカウント、またはコースをチェックするとき、システムにこの習慣を学習させ、事前にスマート スタックに対応するウィジェットを表示させます。

実行する価値がある理由: トランスクリプトの AcmeCard の例は、システムが提供されたインテントを使用して、ユーザーが特定の時間によく検索する情報を識別することを示しています。

開始方法: 構成されたウィジェットのインテントを Siri 提案対象としてマークし、主要なパラメーターのみを含むように設定します。Supported Combinations、ホストアプリで使用されますINInteractionユーザーが閲覧したインテントを寄付します。

4. 時間に敏感なイベントの関連性スコアを設定する

対処方法: オーバーブッキング、飛行機の搭乗、ゲーム開始、暴風雨警報などのイベントが発生したときに、システムによってウィジェットが上部に移動される可能性が高くなります。

実行する価値がある理由:TimelineEntryRelevancescoreこのウィジェットの履歴コンテンツに対するエントリの重要性を示します。スコアの高いエントリは、スマート スタックにより適しています。

開始方法: まず、独自のスコア ルールのセットを定義します。たとえば、イベントなしは 0、通常の更新は 0.1、重要なイベントは 1、次にタイムライン エントリに関連性を追加します。

5. 期間が固定されたアクティビティの期間を設定する

やるべきこと: 競技会、カンファレンス、ライブクラス、期間限定のプロモーションなどのイベントに関連性​​ウィンドウを設定し、イベント終了後にスマートスタックの機会が占有されないようにする。

実行する価値がある理由: セッション バスケットボール ウィジェットの例では、試合の開始から終了までを固定期間として使用しており、期間中のその後の更新では関連性を変更する必要はありません。

開始方法: アクティビティの開始時にタイムライン エントリを生成し、設定しますTimelineEntryRelevancescoreそしてduration;後続のスコアまたはステータスの更新のために UI のみを変更する場合は、関連性を空白のままにしておきます。

関連セッション

コメント

GitHub Issues · utterances