WWDC Quick Look 💓 By SwiftGGTeam
Add intelligence to your widgets

Add intelligence to your widgets

元の動画を見る

ハイライト

iOS 15 では、ウィジェットの提案と強化されたスマート回転メカニズムが導入されています。開発者は 3 つの API (INRelevantShortcut、TimelineEntryRelevance、INInteraction) を使用して、ユーザーが手動でウィジェットを追加することなく、適切なタイミングでユーザーのスマート スタックにウィジェットを自動的に表示させることができます。

主な内容

受動的な待機から積極的な登場へ

以前は、ユーザーがウィジェットをホーム画面に追加した後、ウィジェットはそこで修正されていました。ユーザーは積極的にスワイプして検索する必要があり、シーンに応じてシステムが自動的に切り替えることはありません。これは、多くのウィジェットがほとんどの時間「スリープ」状態であり、ユーザーは潜在的に役立つウィジェットがインストールされていることにさえ気づいていないことを意味します。

iOS 15 はこのパラダイムを変えます。ウィジェットの提案を使用すると、システムは、ユーザーの行動とアプリケーションによって提供される情報に基づいて、スマート スタックにウィジェットを一時的に挿入できます。Smart Rotate を使用すると、システムは複数のウィジェットを自動的に切り替えて、その時点で最も関連性の高い情報を表示できます。

ウィジェットをスマートにする 3 つの方法

Apple は、開発者が必要に応じて組み合わせることができる 3 つの独立した API を提供しています。

  1. INRelevantShortcut: アプリケーションはシステムに「今表示する価値のある情報がある」ことを積極的に通知し、システムは一時的にウィジェットをスマート スタックに挿入します。
  2. TimelineEntryRelevance: ウィジェットは各タイムライン エントリにスコアを付け、このエントリがどの程度表示に値するかをシステムに伝えます。
  3. INInteraction: アプリケーションは特定の情報を閲覧するユーザーの行動を記録し、システムはルールを学習した後、自動的にその情報を推奨します。

これら 3 つの API は、個別に使用することも、組み合わせて使用​​することもできます。中心的なアイデアは、ウィジェットを「受動的待機」から「能動的外観」に変更することです。

##詳細

INRelevantShortcut を使用してウィジェットの提案を実装する (09:14)

アプリが価値の高いシーンを検出すると、INRelevantShortcutこれにより、システムは対応するウィジェットをユーザーのスマート スタックに一時的に挿入できるようになります。

// 用户刚刚完成一笔消费,捐赠相关 shortcut
var relevantShortcuts: [INRelevantShortcut] = []

let intent = ViewRecentPurchasesIntent()
intent.card = Card(identifier: card.identifier)
intent.category = .all

if let shortcut = INShortcut(intent: intent) {
    let relevantShortcut = INRelevantShortcut(shortcut: shortcut)
    relevantShortcut.shortcutRole = .information
    relevantShortcut.widgetKind = "CardRecentPurchasesWidget"

    let dateProvider = INDateRelevanceProvider(
        start: Date(),
        end: Date(timeIntervalSinceNow: 1800)
    )
    relevantShortcut.relevanceProviders = [dateProvider]

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

キーポイント:

  • shortcutRoleに設定.informationこのウィジェットが情報コンテンツを表示することを示します
  • widgetKindウィジェットの種類文字列と一致する必要があります
  • INDateRelevanceProvider有効期間は 30 分に指定されており、その後はシステムが自動的にウィジェットを削除します。
  • 全体を交換することによってrelevantShortcuts以前の寄付を更新または取り消すための配列

TimelineEntryRelevance を使用して Smart Rotate を実装する (12:35)

スマート スタックにすでに存在するウィジェットの場合は、次を使用できます。TimelineEntryRelevanceこのウィジェットにいつ回転するかをシステムに知らせます。

struct CardRecentPurchasesEntry: TimelineEntry {
    let date: Date
    let relevance: TimelineEntryRelevance?
    let card: IntentCard?
    let category: PurchaseCategory
}

let relevance = TimelineEntryRelevance(score: 16.29, duration: 1800)
let entry = CardRecentPurchasesEntry(
    date: Date(),
    relevance: relevance,
    card: card,
    category: category
)

キーポイント:

  • scoreこれは相対的なスコアであり、値が高いほど表示に値します。正の数は回転できることを意味し、0 はスキップできることを意味します。
  • durationスコアの有効期間(秒)を指定します。有効期限が切れると、システムはそれを 0 として扱います。
  • スコアの絶対値は重要ではありません。重要なのは、同じウィジェットのすべてのタイムライン エントリ間の相対的なサイズです。
  • 設定duration: 0関連性を提供する次のエントリまでスコアが有効であることを示します

INInteraction を使用してシステムにユーザーの習慣を学習させます (17:01)

ユーザーがアプリ内のウィジェット コンテンツに関連する情報を閲覧したときに、INInteraction, システムはユーザーの行動パターンを学習し、ユーザーが再度表示する可能性が高いと予測した場合にウィジェットを自動的に推奨します。

.onAppear {
    let intent = ViewRecentPurchasesIntent()
    intent.card = Card(identifier: card.id.uuidString, displayString: card.name)
    intent.category = .all

    let interaction = INInteraction(intent: intent, response: nil)
    interaction.donate { error in
        if let error = error {
            print(error.localizedDescription)
        }
    }
}

キーポイント:

  • 寄付のタイミングが重要です。ユーザーがウィジェットのコンテンツに対応する情報を表示している間に寄付してください。
  • システムは複数の寄付データポイントを収集し、行動モデルを確立します。
  • 寄付されたインテントは、ウィジェット設定で使用されるインテントとまったく同じである必要があります
  • この方法では、アプリケーションが「いつ表示するか」を積極的に決定する必要はなく、システムが履歴データに基づいて決定します。

インテント定義ファイルの設定

使用INRelevantShortcutそしてINInteraction事前に、インテント定義ファイルで次のことを確認する必要があります。 1.「意図はSiriの提案の対象となる」にチェックが入っている 2. 必要なパラメータを含むサポートされている組み合わせを作成しました

重要ポイント

  1. やるべきこと: 電子商取引/支払いアプリケーションに「最近の取引」ウィジェットを追加します。これは、ユーザーが支払いを完了すると自動的にポップアップします。
  • 実行する価値がある理由: 組み合わせるINRelevantShortcut + INDateRelevanceProvider、ユーザーはアプリを開かずに、消費後 30 分以内にホーム画面で取引の詳細を直接確認できます。
  • 開始方法:IntentConfigurationウィジェット、ユーザーが支払いを完了したときにコールバックで寄付しますINRelevantShortcut
  1. やるべきこと: フィットネス アプリにトレーニング ステータス ウィジェットを追加し、現在のトレーニング強度に応じて表示を自動的に切り替えます。
  • 実行する価値がある理由: 活用しましょうTimelineEntryRelevanceスコア メカニズムにより、高強度のトレーニング中にウィジェットが自動的にスマート スタックの先頭にジャンプし、低強度のトレーニング中に非表示になります。
  • 開始方法:getTimelineスコアはトレーニング データに基づいて計算されます。トレーニング強度が高いほど、スコアは高くなります。
  1. やるべきこと: ニュース/コンテンツ アプリケーションに「続きを読む」ウィジェットを追加し、ユーザーの読書習慣を学習します。
  • 実行する価値がある理由: 合格INInteractionユーザーの読書行動を寄付すると、ユーザーが通常読書をする時間にシステムが自動的にウィジェットを推奨します。
  • 開始方法: 記事詳細ページonAppear時間の寄付INInteraction、記事カテゴリをインテントパラメータとして使用します
  1. やるべきこと: 旅行アプリに旅行ウィジェットを追加すると、飛行機や電車の出発前にホーム画面に自動的に表示されます。
  • 実行する価値がある理由:INRelevantShortcut協力するINDateRelevanceProvider、旅行開始の2時間前から終了1時間後まで自動的に表示されます。
  • 開始方法: 旅程データが更新されるときに開始時刻と終了時刻を計算し、対応する時間枠の関連ショートカットを寄付します。

関連セッション

コメント

GitHub Issues · utterances