从 iOS 14 开始,操作系统将强制执行会影响 Cast 用户体验的新限制和权限。它还会影响您将 Cast SDK 构建到应用中的方式。要让您的应用在最新版 iOS 上保持 Cast 功能,您必须进行更新以处理这些权限变更。
iOS 14
开发者应将其 iOS Cast 发送者应用更新为 Google Cast SDK v4.6.0 或更高版本。这些版本支持 iOS 14 及其要求。
从 iOS 14 开始,扫描本地网络中的设备的应用现在会提示用户,通过一次性权限对话框查找并连接到本地网络设备。Cast 平台使用本地网络来发现和控制 Cast 设备,因此如果用户拒绝授予权限,他们将无法投射。
为了提升用户体验,我们正在为使用标准设备选择器的应用对 SDK 进行一些用户体验修改。这些用户体验修改更明确地说明了需要本地网络访问权限的原因,以及停用本地网络设备访问权限的情况下如何启用投射。
使用 Cast SDK v4.4.8 或更早版本构建的应用将可以继续使用,前提是这些应用是使用 Xcode 11.7 或更低版本构建的。如果您使用 Xcode 12 或更高版本针对 iOS 14 进行构建,我们建议您更新到 Cast SDK v4.6.0 或更高版本,以确保您的 Cast 应用能够继续正常运行。
您可以通过 CocoaPods 设置使用 CocoaPods 下载 Cast iOS SDK v4.6.0 或更高版本,也可以按照手动设置手动下载。此版本对底层发现机制进行了更改,以允许使用 Xcode 12 构建的应用在网络上查找投放设备。现在,“投放”按钮应始终显示。如果用户点按“投放”按钮后没有可用设备,系统会显示一个对话框,说明设备不可用的原因,包括如何重新启用本地网络访问权限。
Cast SDK 变更
首次投放
当用户首次尝试投放时,系统会显示本地网络访问权限 (LNA) 插页式广告对话框,其中解释了为什么需要本地网络访问权限,之后会显示 Apple 提供的 iOS 本地网络访问权限提示。下面的模拟说明了该流程:
无法投放
从 iOS 发送者 SDK 4.6.0 开始,当用户连接到 Wi-Fi 时,“投射”按钮会始终显示。当投放设备不可用时,点按“投放”按钮会弹出一个对话框,为用户提供有关无法投放的原因的提示,如以下模拟所示:
在 iOS 14 上更新您的应用
-
将 Cast iOS SDK 4.7.0 添加到您的项目中
如果使用 CocoaPods,请使用
pod update
将 4.7.0 SDK 添加到您的项目中。否则,请手动提取 SDK。
-
将
NSBonjourServices
添加到Info.plist
中在
Info.plist
中指定NSBonjourServices
以允许本地网络发现功能在 iOS 14 上成功运行。您需要将
_googlecast._tcp
和_<your-app-id>._googlecast._tcp
都添加为服务,才能让设备发现功能正常运行。appID 是您的接收器 ID,与
GCKDiscoveryCriteria
中定义的 ID 相同。更新以下示例
NSBonjourServices
定义,并将“ABCD1234”替换为您的 appID。 -
将
NSLocalNetworkUsageDescription
添加到您的Info.plist
我们强烈建议您在应用的
Info.plist
文件中针对NSLocalNetworkUsageDescription
添加应用专属的权限字符串(例如,用于描述 Cast 发现和其他发现服务(如 DIAL),从而自定义本地网络提示中显示的消息)。此消息将作为 iOS 本地网络访问对话框的一部分(如模拟所示)显示。
-
将应用重新发布到 Apple App Store
我们还建议您尽快使用 4.7.0 重新发布您的应用。
自定义
投射设备发现启动
默认情况下,用户首次点按“投放”按钮 (GCKUICastButton
) 时,系统会启动 Cast 设备发现功能。如果这是用户升级到 iOS 14 后首次尝试在本地本地网络上使用 Cast 应用的操作,系统会显示新的 LNA 插页式广告,然后显示 iOS 本地网络访问权限对话框。
您可以借助一个新标志来控制设备发现功能何时开始以及用户体验的某些元素的行为:
startDiscoveryAfterFirstTapOnCastButton: BOOL(true/false)
默认值为 true
。仅当 GCKCastOptions::disableDiscoveryAutostart
标志设置为 false
时,此标志才适用。
如果设置为 true
,则当用户首次点按 GCKUICastButton
时,Cast 设备发现就会启动。系统将向用户显示一条信息性消息,告诉他们需要本地网络权限的原因。在该消息后面,将显示 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 后,设备为什么不再显示在自定义设备选择器中?
如果您使用的是自定义设备选择器,而不是标准设备选择器,这是一个已知问题。在 4.4.8 版 Cast SDK 中,设备扫描是自动进行的。从 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,均可获取该 API。请注意,访客模式功能是,发送方应用能够使用在访客模式下显示的 PIN 码,检测不在同一网络的邻近区域内的投放设备。
如需让您的应用为 iOS 13 做好准备,您需要:
需要保持访客模式支持
- 必须添加
Privacy - Bluetooth Always Usage Description
键。 - 向您的
Info.plist
添加字符串,以说明用户的 Bluetooth® 蓝牙使用情况。
需要移除对访客模式的支持
- 防止应用满足 Cast Bluetooth® 要求。
- 集成最新版本的 Google Cast SDK,不支持 Bluetooth®。
- 无论是开发者网站,还是新的
google-cast-sdk-no-bluetooth
CocoaPods,均可获取该 API。
应用细分
根据您目前使用的 iOS SDK 版本,下面给出了明细:
使用 iOS 12 SDK 或更低版本构建的应用
- 建议采取的措施。在 iOS 13 上运行时,设备发现性能可能会下降,但仍然可以正常运行。我们强烈建议开发者升级到 Cast SDK v4.4.4(如果可用)。
- iOS 13 会提示用户向应用授予 Bluetooth® 权限。
使用 iOS 13 SDK 构建的应用
- 建议采取行动:如果用户未授予位置信息权限,则必须更新至 Cast SDK 4.4.4 或“投放”按钮。为确保在 iOS 13 上获得可靠的投放体验,必须升级到 Cast SDK 4.4.4。
- 请参阅开发者文档,详细了解如何集成访客模式,或如何选择停用 Google Cast SDK 不支持的访客模式?