SharePlayの利用方法と実装
では、SharePlayは具体的にどのように利用するのでしょうか。
例えばメディアの同期再生の場合、ユーザーがFaceTimeで通話をしている最中、SharePlayをサポートしているアプリに遷移すると、そのアプリで機能が利用可能であることがシステムから通知されます。その後、アプリ内で「コンテンツを再生」アクション実行のタイミングでSharePlayを行うかどうか確認するダイアログが表示され、許可を行うことでコンテンツの同期再生が開始されます。

SharePlayはあらゆるデバイス間で実行することができ、ブラウザもWebKitで実装されているものであれば利用が可能です。
実装方法
ここからはSharePlayの機能をアプリに組み込む方法について概要を解説します。
端末の画面共有は各アプリで何か対応をする必要はなく、全てのアプリで実行が可能です。一方、メディアの同期再生やカスタムコンテンツの共有などは自動では対応されず、SharePlayの機能に対応したアプリでのみ実行が可能になります。SharePlayはシステム全体の全再生ボタンと連動することが目標とされているため、App内のどんなメディアでもFaceTime中に「再生」を行うとSharePlayを開始できるようAPIが用意されています。具体的には、GroupActivityフレームワークを使うことで、サードパーティ製のアプリもSharePlayに対応することができます。
GroupActivity
GroupActivityは、アプリが提供する共有体験自体を定義するために利用されるものです。再生中コンテンツのURLなど、必要な情報を保持する役割も担っています。これは、SharePlayの機能を提供する各アプリがそれぞれ定義するものとなっており、実行タイミングで明示的にインスタンス化して利用することになります。また、共有するコンテンツはメディアだけではなく、お絵描き共有などのカスタム共有体験を実現することにも対応しており、この場合はユーザーが描いているものに関する情報を保持することになります。
GroupSession
SharePlayを行うユーザーは同一のセッションに参加することになり、この共有体験を表したものをGroupSessionと呼びます。GroupSessionは明示的に作成するものではなくシステムから受け渡されるものとなっており、これを通してセッションの状態管理を行ったり、同一セッションに参加しているユーザーの情報にアクセスしたりすることなどができます。
セッションの開始
SharePlayでメディアコンテンツの共有を開始するには、大まかに以下のような実装手順を進める形になります。
- Xcodeのプロジェクト設定からCapabillitiesに「GroupActivities」を追加する
-
GroupActivityプロトコルに準拠した新しい型を定義し、グループ参加者が読み込むURLやシステムUIをカスタマイズするためのメタデータを指定する

-
再生アクションが行われたタイミングでGroupActivityのインスタンスを作成し、prepareForActivationを呼び出してSharePlayの準備を行う。

-
再生の同期を行うためにAVPlayerのplaybackCoordinator.coordinateWithSessionにGroupSessionのインスタンスを受け渡し、最後にGroupSessionのjoinを呼び出して暗号化チャネルを形成する。

以上のような形で、シンプルな共有体験を実現するだけであれば、とても少ない実装でSharePlayをアプリに組み込むことが可能となっています。
記事執筆時点ではまだあまりSharePlayに対応しているアプリは多くなく、対応しているアプリも若干不安定な印象を受けましたが、今後どう発展していくのか目が離せない技術の1つとなっています。



