WWDC Quick Look 💓 By SwiftGGTeam
Add Shared with You to your app

Add Shared with You to your app

元の動画を見る

ハイライト

「Shared with You」は iOS 15 で導入された機能で、iOS 16 ではサードパーティ開発者に公開されました。その中心的なコンセプトは、友達がメッセージで送信したコンテンツはチャット履歴に埋もれるべきではなく、関連するアプリを開いたときに自動的に表示されるべきであるということです。


主要内容

友人がメッセージでドラマ、記事、または歌を送信するとき、ユーザーはコンテンツを消費するコンテキストにいないことがよくあります。スピーチで挙げられた例は次のとおりです。友人がテレビ番組を勧めるとき、あなたはスーパーマーケットで買い物をしています。 TV アプリを開いて番組を見ようとすると、メッセージが新しいチャットで殺到します (00:46)。

Shared with You はこのブレークポイントを解決します。コンテンツは引き続きメッセージから共有されますが、ユーザーがコンテンツが実際に消費されるアプリにアクセスすると、システムによってこれらのリンクが再表示されることがあります。iOS 15 では、まず Safari、ニュース、音楽、ポッドキャスト、TV アプリ、写真にアクセスできるようになります。 iOS 16 では、「Shared with You」がサードパーティのアプリ、リンク、コンテンツに拡張されています (01:51)。

アクセス エクスペリエンスは 2 つの部分で構成されます。「Shared with You」シェルフはアプリの閲覧ページに配置され、メッセージで共有されたコンテンツを表示します。 Shared with You アトリビューション ビューはコンテンツ カードまたは詳細ページに配置され、誰が共有したかを表示し、ユーザーは対応するメッセージ会話 (02:16) に直接戻ることができます。

基礎となる依存関係はユニバーサル リンクです。システムは、アプリと Web サイト間の双方向の関連付けを通じて、リンクがどのアプリに属しているかを判断します。ユーザーは事前に承認する必要はなく、ピン留めされたリンク自体が、「Shared with You」にコンテンツを表示するための暗黙の許可となります。自動共有をオンにすると、同じアプリの後続のコンテンツも自動的にリストに入力されます (05:59)。

詳細

まずユニバーサル リンクを使用してコンテンツの帰属を確立します

(09:27) アクセスの順序は明確です。最初にユニバーサル リンクをサポートし、次に Shared with You 機能を Xcode の機能に追加し、最後にアプリで Shared with You フレームワークを使用します。

ユニバーサル リンクでは、アプリと Web サイトが双方向の関連付けを確立する必要があります。アプリは関連ドメインの権利を追加し、Web サイトはアプリによって処理される URL を宣言する JSON ファイルを提供します。ユーザーが共有リンクをクリックすると、システムはユニバーサル リンクをユーザー アクティビティとしてアプリ デリゲートに渡して処理します (09:51)。

// 概念示例:Universal Links 的接入点
func application(
    _ application: UIApplication,
    continue userActivity: NSUserActivity,
    restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void
) -> Bool {
    guard userActivity.activityType == NSUserActivityTypeBrowsingWeb,
          let url = userActivity.webpageURL else {
        return false
    }

    // 根据 url 导航到 App 内对应内容
    return openContent(for: url)
}

キーポイント:

  • NSUserActivityTypeBrowsingWeb: この呼び出しがユニバーサル リンクから発信されていることを示します。
  • userActivity.webpageURL: あなたと共有 アプリに渡される後続のコンテンツ URL も、同じ一連のリンク帰属メカニズムに基づいています。
  • openContent(for:): これはアプリ独自のルーティング ロジックであり、URL をコンテンツ詳細ページにマッピングする役割を果たします。
  • この段落は概念的な例です。このスピーチでは完全なアプリ デリゲート コードは示されておらず、システムによって提供されるユーザー アクティビティに応答する方法のみが説明されています。

Shared with You シェルフのコンテンツを列挙します

(10:42) iOS 16 では、次の 3 つのコア クラスを持つ Shared with You フレームワークが追加されます。SWHighlightCenterSWHighlightSWAttributionViewSWHighlightCenter現在のアプリの「あなたと共有」コンテンツを取得する責任があります。SWHighlight共有コンテンツ URL をラップします。SWAttributionView共有者情報の表示とメッセージ会話への接続を担当します。

// Enumerate Shared with You shelf

class SharedWithYouViewController: UIViewController, SWHighlightCenterDelegate {
    let highlightCenter = SWHighlightCenter()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        highlightCenter.delegate = self
    }
    
    func highlightCenterHighlightsDidChange(_ highlightCenter: SWHighlightCenter) {
        for highlight in highlightCenter.highlights {
            let highlightURL = highlight.url
            // Generate a rich preview for the Highlight
        }
    }
}

キーポイント:

  • SWHighlightCenter(): Shared with You コンテンツを読み取るためのエントリ オブジェクトを作成します。
  • highlightCenter.delegate = self: 現在のコントローラーがコンテンツの追加、削除、または更新の通知を受信できるようにします。
  • highlightCenterHighlightsDidChange: Shared with You は、リストが変更されると呼び出されます。
  • highlightCenter.highlights:戻るSWHighlight配列、アプリは古い配列を保持し、新しい配列との差分を実行できます。
  • highlight.url: メッセージで共有されたコンテンツ URL を取得し、それを使用してシェルフにサムネイル、タイトル、サブタイトルを生成します。

コンテンツにアトリビューション ビューを表示する

(13:01) アトリビューション ビューはシステムによって描画される独立したビューで、共有者の名前とアバターが表示され、コンテンツがメッセージに固定されているかどうかも表示されます。Apple は、プロセス外のレンダリングであることを強調しています。アプリはコンテンツとビューを取得するだけで、メッセージ受信者や特定の会話にはアクセスできません (08:47)。

// Setting appearance of Attribution View

let attributionView = SWAttributionView()
attributionView.highlight = self.highlightCenter.highlights[index]
attributionView.preferredMaxLayoutWidth = maximumWidthForView

キーポイント:

  • SWAttributionView(): 共有ソースを表示するシステム ビューを作成します。
  • attributionView.highlight:何かを置きますSWHighlightアトリビューションビューにバインドします。設定後、システムがトリガーされて共有者情報が表示されます。
  • preferredMaxLayoutWidth: ビューに利用可能な最大幅を指示し、ビューはこのスペース内に収まるか、このスペース内に収まります。
  • アトリビューションビュー用に十分な垂直スペースを残すための講義リマインダー。高さはダイナミック タイプのフォント サイズ (14:18) に応じて変化します。

シーンの配置と表示の制御

(14:36) アトリビューションビューでは、最大幅内で水平方向の配置を設定できます。スピーチで示されたのは、leading、説明を次のように設定することもできます。centerまたはtrailing

// Horizontal Alignment for Attribution View

let attributionView = SWAttributionView()
attributionView.highlight = self.highlightCenter.highlights[index]
attributionView.preferredMaxLayoutWidth = maximumWidthForView
attributionView.horizontalAlignment = .leading

キーポイント:

  • horizontalAlignment: アトリビューション ビューのコンテンツの位置を最大幅内で制御します。
  • .leading:カードの下側など、左から読むレイアウトに適しています。
  • preferredMaxLayoutWidthそしてhorizontalAlignment一緒に使用されます。前者は利用可能なスペースを定義し、後者はスペース内の位置を定義します。

14:51displayContextユーザーがコンテンツをどのように消費しているかをシステムに伝えます。デフォルト値は次のとおりですsummary、コンテンツが要約状態または閲覧状態にあることを示します。ユーザーが映画を見ているときやポッドキャストを聞いているときなどのシナリオでは、次のように設定する必要があります。detail。このフィードバックは、Siri の提案が「あなたと共有」コンテンツをランク付けする方法に影響します。

// Display Context for Attribution View

let attributionView = SWAttributionView()
attributionView.highlight = self.highlightCenter.highlights[index]
attributionView.preferredMaxLayoutWidth = maximumWidthForView
attributionView.horizontalAlignment = .center
attributionView.displayContext = .summary

キーポイント:

  • displayContext = .summary:コンテンツが閲覧概要の形式で表示されていることを示します。
  • displayContext = .detail: ユーザーが実際にコンテンツを消費する詳細なシナリオに適しています。映画を見たりポッドキャストを聴いたりすることがスピーチの例として使用されます。
  • このプロパティは、ビューをウィンドウに追加する前に設定する必要があります。
  • このシステムでは、背景ごとにアトリビューション ビューの背景スタイルを選択することもできます。カラーは単色の背景に使用でき、マテリアル ブラーは複数色の背景に使用できます (15:47)。

Shared with You メニューをコンテンツ メニューに統合する

(16:21) アトリビューション ビューには、返信や削除などのコンテキスト メニューが付属しています。ユーザーは、[返信] をクリックするか、アトリビューション ビューを直接クリックして、対応するメッセージ ダイアログに入ることができます。 Remove は、今後このコンテンツを表示しないように Shared with You に指示するために使用されます。

アプリは、アトリビューション ビューのメニュー項目を独自のコンテンツ メニューに追加することもできます。「削除」のタイトルはカスタマイズできますが、文字列にはローカライズされた「削除」が含まれている必要があります。Safari の例は、「リンクの削除」 (16:48) です。

// Add Shared with You Content Menu to your app’s content

let attributionView = SWAttributionView()
attributionView.highlight = self.highlightCenter.highlights[index]
attributionView.menuTitleForHideAction = "Remove Item"

let contextMenuConfig = UIContextMenuConfiguration(identifier: nil,previewProvider: nil) { [weak self] _ in
        let additionalMenu = attributionView.supplementalMenu
        // Append additionalMenu items to your content’s menu items
}

キーポイント:

  • menuTitleForHideAction: 「リンクの削除」や「項目の削除」などの明確なコピーライティングに適した、削除メニュー項目のタイトルをカスタマイズします。
  • UIContextMenuConfiguration: コンテンツ自体のコンテキスト メニューを設定します。
  • attributionView.supplementalMenu: Shared with You が提供する追加メニューを入手します。
  • Append additionalMenu: システム メニュー項目をコンテンツ メニューのインライン位置または末尾に追加して、ユーザーがコンテンツを長押しした場合でも、システム メニュー項目を返信したり削除したりできるようにします。

重要ポイント

  • コンテンツの推奨ごみ箱を作成する: ビデオ、ポッドキャスト、記事アプリのホームページに「あなたと共有」シェルフを追加して、ユーザーが消費していないメッセージ リンクを再表示します。入り口は、SWHighlightCenter.highlights、使用highlight.urlコンテンツカードを生成します。

  • 詳細ページに「誰が推薦したか」エントリを追加: 映画、音楽、レシピ、または製品の詳細ページに配置します。SWAttributionViewにより、ユーザーは共有のソースを確認し、メッセージに直接戻って返信できるようになります。入り口は、SWAttributionView.highlightアトリビューション ビューのクリックを操作します。

  • 表示コンテキストを使用して並べ替えフィードバックを改善: ページの閲覧で使用されます.summary、再生ページまたは読書ページで使用します.detail、ユーザーがコンテンツを消費しているかどうかをシステムに知らせます。入り口は、attributionView.displayContext、設定時間はビューがウィンドウに追加される前です。

  • 統合コンテンツ長押しメニュー: アプリのオリジナルカードメニューに「あなたと共有」の返信/削除メニューを追加します。入り口は、attributionView.supplementalMenuそしてmenuTitleForHideAction

  • ユニバーサル リンクの診断を修正することを優先します: Shared with You は、コンテンツの帰属を識別するためにユニバーサル リンクに依存しています。まず内部チェック ページを作成して、関連ドメインの資格、Web サイトの JSON ファイル、アプリ内 URL ルーティングが完了しているかどうかを確認してから、シェルフ ビューとアトリビューション ビューにアクセスします。

関連セッション

コメント

GitHub Issues · utterances