將 iOS 寄件者應用程式從 Cast SDK 第 2 版遷移至 Cast 應用程式架構 (CAF)

下列程序可讓您將 iOS 寄件者應用程式從 Cast SDK 第 2 版轉換為 CAF 傳送者 (以 GCKCastContext 單例模式為基礎)。

簡介

  • CAF 傳送來源仍透過 Google Cast 開發人員網站CocoaPods (例如 v2) 發布。
  • 我們加入了新的類別,負責遵守 Google Cast 設計檢查清單。
  • CAF 傳送者所提供的小工具符合 Cast UX 需求;v2 不提供任何 UI 元件,而且您必須實作這些小工具。
  • CAF 傳送者設計與 Cast Android SDK 設計一致。
  • CAF 傳送方支援 Bitcode,例如 v2。
  • CAF 中的隱藏式輔助字幕與 v2 類似。

依附元件

CAF 傳送方支援 iOS 8 以上版本。

初始化

在 CAF 中,投放架構必須明確執行初始化步驟。這會叫用 GCKCastContext 單例模式,並使用適當的 GCKCastOptions 指定 Web Receiver 應用程式 ID 和任何其他全域選項。這通常會在 AppDelegate -[application:didFinishLaunchingWithOptions:] 方法中完成:

GCKCastOptions *options = [[GCKCastOptions alloc]
    initWithReceiverApplicationID:applicationID];
[GCKCastContext setSharedInstanceWithOptions:options];

這在第 2 版中不需要執行這個步驟。

探索裝置

在 CAF 中,當應用程式進入前景並進入背景時,探索程序會自動開始並停止。v2 中的 GCKDeviceScannerGCKFilterCriteria 類別已淘汰,因此不應使用。

投放按鈕和投放對話方塊

在 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 已淘汰,因此不應使用。寄件者與網路接收器之間的互動現在會表示為「工作階段」。CAF GCKSessionManager 類別會處理工作階段生命週期,並自動啟動及停止工作階段,以回應使用者的手勢:當使用者在 Cast 對話方塊中選取投放裝置時,工作階段就會啟動,並在使用者輕觸 Cast 對話方塊中的「Stop Casting」按鈕時結束,或傳送者應用程式終止。透過 GCKSessionManager 註冊 GCKSessionManagerListener,即可向傳送者應用程式通知工作階段生命週期事件的通知。GCKSessionManagerListener 通訊協定會定義所有工作階段生命週期事件的回呼方法。

GCKCastSession 類別代表與投放裝置的工作階段。該類別具有用於控制裝置音量和靜音狀態的方法,先前在 v2 中使用 GCKDeviceManager 的方法設定了。

在第 2 版中,GCKDeviceManagerDelegate 通訊協定提供了有關裝置狀態異動的通知,包括音量、靜音狀態、待機狀態等等。在 CAF 中,音量/靜音狀態變更通知是透過 GCKSessionManagerListener 通訊協定中的回呼方法傳送;這些事件監聽器會註冊 GCKSessionManager。其餘的裝置狀態通知都是透過 GCKCastDeviceStatusListener 通訊協定提供;這些事件監聽器會以 GCKCastSession 註冊。

重新連結邏輯

與第 2 版一樣,CAF 會嘗試重新建立因暫時性的 WiFi 訊號遺失或其他網路錯誤而中斷的網路連線。這現在會在工作階段層級完成;當連線中斷時,工作階段可以進入「暫停」狀態,當連線恢復時,則會切換回「已連線」狀態。在這個過程中,架構會負責重新連線至 Web Receiver 應用程式,並重新連結任何 Cast 頻道。

此外,CAF 也會自動恢復工作階段。如果傳送者應用程式傳送至背景,或者在投放工作階段期間滑動 (或因為當機事件) 終止,則當傳送者應用程式返回前景或重新啟動時,架構會嘗試繼續執行該工作階段;GCKSessionManager 會自動處理該事件,並在所有已註冊的 GCKSessionManagerListener 執行個體發出適當的回呼。

自訂頻道註冊

在 v2 中,自訂頻道 (使用 GCKCastChannel 子類別,或 GCKGenericChannel 和委派) 已向 GCKDeviceManager 註冊。而在 CAF 中,自訂管道則改向 GCKCastSession 執行個體註冊。可以在 GCKSessionManagerListener -[sessionManager:didStartCastSession:] 回呼方法中完成註冊。就媒體應用程式而言,不再需要明確註冊 GCKMediaControlChannel;詳情請參閱下一節。

媒體管理

v2 類別 GCKMediaControlChannel 已淘汰,因此不應使用。在 CAF 中,它會由新的 GCKRemoteMediaClient 類別所取代,後者可在更便利的 API 中提供對等的功能。不需要明確初始化或註冊此物件;如果連線的 Web Receiver 應用程式支援媒體命名空間,架構將自動對物件執行個體化並註冊基礎媒體管道。

可使用 GCKCastSession 物件的 -[remoteMediaClient] 屬性存取 GCKRemoteMediaClient

在第 2 版中,GCKMediaControlChannel 上發出的所有媒體要求都會傳回數字要求 ID,而 GCKMediaControlChannelDelegate 的方法則會傳送要求完成或失敗的通知。

在 CAF 中,所有透過 GCKRemoteMediaClient 發出的媒體要求都會傳回 GCKRequest 物件;這個物件具有相關聯的 GCKRequestDelegate 通訊協定,可用於追蹤要求的進度和最終結果。

v2 GCKMediaControlChannel 會透過 GCKMediaControlChannelDelegate 傳送 Web 接收器上的媒體播放器狀態變更的通知。在 CAF 中,GCKRemoteMediaClient 透過其 GCKRemoteMediaClientListener 通訊協定提供對等的回呼。使用 GCKRemoteMediaClient 可以註冊不限數量的事件監聽器,讓多個寄件者元件能夠共用與工作階段相關聯的單一 GCKRemoteMediaClient 例項。

在第 2 版中,傳送端應用程式必須負責讓使用者介面與網路接收器上的媒體播放器狀態保持同步。在 CAF 中,GCKUIMediaController 類別負責處理大部分的責任;請參閱 程式碼研究室教學課程說明文件,瞭解如何使用此元件的範例。

簡介重疊廣告

V2 不提供入門重疊使用者介面

CAF 會使用方法 -[presentCastInstructionsViewControllerOnce] 新增 GCKCastContext 類別,寄件者應用程式可在使用者首次看到「投放」按鈕時醒目顯示該按鈕。

迷你控制器

在第 2 版中,您需要在傳送者應用程式中從頭開始實作迷你控制器。

在 CAF 中,架構會提供一個控制列 GCKUIMiniMediaControlsViewController,您可以在此新增要顯示持續控制項的場景。您可以透過下列兩種方式將迷你控制器新增至寄件者應用程式:

已展開控制器

在第 2 版中,您需要在寄件者應用程式中實作全新的控制器。

CAF 新增 GCKUIMediaController,您可以用來輕鬆實作展開的控制器。

CAF 新增預先建立的展開控制器小工具 GCKUIExpandedMediaControlsViewController,您可以直接新增到應用程式。您不再需要使用 GCKUIMediaController 實作自訂的展開控制器。

偵錯記錄

v2 中的 GCKLoggerGCKLoggerDelegate 類別會轉移至 CAF,並經過一些變更和強化。

GCKLoggerDelegate -[logFromFunction:message:] 方法已淘汰,請改用 -[logMessage:fromFunction:]

現在可以建構適當的 GCKLoggerFilter 執行個體並設定 GCKLogger 單例模式的 -[filter] 屬性來指派架構記錄訊息。

範例應用程式

建議您查看為 CAF 編寫的程式碼研究室範例應用程式