iOS 权限和发现

从 iOS 14 开始,操作系统将强制执行新的限制,并且 影响 Cast 用户体验的权限。还会影响您 将 Cast SDK 构建到应用中。便于应用维护 Cast 功能 必须更新才能处理这些 权限更改。

iOS 14

开发者应将其 iOS Cast 发送端应用更新到 Google Cast SDK v4.6.0 或更高版本。这些版本可支持 iOS 14 及其要求。

从 iOS 14 开始,扫描本地网络中的设备的应用 现在将通过一次性权限对话框提示用户查找并连接到 本地网络设备Cast 平台使用本地网络发现和 控制投放设备,如果用户拒绝授予权限,他们将无法 投射。

为了改善用户体验,我们正在对该 SDK 进行一些用户体验修改 。用户体验修改 让用户更清楚地了解为什么需要本地网络访问权限, 以及如何启用投放功能 已停用。

使用 Cast SDK 版本 4.4.8 或更早版本构建的应用将继续运行 但前提是它们是使用 Xcode 11.7 或更早版本构建的。如果您 使用 Xcode 12 或更高版本针对 iOS 14 进行构建,我们建议您更新到 Cast SDK v4.6.0 或更高版本,以确保您的 Cast 应用继续正常运行。

可使用 CocoaPods 下载 Cast iOS SDK v4.6.0 或更高版本,具体操作步骤如下: CocoaPods 设置,或通过 完成手动设置。此版本 对底层发现机制进行了更改, 使用 Xcode 12 构建,用于查找网络上的 Cast 设备。“投放”按钮应 始终显示如果用户点按 Cast 时没有可用的设备 按钮,系统会显示一个对话框,其中会提供设备 包括有关如何重新启用本地网络访问权限的信息 权限。

Cast SDK 变更

首次投放

用户首次尝试投屏时,本地网络访问 (LNA) 系统会显示一个插页对话框,说明为什么需要访问本地网络 以及 Apple 提供的 iOS 本地网络访问权限 提示。以下模拟展示了该流程:

本地网络访问权限流程

无法使用投屏功能

从 iOS 发送者 SDK 4.6.0 开始,当用户通过点击 已连接到 Wi-Fi。投放设备不可用时 这时点按“投放”按钮会显示一个对话框 提示无法使用 Cast 的可能原因,如以下模拟所示:

无法使用 Cast 的流程

在 iOS 14 上更新您的应用

  1. 将 Cast iOS SDK 4.8.1 添加到您的项目中

    如果使用的是 CocoaPods,请使用 pod update 将 4.8.1 SDK 添加到您的项目中。

    否则 手动提取 SDK

  2. NSBonjourServices 添加到您的 Info.plist

    Info.plist 中指定 NSBonjourServices 以 允许在 iOS 14 上成功发现本地网络。

    您需要同时添加_googlecast._tcp和 “_<your-app-id>._googlecast._tcp”作为设备的服务 才能正常工作

    appID 是您的接收器 ID,也就是您在 GCKDiscoveryCriteria

    更新以下示例 NSBonjourServices 定义并 替换“ABCD1234”与应用 ID 相关联。

    &lt;key&gt;NSBonjourServices&lt;/key&gt;
    &lt;array&gt;
      &lt;string&gt;_googlecast._tcp&lt;/string&gt;
      &lt;string&gt;_ABCD1234._googlecast._tcp&lt;/string&gt;
    &lt;/array&gt;
  3. NSLocalNetworkUsageDescription 添加到您的 Info.plist

    我们强烈建议您自定义 通过在应用的 Info.plist 文件 NSLocalNetworkUsageDescription(例如用于描述 Cast) 发现和其他发现服务,如 DIAL。

    &lt;key&gt;NSLocalNetworkUsageDescription&lt;/key&gt;
    <string>${PRODUCT_NAME}会使用本地网络发现您 Wi-Fi 上支持 Cast 的设备
    。</string>

    此消息将在 iOS“本地网络访问权限”对话框中显示为 示例。

    投放本地网络访问权限对话框图片
  4. 将您的应用重新发布到 Apple App Store

    我们还建议您以 问题。

自定义

投放设备发现启动

默认情况下,系统会在用户首次点按时启动 Cast 设备发现流程 “投放”按钮 (GCKUICastButton)。如果这是用户首次 升级到 iOS 后尝试在本地网络上使用 Cast 应用 14 时,将先后显示新的 LNA 插页式广告,接着是 iOS 本地网络 访问权限对话框。

有一个新标志,可用于控制何时开始设备发现 以及用户体验中某些元素的行为:

startDiscoveryAfterFirstTapOnCastButton: BOOL(true/false)

默认值为 true。仅当您设置了 GCKCastOptions::disableDiscoveryAutostart 已设置为 false

如果设为 true,当用户点按 GCKUICastButton。一条信息性消息将会 向用户显示,让他们知道为什么需要本地网络权限 所需的资源。在该消息之后,系统会显示 iOS 14 LNA 消息。 确认消息后,系统会开始发现 Cast 设备。

在后续应用启动时,始终会显示 GCKUICastButton

如果设为 false,系统将根据 标志 GCKCastOptions::disableDiscoveryAutostart

常见问题解答

如果我重新发布我的 采用 Cast SDK v4.4.8 和 Xcode 12 的 Cast 发送器应用吗?

您的应用可能无法发现本地网络中的 Cast 设备 除非您已获得 Apple 的网络多播授权。 请注意,Apple 不会仅针对 来支持 Cast 如果您计划使用 Xcode 12 进行构建,则应发布您的应用 Cast 4.6.0。

如果我使用新版 Cast SDK 重新发布应用, 运行 iOS 13 或更低版本的用户能否继续体验?

他们将获享与之前相同的用户体验 重新发布应用只有用户才能看到更改 在 iOS 14 上运行

新版本推出后,我需要做些什么来更新应用 Cast SDK 版本发布吗?

  • 更新应用的 Info.plist 以包含本地网络 使用说明。
  • NSBonjourServices 添加到应用的 Info.plist,并为 Cast 提供 Bonjour 服务名称 以及应用 ID
  • 请升级您的发送端应用以使用 Cast SDK 4.6.0。
  • 将您的应用重新发布到 Apple App Store。

为什么设备不再显示在我的自定义设备中 ?

这是一个已知问题,如果您使用的是自定义设备,就可能会发生此问题 而不是标准的设备选择器。在 Cast SDK 及更早版本的设备扫描是自动进行的。从版本开始 4.6.0,则需要显式调用 startDiscovery 调用 <ph type="x-smartling-placeholder"></ph> GCKDiscoveryManager 类来启动设备发现。

此更改的原因在于 应用扫描第一个请求后, 。这可能会导致权限对话框显示在随机位置 。

为应用构建自定义设备选择器的开发者将 预计会在启动设备之前提供一次性插页式广告 在 iOS 14 中首次进行扫描

iOS 13

iOS 13 中引入的新权限要求 使用 Google Cast SDK 构建应用。

从 Google Cast SDK v4.4.3 开始,我们提供了一个额外的 SDK, 不需要 Bluetooth® 权限。这在开发者 网站和新推出的 google-cast-sdk-no-bluetooth Cocoapods。

应用细分

下面根据您当前使用的 iOS SDK 版本进行了细分 使用:

使用 iOS 12 SDK 或更低版本构建的应用

  • 建议采取的行动。在以下情况下,设备发现性能可能会下降: 在 iOS 13 上运行,但仍可正常使用。我们强烈建议您 开发者应升级到 Cast SDK v4.4.4(如果可用)。
  • iOS 13 将提示用户向应用授予 Bluetooth® 权限。

使用 iOS 13 SDK 构建的应用

  • 建议采取行动:请更新到 Cast SDK 4.4.4,否则投射按钮可能无法使用 。升级到 Cast SDK 为了确保在 iOS 13 上获得可靠的投放体验,必须启用 4.4.4。