大多数浏览器和
Developer App 均支持流媒体播放。
-
利用 Network 框架构建设备间交互
了解如何打造一体化的跨设备内容体验。我们将介绍 DeviceDiscoveryUI,它能帮助简化通信路径的设置,将 Apple TV 连接到 iPhone、iPad 和 Apple Watch 等其他设备。我们还将探索常见的场景,提供最佳实践以帮助您实现设备间的无障碍连接。
资源
相关视频
WWDC20
WWDC19
-
下载
♪ ♪ Elliot Garner:大家好 我叫 Elliot Garner 是互联网技术团队的工程师 今天 我将讨论如何使用 网络框架 及其新的配套框架 DeviceDiscoveryUI 来构建跨设备交互 我们将从了解跨设备连接 以及它如何改进您的 App 开始 我们将探讨一个新的框架 DeviceDiscoveryUI 它与 Network 框架配对 使连接尽可能简单 我们将通过一个代码示例 来说明如何更新您的 App 以使用 DeviceDiscoveryUI 包括深入了解如何使用 新的系统设备选择器来发现设备 以及如何使用 Network 框架 来连接这些设备 让我们从跨设备连接开始 连接附近的设备 并在它们之间交换数据 对于在您的 App 中 建立无缝 集成的体验 往往是至关重要的 健身和冥想 App 通常在大屏幕上观看效果最佳 在大屏上可以更清楚看见 教练的演示动作 用户还可以看到自己的心率 卡路里消耗 和从 Apple Watch 上 收集的运动数据 同样 通过连接 iPhone 的输入和操作 或者通过将第二屏幕 扩展到附近的 iPad 可以让游戏体验加强 更加身临其境 所有这些体验: 游戏、健身和健康 App 都需要可靠且易于使用的跨设备连接 而这一切都始于发现设备 为了帮助启动该发现 我们引入了 DeviceDiscoveryUI 一个全新的框架 提供安全 保护隐私的附近设备发现 在 iOS 16 中 DeviceDiscoveryUI 与 Network 框架配对 使您的 Apple TV App 与附近的 iPhone iPad 和 Apple Watch 之间 实现设备对设备的连接
DeviceDiscoveryUI 提供了 系统用户界面以便快速发现附近设备 一旦发现设备 您的 App 可以轻松打开 与该设备的连接 因为这个连接 是使用系统用户界面建立的 您无需担心 管理本地网络访问权限 而且由于系统会 安全地处理建立此连接 您不再需要进行自己的密钥交换 因为平台会为您加密传输的数据 在这里 我们可以看到 运行中的系统用户界面 在左侧 显示了您的 App 图标 以及所需的使用说明 解释您的 App 对跨设备连接的作用 右侧是已发现设备的列表 由于某些 App 可能仅在特定平台上可用 您可以按平台过滤发现的设备
在选择“Adam 的 iPhone” 时 系统提示 允许在这些设备之间创建连接 有了这个明确的用户同意 您不再需要请求访问 整个本地网络 一旦获得许可 您的 App 将在所选设备上启动 以处理传入的连接
这意味着在建立连接之前 您的 App 不再需要在两台设备上运行 当“Joe 的 Apple Watch”被授权后 系统会立即启动您的 App 以便两个设备可以连接
如果该设备上未安装您的 App 该系统会跳转至 App Store 这样方便用户下载您的 App 并开始使用新功能 这是在 watchOS 上的视图 点击按钮将立即在 App Store 中启动您的 App 页面 下载快速又轻松 我们已经讨论了 DeviceDiscoveryUI 的作用 让我们看看如何采用这个新框架
在之前的讲座中 我们使用 Network 框架创建了 Tic-Tac-Toe App 今天我们将更新它 以使用 DeviceDiscoveryUI 来发现和连接附近设备 在早期的迭代中 我们的 App 只支持 在 iOS 设备之间玩游戏 因此 首先 我们更新了 通用购买项目 并添加了一个 tvOS 和 watchOS 目标 它们都共享相同的捆绑 ID 我们已经更改了这个 App 所以您不是与其他玩家对战 而是使用您的设备 与电视上的 AI 对战 接下来 我们需要对 tvOS App 以及其他平台上的 Info.plist 进行补充 以声明我们新的 Tic-Tac-Toe App 服务 最后 我们将展示新的设备选择器 并用产生的终端来进行连接 现在我要切换到 Xcode 并向您展示那些新的 Info.plist 键是什么 以及如何将它们添加到 App 中 在 tvOS 上 我们的 App 需要告诉系统要发现的 App 服务 以及这些服务支持的平台 为此 我们需要添加新的 App 服务 Info.plist
该字典将映射到两个不同数组之一 在 tvOS 上 我们需要声明“浏览”数组 它包含我们 App 发现的 所有 App 服务 每个条目代表不同的 App 服务 第一个项目代表我们的 “TicTacToe”App 服务 它是一个字典 包含我们的服务标识符 使用说明和该服务支持的平台 服务标识符是我们服务的名称 “TicTacToe” 使用说明是一个字符串 将显示在设备选择器中 以解释为什么我们的 App 需要访问其他本地设备 最后 我们有平台支持 该数组包含服务所支持的平台 和系统将相应过滤发现的设备 您可以在此处看到我们的服务支持 iOS iPadOS 和 watchOS 设备 我们已经用相应的 App 服务字典更新了 用于 iOS 和 iPadOS 的 Info.plist 现在我们要更新 watchOS 的 plist 这一次 我们声明广告数组 因为 DeviceDiscoveryUI 将在 App 没有运行时启动它 系统使用此数组 来了解要宣传哪些服务 我们在广告数组中的条目只需要 “TicTacToe”服务标识符 确保在 tvOS Info.plist 中声明的 每个平台的服务标识符是相同的 现在 Tic-Tac-Toe 已被配置为 浏览和宣传我们的 App 服务 让它实际显示设备选择器 UI 我们的使用说明出现在左侧 我们确保此字符串处于运行状态 并告知用户连接设备的原因 以及他们要分享的数据 对于 Tic-Tac-Toe 我们 使用连接的设备作为控制器来玩游戏 回到 Xcode 中 因为 DeviceDiscoveryUI 取代了手动浏览附近设备的需要 并为我们保证了连接的安全性 因为已经不再需要 所以我们可以删 除 PeerBrowser 文件 和我们的密码扩展到 NWParameters 现在 我们需要参数来描述 我们如何连接到附近的设备
首先 我们在 NWParameters 上 使用新的便利初始化器 App 服务 它为我们提供了 这种本地连接所需的一切
接下来 我们可以使用 现有的框架器交流玩法动作 无需任何更改 只需 将其添加到这些参数中的协议栈中 现在 我们已准备好 创建并显示设备选择器 设备选择器是我们的 App 发现 附近的 iPhone iPad 和 Apple Watch 的工具 首先 我们需要检查当前设备 是否支持设备选择器 为此 我们使用浏览描述符 和将在选择器中使用的参数 调用 isSupported 函数 假设它返回 true 我们可以继续创建设备选择器
我们使用前面创建的参数和类型 为 App 服务的 浏览描述符实例化设备选择器 并指定我们在 Info.plist 中 定义的 App 服务名称
现在已经创建了设备选择器 我们需要呈现视图控制器 设备选择器需要 始终以全屏模式视图显示
接下来 我们需要 访问选择器的异步“终端”属性 一旦连接被确认 我们的 App 在远程设备上启动 我们将收到一个 nw_endpoint 然后继续执行 现在我们的 App 已经收到了 一个 nw_endpoint 我们可以使用它连接到所选设备 就像我们在之前的 Tic-Tac-Toe 中所做的那样 我们将在打开提供给设备选择器的 连接时使用相同的参数 除参数外 打开与此设备的连接 看起来和以前完全一样 移动到选定的设备 一旦我们的 App 启动 我们需要立即通过创建 NWListener 来实现我们的 App 对系统做出的承诺 NWListener 需要在 App 启动后立即创建 以接受该 App 服务的 任何传入连接 NWListener 需要使用 与之前完全相同的参数创建 我们需要使用 Info.plist 中的标识符 在监听器上设置 App 服务 当电视打开与此设备的连接时 我们建立的监听器将像之前一样 在此处的新连接处理程序中 接收该连接 现在连接已经正确建立 我们需要处理 App 状态转换 当我们的 App 在后台运行时 连接将转换到失败状态 并伴有关联错误 ECONNABORTED 如果我们想继续设备之间的通信 我们就建立一个新的连接 从电视连接到同一个终端 一旦启动 这个新的连接将保持在准备状态 并在 App 在所选设备上恢复时 进入就绪状态 在该设备上 新的连接将被交付到 相同的 NWListener 并可用于恢复我们的活动 就是这样 迁移到 DeviceDiscoveryUI 所需的一切现已完成 让我们看看运行中的游戏 该 App 在电视上启动 我们按下“寻找对手”键 就会显示设备选择器
当我们选择一个设备时 它会提示授权 获得授权后 App 会 立即启动到我们的游戏会话中
现在 我们可以通过在屏幕上 放置表情符号来与电视对战
很棒 将设备连接到 Apple TV 就是这么简单 Tic-Tac-Toe 可在开发者网站上使用 所以您可以下载它 并研究我们今天讨论的所有代码 如果您有任何问题 请在开发者论坛上发布 考虑在您的 App 中采用 DeviceDiscoveryUI 以提供无缝的跨设备体验 欢迎随时向我们反馈 我们知道 跨设备连接是一个必不可少的功能 DeviceDiscoveryUI 是为了响应开发者的反馈而创建的 我们期待与您一起创建这些功能 所以对于您想在 DeviceDiscoveryUI 中看到的任何内容 请在反馈助手中提交反馈 很高兴能与您一起改进这项技术 帮助您的 App 变得更好 感谢聆听 祝您有一个愉快的 WWDC 2022
-
-
正在查找特定内容?在上方输入一个主题,就能直接跳转到相应的精彩内容。
提交你查询的内容时出现错误。请检查互联网连接,然后再试一次。