将 iOS Sender 应用从 Cast SDK v2 迁移到 Cast 应用框架 (CAF)

您可通过以下步骤将 iOS 发送器应用从 Cast SDK 转换 v2 到 CAF 发送器,这基于 GCKCastContext 单例。

简介

  • CAF 发送器仍然分布在 Google Cast 开发者网站CocoaPods,如 v2。
  • 新增了一些类,这些类负责 Google Cast 设计核对清单。
  • CAF 发送器提供符合 Cast 用户体验要求的微件;v2 不提供任何界面组件,而是要求您实现 这些小组件
  • CAF 发送器设计与 Cast Android SDK 设计一致。
  • CAF Sender 支持 Bitcode,如 v2。
  • CAF 中的字幕与 v2 类似。

依赖项

CAF Sender 支持 iOS 8 及更高版本。

初始化

在 CAF 中,Cast 框架需要显式初始化步骤。本次 包括初始化 GCKCastContext 使用适当的 GCKCastOptions 用于指定 Web Receiver 应用 ID 和任何其他全局变量, 选项。这通常在 AppDelegate 中完成 -[application:didFinishLaunchingWithOptions:] 方法:

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

在 v2 中不需要执行此步骤。

设备发现

在 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 已弃用,应 。现在,发件人和网络接收器之间的互动 "session"。CAF GCKSessionManager 类处理会话生命周期, 自动开始和停止会话以响应用户手势:会话 当用户在 Cast 对话框中选择 Cast 设备时启动,并结束 当用户点按“停止投放”时触发按钮,或在 发送者应用本身终止。发送者应用会收到会话通知 来为生命周期事件注册 GCKSessionManagerListener 替换为 GCKSessionManager。 通过 GCKSessionManagerListener 协议为所有会话生命周期事件定义回调方法。

通过 GCKCastSession 类表示与 Cast 设备的会话。类 提供了用于控制设备音量和静音状态的方法, 之前使用 v2 中的方法完成的 GCKDeviceManager

在 v2 中, GCKDeviceManagerDelegate 协议提供的变更通知 设备状态,包括音量、静音状态、待机状态等。 在 CAF 中,音量/静音状态变化通知通过回调进行传送 方法(位于 GCKSessionManagerListener 协议;这些监听器通过 GCKSessionManager。 所有其他设备状态通知 通过 GCKCastDeviceStatusListener 协议;这些监听器通过 GCKCastSession

重新连接逻辑

与 v2 一样,CAF 会尝试重新建立 会因为 Wi-Fi 信号暂时丢失或其他网络错误而丢失。现在是 是在会话级设置的会话可能会进入“已暂停”状态状态 并将恢复为“已连接”状态,当 连接就会恢复。框架负责重新连接到 Web Receiver 应用,并在此过程中重新连接任何 Cast 频道。

此外,CAF 还添加了自动会话恢复功能。如果发件人 发送到后台或被终止(通过滑动或 而当投射会话正在进行中时,框架将 当发送方应用返回到 前台运行或重新启动;由 GCKSessionManager、 这将对任何已注册 GCKSessionManagerListener 实例。

自定义渠道注册

在 v2 中,自定义渠道(使用 GCKCastChannel 子类或 GCKGenericChannel 和受托人)都已向 GCKDeviceManager。 在 CAF 中,自定义渠道改为通过 GCKCastSession 实例。您可以在 GCKSessionManagerListener -[sessionManager:didStartCastSession:] 回调方法。对于媒体应用,则不再需要 注册 GCKMediaControlChannel; 请参阅下一部分了解详情。

媒体控件

v2 类 GCKMediaControlChannel 已弃用,不应继续使用。在 CAF 中,它已被新的 GCKRemoteMediaClient 类,后者在一个更方便的 API 中提供等效功能。 无需显式初始化或注册此对象;该 框架会自动实例化对象,并注册底层代码, 会话启动时的媒体渠道(如果已连接 Web Receiver 应用) 来支持媒体命名空间

通过 GCKRemoteMediaClient 可以使用 -[remoteMediaClient] 属性 GCKCastSession 对象。

在 v2 中, GCKMediaControlChannel 将返回一个数字请求 ID 以及 GCKMediaControlChannelDelegate 应在发送有关请求完成的通知时提供此 ID 或 失败。

在 CAF 中, GCKRemoteMediaClient 将返回 GCKRequest object;此对象具有关联的 GCKRequestDelegate 协议 可用于跟踪请求的进度和最终结果。

v2 GCKMediaControlChannel; 会发送有关网络接收器上的媒体播放器状态变化的通知 通过 GCKMediaControlChannelDelegate。 在 CAF 中, GCKRemoteMediaClient 通过其 GCKRemoteMediaClientListener 协议。可通过 GCKRemoteMediaClient,可让多个发送者组件共享 与会话关联的 GCKRemoteMediaClient 的单个实例。

在 v2 中,发送方应用程序必须承担让用户 与网络接收器上的媒体播放器状态同步。在 CAF 中, GCKUIMediaController 承担大部分的责任请参阅 Codelab 教程 文档中提供了有关如何使用此组件的示例。

介绍性叠加层

V2 不提供 介绍性叠加层界面

CAF 添加类 GCKCastContext 包含方法 -[presentCastInstructionsViewControllerOnce] 发送器应用可利用它在首次显示“投射”按钮时突出显示该按钮 。

迷你控制器

在 v2 中,您需要在 发送器应用。

在 CAF 中,框架提供了一个控制栏, GCKUIMiniMediaControlsViewController、 您可以将其添加至您希望显示 控件。您可以通过以下两种方式将迷你控制器添加到发送器应用:

展开的控制器

在 v2 中,您需要在 。

CAF 添加次数 GCKUIMediaController、 您可以用它来更轻松地实现展开的控制器。

CAF 添加了一个预构建的展开控制器 widget GCKUIExpandedMediaControlsViewController 您只需将其添加到自己的应用中即可。您不再需要在 Google Ads 中 控制器(使用 GCKUIMediaController)。

调试日志记录

通过 GCKLoggerGCKLoggerDelegate v2 中的类已转移到 CAF 中,并进行了一些更改和增强功能。

通过 GCKLoggerDelegate -[logFromFunction:message:] 方法包含 已弃用,取而代之的是 -[logMessage:fromFunction:]

框架日志消息现在可以通过构建适当的 GCKLoggerFilter 并通过设置 的 -[filter] 属性 GCKLogger 单例。

示例应用

我们建议您查看 Codelab 和 专为 CAF 编写的示例应用