iOS 权限和发现

从 iOS 14 开始,操作系统将强制执行影响 Cast 用户体验的新限制和权限。它还会影响您将 Cast SDK 构建到应用中的方式。为了让您的应用在最新版本的 iOS 中保持 Cast 功能,您必须进行更新以处理这些权限变更。

iOS 14

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

从 iOS 14 开始,在本地网络上扫描设备的应用程序现在会向用户显示一次性权限对话框,以查找和连接到本地网络设备。Cast 平台使用本地网络来发现和控制 Cast 设备,因此,如果用户拒绝授予权限,他们将无法投放内容。

为了改善用户体验,我们正在对使用标准设备选择器的应用的 SDK 进行一些用户体验修改。这些用户体验修改让用户更清楚地了解为什么需要本地网络访问权限,以及在本地网络设备访问权限被停用后如何启用投放。

只要使用 Xcode 11.7 或更低版本构建,使用 v4.4.8 或更低版本的 Cast SDK 构建的应用将继续正常运行。如果您使用 Xcode 12 或更高版本为 iOS 14 构建应用,我们建议您更新到 Cast SDK v4.6.0 或更高版本,以确保您的 Cast 应用能够继续正常运行。

您可以按照 CocoaPods 设置通过 CocoaPods 下载 Cast iOS SDK v4.6.0 或更高版本,也可以按照 手动设置手动下载。此版本对底层发现机制进行了更改,以便使用 Xcode 12 构建的应用能够在网络上找到投放设备。现在,投放按钮应始终显示。如果用户点按 Cast 按钮时没有可用设备,系统会显示一个对话框,其中提供有关设备可能不可用的原因的指南,包括有关如何重新启用本地网络访问权限的信息。

Cast SDK 变更

首次投放

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

本地网络访问权限授予流程

Cast 不可用

从 iOS 发送器 SDK 4.6.0 开始,当用户连接到 Wi-Fi 时,投放按钮始终显示。当投放设备不可用时,点按投放按钮会弹出一个对话框,其中会向用户提示 Cast 可能不可用的原因,如以下模拟图所示:

含 Cast 的流程不可用

在 iOS 14 上更新应用

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

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

    否则, 请手动拉取 SDK

  2. NSBonjourServices 添加到您的 Info.plist

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

    您需要同时添加 _googlecast._tcp_<your-app-id>._googlecast._tcp 作为服务,才能使设备 发现正常运行。

    appID 是您的 receiverID,它与 GCKDiscoveryCriteria中定义的 ID 相同。

    更新以下示例 NSBonjourServices 定义,并将“ABCD1234”替换为您的 appID。

    <key>NSBonjourServices</key>
    <array>
      <string>_googlecast._tcp</string>
      <string>_ABCD1234._googlecast._tcp</string>
    </array>
  3. NSLocalNetworkUsageDescription 添加到您的 Info.plist

    我们强烈建议您自定义本地网络提示中显示的消息,方法是在应用的 Info.plist 文件中为 NSLocalNetworkUsageDescription 添加特定于应用的权限字符串,例如描述 Cast 发现和其他发现服务(如 DIAL)。

    <key>NSLocalNetworkUsageDescription</key>
    <string>${PRODUCT_NAME} uses the local network to discover Cast-enabled devices on your WiFi
    network.</string>

    此消息将作为 iOS 本地网络访问对话框的一部分显示,如 模拟图所示。

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

    我们建议您尽快使用 4.8.4 重新发布应用。

自定义

启动投放设备发现

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

您可以使用一个新标志来控制设备发现的启动时间以及用户体验的某些元素的行为:

startDiscoveryAfterFirstTapOnCastButton: BOOL(true/false)

默认值为 true。此标志仅在标志 GCKCastOptions::disableDiscoveryAutostart 设置为false时适用。

如果设置为 true,则当用户首次点按 GCKUICastButton 时,系统会启动投放设备发现。系统会向用户显示一条信息性消息,告知他们为什么需要本地网络权限。在该消息之后,系统会显示 iOS 14 LNA 消息。 在用户确认该消息后,系统会启动投放设备发现。

在后续应用启动中,GCKUICastButton 始终显示。

如果设置为 false,设备发现将根据 标志 GCKCastOptions::disableDiscoveryAutostart的值启动。

常见问题解答

如果我使用 Cast SDK v4.4.8 和 Xcode 12 重新发布我的 Cast 发送器应用,会发生什么情况?

除非您已从 Apple 获得网络多播使用权,否则您的应用可能无法在本地网络上发现投放设备。请注意,Apple 不会仅为了支持 Cast 而授予多播使用权。 如果您计划使用 Xcode 12 构建应用,则应使用 Cast 4.6.0 发布应用。

如果我使用新的 Cast SDK 重新发布应用,那么 运行 iOS 13 或更低版本的用户会遇到什么情况?

他们将继续看到与重新发布应用之前相同的用户体验。用户可见的更改仅限于运行 iOS 14 的用户。

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

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

升级到 4.6.0 后,为什么设备不再显示在我的自定义设备 选择器中?

如果您使用的是自定义设备 选择器而不是标准设备选择器,则可能会出现此已知问题。在 Cast SDK 4.4.8 及更低版本中,设备扫描是自动进行的。从 4.6.0 版本开始,您需要显式调用 startDiscovery 类中的 GCKDiscoveryManager 方法来启动设备发现。

此更改的原因是,本地网络访问 (LNA) 权限提示会在应用首次扫描后显示。这可能会导致权限对话框随机显示在应用中的任意位置 。

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

iOS 13

iOS 13 引入了新的权限要求,这些要求会影响使用 Google Cast SDK 的应用。

从 Google Cast SDK v4.4.3 开始,提供了一个不需要 Bluetooth® 权限的额外 SDK。此 SDK 在 开发者 网站和新的 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 4.4.4,才能确保在 iOS 13 上获得可靠的投放体验。