次の手順で、iOS の送信者アプリを Cast SDK v2 から GCKCastContext シングルトンに基づく CAF Sender に変換できます。
はじめに
- CAF Sender は、Google Cast デベロッパー ウェブサイトと v2 などの CocoaPods で引き続き配信されます。
- Google Cast の設計チェックリストの遵守を担う新しいクラスが追加されました。
- CAF Sender は Cast UX の要件を遵守するウィジェットを提供していますが、v2 では UI コンポーネントが提供されず、これらのウィジェットを実装する必要がありました。
- CAF 送信者の設計は、Cast Android SDK の設計と同じです。
- CAF 送信者は v2 などのビットコードをサポートします。
- CAF のクローズド キャプションは v2 の機能です。
依存関係
CAF Sender は iOS バージョン 8 以降をサポートしています。
初期化
CAF では、Cast フレームワークに明示的な初期化手順が必要です。これには、適切な GCKCastOptions
を使用して GCKCastContext
シングルトンを初期化し、ウェブレシーバー アプリケーション ID とその他のグローバル オプションを指定することが含まれます。これは通常、AppDelegate
-[application:didFinishLaunchingWithOptions:]
メソッドで行います。
GCKCastOptions *options = [[GCKCastOptions alloc]
initWithReceiverApplicationID:applicationID];
[GCKCastContext setSharedInstanceWithOptions:options];
v2 では、このステップは不要です。
デバイス検出
CAF では、アプリがフォアグラウンドに移行してバックグラウンドに移行すると、フレームワークによって検出プロセスが自動的に開始、停止されます。v2 の GCKDeviceScanner
クラスと GCKFilterCriteria
クラスは非推奨です。使用しないでください。
キャスト ボタンとキャスト ダイアログ
CAF では、キャスト アイコンとダイアログはフレームワークによって提供されます。キャスト ボタンをインスタンス化し、ナビゲーション バーに次のように追加できます。
GCKUICastButton *castButton =
[[GCKUICastButton alloc] initWithFrame:CGRectMake(0, 0, 24, 24)];
castButton.tintColor = [UIColor whiteColor];
self.navigationItem.rightBarButtonItem =
[[UIBarButtonItem alloc] initWithCustomView:castButton];
キャスト アイコンはストーリーボードに追加することもできます。
ユーザーがボタンをタップすると、キャスト ダイアログが自動的に表示されます。
デバイス コントロール
CAF では、デバイス制御の大部分はフレームワークによって処理されます。送信者アプリは、デバイスへの接続と Web Receiver アプリの起動を処理する必要はありません。v2 クラス GCKDeviceManager
は非推奨です。使用しないでください。送信者と Web Receiver の間のやり取りを「セッション」と表記します。CAF の GCKSessionManager
クラスは、セッションのライフサイクルを処理し、ユーザーの操作に応じてセッションを自動的に開始、停止します。ユーザーがキャスト ダイアログでキャスト デバイスを選択するとセッションが開始し、ユーザーがキャスト ダイアログの [キャストを停止] ボタンをタップすると、または送信側アプリ自体が終了したときにセッションが終了します。GCKSessionManagerListener
を GCKSessionManager
に登録することで、送信者のアプリにセッション ライフサイクル イベントの通知を受け取ることができます。GCKSessionManagerListener
プロトコルは、すべてのセッション ライフサイクル イベントのコールバック メソッドを定義します。
GCKCastSession
クラスは、キャスト デバイスとのセッションを表します。このクラスには、デバイスの音量とミュート状態を制御するメソッドが用意されています。これらは、以前は GCKDeviceManager
のメソッドを使用して v2 で行われていました。
v2 では、GCKDeviceManagerDelegate
プロトコルにより、音量、ミュート状態、スタンバイ ステータスなど、デバイスの状態の変化が通知されます。CAF では、音量 / ミュート状態変化の通知は、GCKSessionManagerListener
プロトコルのコールバック メソッドを介して配信されます。これらのリスナーは GCKSessionManager
に登録されます。残りのデバイス状態通知はすべて、GCKCastDeviceStatusListener
プロトコルを介して配信されます。これらのリスナーは GCKCastSession
に登録されます。
再接続ロジック
v2 と同様に、CAF は、一時的な Wi-Fi 信号の損失やその他のネットワーク エラーによって失われたネットワーク接続の再確立を試みます。これはセッション レベルで行われるため、セッションは接続が失われたときに「一時停止」状態になり、接続が回復すると「接続」状態に戻ります。フレームワークは、このプロセスの一環として Web Receiver アプリケーションに再接続し、キャスト チャンネルを再接続します。
また、CAF により、セッションが自動的に再開されます。キャスト セッションの進行中に、送信側アプリがバックグラウンドに送信されるか、(スワイプによって、またはクラッシュが原因で)終了した場合、送信側アプリがフォアグラウンドに戻ったとき、または再起動したときに、フレームワークはそのセッションを再開しようとします。これは GCKSessionManager
によって自動的に処理されます。これにより、登録された GCKSessionManagerListener
インスタンスで適切なコールバックが発行されます。
カスタム チャンネル登録
v2 では、GCKCastChannel
サブクラスまたは GCKGenericChannel
とデリゲートのいずれかを使用して実装されたカスタム チャネルが GCKDeviceManager
に登録されました。CAF では、カスタム チャネルは GCKCastSession
インスタンスに登録されます。登録は、GCKSessionManagerListener
-[sessionManager:didStartCastSession:]
コールバック メソッドで行うことができます。メディアアプリの場合、GCKMediaControlChannel
を明示的に登録する必要がなくなりました。詳しくは次のセクションをご覧ください。
メディア コントロール
v2 クラス GCKMediaControlChannel
は非推奨です。使用しないでください。CAF には、新しい GCKRemoteMediaClient
クラスに置き換えられました。このクラスは、より便利な API で同等の機能を提供します。このオブジェクトを明示的に初期化または登録する必要はありません。ウェブ レシーバ アプリケーションが接続されてメディア名前空間がサポートされている場合、フレームワークは自動的にオブジェクトをインスタンス化し、基盤となるメディア チャネルを登録します。
GCKRemoteMediaClient
には、GCKCastSession
オブジェクトの -[remoteMediaClient]
プロパティを使用してアクセスできます。
v2 では、GCKMediaControlChannel
で発行されたすべてのメディア リクエストは数値のリクエスト ID を返します。GCKMediaControlChannelDelegate
のメソッドでは、リクエストの完了または失敗に関する通知を送信するときにこの ID が提供されます。
CAF では、GCKRemoteMediaClient
で発行されたすべてのメディア リクエストは GCKRequest
オブジェクトを返します。このオブジェクトには、GCKRequestDelegate
プロトコルが関連付けられています。これを使用して、リクエストの進捗状況と最終的な結果を追跡できます。
v2 の GCKMediaControlChannel
は、GCKMediaControlChannelDelegate
を介してウェブ レシーバーのメディア プレーヤーの状態の変化に関する通知を送信します。CAF では、GCKRemoteMediaClient
は GCKRemoteMediaClientListener
プロトコルを介して同等のコールバックを提供します。任意の数のリスナーを GCKRemoteMediaClient
に登録できます。これにより、複数の送信者コンポーネントが、セッションに関連付けられている GCKRemoteMediaClient
の単一インスタンスを共有できます。
v2 では、送信側アプリがウェブ レシーバのメディア プレーヤーの状態との同期を維持する必要がありました。CAF では、クラス GCKUIMediaController
がこの役割の大部分を担います。このコンポーネントの使用方法の例については、Codelab チュートリアルのドキュメントをご覧ください。
案内用のオーバーレイ
V2 には、概要オーバーレイ UI がありません。
CAF は、-[presentCastInstructionsViewControllerOnce]
メソッドを含むクラス GCKCastContext
を追加します。送信アプリは、このメソッドがユーザーに初めて表示されるときにキャスト アイコンをハイライト表示するために使用できます。
ミニ コントローラ
v2 では、送信アプリにミニ コントローラをゼロから実装する必要があります。
CAF では、フレームワークにコントロール バー GCKUIMiniMediaControlsViewController
が用意されています。このバーは、永続コントロールを表示するシーンに追加できます。送信者アプリにミニ コントローラを追加するには、次の 2 つの方法があります。
キャスト フレームワークがミニ コントローラのレイアウトを管理できるようにするには、既存のビュー コントローラを
GCKUICastContainerViewController
でラップし、そのビューの下部にGCKUIMiniMediaControlsViewController
を追加します。-[createMiniMediaControlsViewController]
を使用してGCKUIMiniMediaControlsViewController
インスタンスを作成し、サブビューとしてコンテナビュー コントローラに追加することで、ミニコントローラを既存のビュー コントローラに直接追加します。
拡張コントローラ
v2 では、拡張されたコントローラを送信者アプリにゼロから実装する必要があります。
CAF は、GCKUIMediaController
を追加します。これにより、拡張コントローラの実装が容易になります。
CAF は、ビルド済みの拡張コントローラ ウィジェット GCKUIExpandedMediaControlsViewController
をアプリに追加するだけです。GCKUIMediaController
を使用してカスタム拡張コントローラを実装する必要はありません。
デバッグ ロギング
v2 の GCKLogger
クラスと GCKLoggerDelegate
クラスは CAF に引き継がれ、いくつかの変更が加えられています。
GCKLoggerDelegate
の -[logFromFunction:message:]
メソッドのサポートが終了し、-[logMessage:fromFunction:]
に置き換えられました。
フレームワークのログメッセージをフィルタリングするには、適切な GCKLoggerFilter
インスタンスを作成し、GCKLogger
シングルトンの -[filter]
プロパティを設定することでそれを割り当てます。