WWDC Quick Look 💓 By SwiftGGTeam
What's new in SharePlay

What's new in SharePlay

元の動画を見る

ハイライト

WWDC 2022 の SharePlay アップデートは主に 1 つの変更を中心に展開しています。開発者は独自のボタンとポータルを使用して SharePlay を開始できるようになり、システムが提供する FaceTime ポータルに完全に依存しなくなります。同時に、GroupSessionMessenger の信頼性が強化され、共有エクスペリエンスのメッセージングがより安定しました。


主要内容

WWDC 2021 で発表された SharePlay を使用すると、ユーザーは FaceTime 通話中に同時にビデオを見たり、音楽を聴いたり、アプリを使用したりすることができます。その入り口は FaceTime です。ユーザーは通話中にアプリが SharePlay をサポートしていることを確認し、システムが提供するボタンをクリックして起動します。

しかし問題があります。ユーザーが FaceTime 通話に参加していない場合はどうなるでしょうか。アプリ内に「友達と一緒に見る」ボタンがある場合、ユーザーはそれをクリックした後、FaceTime 通話を開始し、戻って SharePlay をクリックする必要があります。このプロセスは長すぎます。

WWDC 2022 のアップデートは、この問題点に対処します。アプリ内にボタンを配置し、クリックされたときに SharePlay セッションを直接起動できるようになりました。 FaceTime 通話の設定はシステムが処理するため、ユーザーはアプリを離れる必要はありません。同時に、GroupSessionMessenger信頼性が向上し、信頼性の低いネットワーク上でも参加者間のメッセージングが適切に機能するようになりました。


詳細

GroupActivity を登録する新しい方法

(02:06) 過去には、GroupActivityアプリ経由ですInfo.plist宣言により登録されました。 WWDC 2022 では、以下を使用した新しいプログラムによる登録方法が提供されます。NSItemProviderそしてregisterGroupActivity

// Register GroupActivity
let itemProvider = NSItemProvider()
itemProvider.registerGroupActivity(WatchTogether())

// Provide the ItemProvider to the ShareSheet
let configuration = UIActivityItemsConfiguration(itemProviders: [itemProvider])

UIActivityViewController(activityItemsConfiguration: configuration)

キーポイント:

  • registerGroupActivity(_:)実行時に登録しますGroupActivityインスタンスでは不要になりましたInfo.plist静的宣言。
  • UIActivityItemsConfiguration引き継ぐNSItemProvider共有メニューのコンテンツを構成するために使用される配列。
  • この方法はシステム共有メニュー (ShareSheet) に統合されており、SharePlay は共有オプションのアクティビティとして表示されます。

SharePlay が共有メニューにどのように表示されるかを制御します

システム共有メニューのSharePlayの表示モードを柔軟に制御できます。シーンで SharePlay を共有メニューに表示する必要がない場合、または顕著なオプションとして SharePlay を表示する必要がない場合は、対応する API があります。

let shareSheet = UIActivityViewController(activityItemsConfiguration: configuration)

// Show SharePlay non-prominently
shareSheet.allowsProminentActivity = false
let shareSheet = UIActivityViewController(activityItemsConfiguration: configuration)

// Exclude SharePlay activity
shareSheet.excludedActivityTypes = [.sharePlay]

キーポイント:

  • allowsProminentActivity = false(02:14) SharePlay を共有メニューの目立つオプションにしないようにします。これは、SharePlay を人目を引くようにしたくないシナリオに適しています。
  • excludedActivityTypes = [.sharePlay](02:15) 共有メニューから SharePlay オプションを完全に削除します。これは、SharePlay 機能が一時的に利用できないシナリオに適しています。
  • これら 2 つのプロパティにより、SharePlay を変更せずに共有メニューにどのように表示するかをきめ細かく制御できます。GroupActivity登録自体。

独自のボタンで SharePlay を起動する

(02:44) 新しいコア API は次のとおりです。GroupActivitySharingController。アプリ内の任意の場所にボタンを配置して、クリックすると SharePlay 連絡先ピッカーを直接表示できます。

let controller = GroupActivitySharingController(WatchTogetherActivity())
present(controller, animated: true)

キーポイント:

  • GroupActivitySharingControllerを受け取るGroupActivityたとえば、初期化後に直接提示するだけです。
  • ユーザーに表示されるインターフェイスは、システムによって提供される連絡先セレクターです。連絡先を選択すると、FaceTime 通話が自動的に開始され、SharePlay セッションが開始されます。
  • これは、ユーザーがアプリを離れたり、FaceTime 通話を手動で開始したりする必要がないことを意味します。
  • ボタンをどこに配置するかはあなた次第です。ビデオ プレーヤーの横、ナビゲーション バーの右側、または自分にとって自然な場所であればどこでも構いません。

GroupSessionMessenger の信頼性強化

WWDC 2021のSharePlayでは、GroupSessionMessenger参加者間でカスタム メッセージを送信するために使用されます。しかし問題があります。参加者のネットワークの 1 つが不安定な場合、メッセージが失われる可能性があります。

WWDC 2022 の改善GroupSessionMessenger根底にある伝送の信頼性。 Apple は新しい API を提供しませんが、既存の API の基礎となる実装を強化して、信頼性の低いネットワークでもメッセージを配信できるようにします。

これは、リアルタイム同期を必要とするアプリにとって特に重要です。たとえば、共同作業用のホワイトボード アプリでは、ユーザーがキャンバス上にストロークを描画し、そのストローク データをメッセンジャーを通じてすべての参加者に送信する必要があります。メッセージが失われると、他の参加者はトランザクションを見ることができなくなります。 WWDC 2022 の改善により、このシナリオの信頼性がさらに高まりました。

ストロークのリアルタイム同期の例

(08:21) セッションでは、SwiftUI を使用した共同描画ボードのシーンが表示されます。DragGestureユーザーのストロークをキャプチャして同期します。

var strokeGesture: some Gesture {
    DragGesture()
        .onChanged { value in
            canvas.addPointToActiveStroke(value.location)
        }
        .onEnded { value in
            canvas.addPointToActiveStroke(value.location)
            canvas.finishStroke()
        }
}

キーポイント:

  • onChangedドラッグ中に継続的に発火し、各タッチ ポイントを現在のストロークに追加します。
  • onEndedドラッグの最後に最後の点を追加して呼び出しますfinishStroke()ストロークを完了します。
  • このジェスチャの背後でストローク データが渡されますGroupSessionMessenger他の参加者に送信することで、複数人でのリアルタイム共同描画を実現します。
  • この例は、SharePlay が「ビデオを一緒に見る」ためだけではなく、リアルタイムの入力同期を必要とするコラボレーション シナリオにも適していることを示しています。

ベストプラクティス

このセッションでは、SharePlay をアプリに統合するためのいくつかのベスト プラクティスもまとめられました。

  1. 入り口は目立ちますが、邪魔にならないようにします。 SharePlay がアプリの中核機能である場合は、それを目立つようにします。単なる補助機能であれば、専用ボタンを設けずに共有メニューに入れることも検討できます。

  2. さまざまな参加者数に合わせて UI を設計します。 2 人で一緒にビデオを見る体験は、5 人で協力して絵を描く体験とは異なります。参加者の数が UI レイアウトに与える影響を考慮してください。

  3. ネットワークの中断を処理します。それでもGroupSessionMessenger信頼性は向上しますが、ネットワークが切断される可能性は残ります。アプリは参加者の切断と再接続を適切に処理する必要があります。

  4. ヒューマン インターフェイス ガイドラインに準拠します。 Apple は、アイコンの使用法、ポータルのデザイン、セッション中の UI の動作など、SharePlay に関する HIG ドキュメントを提供しています。


重要ポイント

  1. SharePlay ポータルをアプリ内に配置: アプリの核となるエクスペリエンスが共有に適している場合 (ビデオを一緒に見る、音楽を聴く、絵を描くなど)、ユーザーが FaceTime でアプリを見つけるのを待つ必要はありません。アプリ内に「一緒に見る」または「一緒に聞く」ボタンを設置してご利用くださいGroupActivitySharingControllerSharePlayを起動するだけです。実行する価値がある理由: ユーザーのステップが、「FaceTime の開始 → アプリの検索 → SharePlay のクリック」から「アプリ内のボタンをクリック」に減ります。開始方法: ビデオ プレーヤーの右上隅やナビゲーション バーの右側など、ボタンを配置する自然な場所を見つけます。

  2. 軽量のエントリとして共有メニューを使用します: UI に専用のボタンを追加したくない場合は、次のようにすることができます。registerGroupActivityそしてUIActivityViewControllerシステム共有メニューに SharePlay を追加します。この方法の利点は、既存の UI を変更する必要がないことです。価値がある理由: SharePlay がコア機能ではないアプリの場合、共有メニューのエントリは最も邪魔になりません。開始方法: 登録するGroupActivity、 構成UIActivityItemsConfiguration、必要に応じて共有メニューをポップアップ表示します。

  3. コラボレーション シナリオには GroupSessionMessenger を使用します: WWDC 2022 によるメッセンジャーの信頼性の向上により、リアルタイム コラボレーションがより実現可能になります。ホワイトボード、ドキュメントの共同作業、またはゲームを行っている場合、メッセンジャーを介してカスタム データを送信すると、「再生の進行状況を同期する」よりも充実した共有エクスペリエンスを実現できます。実行する価値がある理由: Messenger は、SharePlay が「受動的な同期」から「能動的なコラボレーション」に移行するための重要な API です。開始方法: でGroupSessionコールバックでメッセンジャー インスタンスを取得し、メッセージ タイプを定義して、ユーザーの操作時に送信します。


関連セッション

コメント

GitHub Issues · utterances