ハイライト
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 をアプリに統合するためのいくつかのベスト プラクティスもまとめられました。
-
入り口は目立ちますが、邪魔にならないようにします。 SharePlay がアプリの中核機能である場合は、それを目立つようにします。単なる補助機能であれば、専用ボタンを設けずに共有メニューに入れることも検討できます。
-
さまざまな参加者数に合わせて UI を設計します。 2 人で一緒にビデオを見る体験は、5 人で協力して絵を描く体験とは異なります。参加者の数が UI レイアウトに与える影響を考慮してください。
-
ネットワークの中断を処理します。それでも
GroupSessionMessenger信頼性は向上しますが、ネットワークが切断される可能性は残ります。アプリは参加者の切断と再接続を適切に処理する必要があります。 -
ヒューマン インターフェイス ガイドラインに準拠します。 Apple は、アイコンの使用法、ポータルのデザイン、セッション中の UI の動作など、SharePlay に関する HIG ドキュメントを提供しています。
重要ポイント
-
SharePlay ポータルをアプリ内に配置: アプリの核となるエクスペリエンスが共有に適している場合 (ビデオを一緒に見る、音楽を聴く、絵を描くなど)、ユーザーが FaceTime でアプリを見つけるのを待つ必要はありません。アプリ内に「一緒に見る」または「一緒に聞く」ボタンを設置してご利用ください
GroupActivitySharingControllerSharePlayを起動するだけです。実行する価値がある理由: ユーザーのステップが、「FaceTime の開始 → アプリの検索 → SharePlay のクリック」から「アプリ内のボタンをクリック」に減ります。開始方法: ビデオ プレーヤーの右上隅やナビゲーション バーの右側など、ボタンを配置する自然な場所を見つけます。 -
軽量のエントリとして共有メニューを使用します: UI に専用のボタンを追加したくない場合は、次のようにすることができます。
registerGroupActivityそしてUIActivityViewControllerシステム共有メニューに SharePlay を追加します。この方法の利点は、既存の UI を変更する必要がないことです。価値がある理由: SharePlay がコア機能ではないアプリの場合、共有メニューのエントリは最も邪魔になりません。開始方法: 登録するGroupActivity、 構成UIActivityItemsConfiguration、必要に応じて共有メニューをポップアップ表示します。 -
コラボレーション シナリオには GroupSessionMessenger を使用します: WWDC 2022 によるメッセンジャーの信頼性の向上により、リアルタイム コラボレーションがより実現可能になります。ホワイトボード、ドキュメントの共同作業、またはゲームを行っている場合、メッセンジャーを介してカスタム データを送信すると、「再生の進行状況を同期する」よりも充実した共有エクスペリエンスを実現できます。実行する価値がある理由: Messenger は、SharePlay が「受動的な同期」から「能動的なコラボレーション」に移行するための重要な API です。開始方法: で
GroupSessionコールバックでメッセンジャー インスタンスを取得し、メッセージ タイプを定義して、ユーザーの操作時に送信します。
関連セッション
- グループ アクティビティの新機能 — SharePlay のグループ機能を補完する、グループ アクティビティ フレームワークの最新アップデート
- アプリに SharePlay を追加 — SharePlay 統合の基本的な概要
- SharePlay のデザイン — SharePlay エクスペリエンスのデザイン原則とヒューマン インターフェイス ガイドライン
コメント
GitHub Issues · utterances