iOS 权限和发现

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

iOS 14

开发者应将其 iOS Cast 发送者应用更新为 Google Cast SDK 4.6.0 或更高版本。这些版本支持 iOS 14 及其要求。

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

为了提升用户体验,我们正在为使用标准设备选择器的应用对 SDK 进行一些用户体验修改。这些用户体验修改可让用户更清楚地了解需要本地网络访问权限的原因,以及如何在本地网络设备访问权限被停用的情况下启用投射。

使用 v4.4.8 或更低版本使用 Cast SDK 构建的应用只要继续通过 Xcode 11.7 或更低版本构建而成,就可以继续运行。如果您使用 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 本地网络访问权限提示。以下模拟图演示了该流程:

本地网络访问权限流程

无法投射

从 iOS 发送者 SDK 4.6.0 开始,当用户连接到 WLAN 时,“投射”按钮将始终显示。当 Cast 设备不可用时,点按“投射”按钮会打开一个对话框,向用户提供有关 Cast 不可用的可能原因的提示,如以下模拟中所示:

无法使用 Cast 的流程

在 iOS 14 上更新您的应用

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

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

    否则,请手动拉取 SDK

  2. NSBonjourServices 添加到您的 Info.plist

    Info.plist 中指定 NSBonjourServices,使本地网络发现能够在 iOS 14 上成功运行。

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

    appID 是您的接收器 ID,它与 GCKDiscoveryCriteria 中定义的 ID 相同。

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

    <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} 使用本地网络来发现 Wi-Fi 网络中支持 Cast 的设备。</string>

    此消息将作为模拟中显示的 iOS 本地网络访问权限对话框的一部分显示。

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

    此外,我们建议您尽快使用 4.7.0 版重新发布应用。

自定义

投射设备发现启动

默认情况下,系统会在用户首次点按“投射”按钮 (GCKUICastButton) 时启动 Cast 设备发现。如果这是用户升级到 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 获得网络多播权限,否则您的应用可能无法在本地网络中发现 Cast 设备。请注意,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 版本开始,您将需要对 GCKDiscoveryManager 类明确调用 startDiscovery 方法,才能启动设备发现功能。

出现此变化的原因是应用首次扫描后,系统会显示本地网络访问权限 (LNA) 权限提示。这可能会导致权限对话框在您的应用中随机显示。

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

iOS 13

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

从 Google Cast SDK v4.4.3 开始,您无需支持蓝牙® 权限即可支持额外的 SDK(支持访客模式)。开发者网站以及新的 google-cast-sdk-no-bluetooth CocoaPods 均有提供。请注意,访客模式功能让发送者能够使用支持访客模式的设备上显示的 PIN 码,检测是否位于同一个网络附近的特定投射范围内的投射设备。

如需让您的应用为 iOS 13 做好准备,您需要确定自己是否:

需要保持访客模式支持

  • 必须添加 Privacy - Bluetooth Always Usage Description 键。
  • 在您的 Info.plist 中添加字符串,以说明用户的蓝牙® 使用情况。

需要移除对访客模式的支持

  • 防止应用满足 Cast Bluetooth® 要求。
  • 集成最新版本的 Google Cast 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 4.4.4,以确保在 iOS 13 上获得可靠的投射体验。
  • 请参阅开发者文档,详细了解如何集成访客模式,或了解如何将访客模式停用 Google Cast SDK,但不支持蓝牙®。