大多数浏览器和
Developer App 均支持流媒体播放。
-
Nearby Interaction 的新功能
了解如何借助 Nearby Interaction 框架,轻松将超宽带 (UWB) 集成到您的 App 和硬件配件中。学习如何整合 ARKit 的视觉空间功能和 U1 芯片的无线电敏感性,以便准确地定位附近的静止物体。我们还将向您介绍如何使用蓝牙配对的 UWB 配件创建后台交互。
资源
相关视频
WWDC21
WWDC20
-
下载
♪ 柔和乐器演奏的嘻哈音乐 ♪ ♪ 嗨 我是 Jon Schoenberg 是一名工程师 就职于 Apple 的 定位技术团队 本期讲座 我将介绍 Nearby Interaction 中的 一项新功能这项功能会为您 打造更丰富 更多样化 且具有空间感知效果的体验 Nearby Interaction 框架使得 充分利用 U1 的能力更加容易 U1 是 Apple 的 超宽带技术芯片 这一框架能够 在附近的 Apple 设备 或与 U1 超宽带芯片 兼容的配件之间 创建精确的空间感知交互 我们先快速回顾一下 过去两年来为您提供的功能 当 Nearby Interaction 在 WWDC 2020 上首次亮相时 这项功能专注于的是利用 U1 在两台 iPhone 之间 创造并运行会话 在 WWDC 2021 上 这项功能得到了扩展 支持与 Apple Watch 和第三方超宽带兼容配件 运行会话 如果您有兴趣深入了解 Nearby Interaction 框架的 API 请查看 WWDC 2020 年 “了解 Nearby Interaction”演讲 和 2021 年的 “探索与第三方配件的 Nearby Interaction” 用户社区对 Nearby Interaction 的反响 令我们非常兴奋 在本期讲座中 我很高兴能为您介绍新功能 和新功能改进 我将围绕两个主题展开 使用 ARKit 增强 Nearby Interaction 和后台会话 同时 我将分享一些 能简化 Nearby Interaction 框架使用的改进 而作为总结 我会聊一聊对去年宣布的 第三方硬件支持的更新 我们兴奋地期待着 您会如何使用这些新功能 那我们来深入了解一下细节吧 我先从令人振奋的新功能开始说起 这项新功能将 ARKit 与 Nearby Interaction 紧密集成 这项新功能 通过利用 ARKit 计算的设备轨迹 增强了 Nearby Interaction 有 ARKit 增强的 Nearby Interaction 利用了 与实现 AirTag 的 Precision Finding 相同的底层技术 而我们通过 Nearby Interaction 将这种技术提供给您 最佳用例是引导用户 找到附近特定对象的体验 例如放错地方的物品 感兴趣的对象 或用户想要与之交互的对象 通过集成 ARKit 和 Nearby Interaction 距离和方向的信息 比单独使用 Nearby Interaction 更稳定可用 能有效拓宽超宽带视场 最后 这个新功能 最适合于与固定设备交互之用 我们现在就演示一下 ARKit 和 Nearby Interaction 的新集成 在您 App 中的可能性 我手头有一个用于 喷气发动机博物馆的 App 博物馆中具有超宽带配件 帮助引导用户参观展品 我们去找下一个喷气发动机吧 当用户选择前往下一个展览时 App 发现超宽带配件 并进行必要的信息交换 从而开始使用 Nearby Interaction 然后 App 指示用户 将手机左右移动 通过 ARKit 使用增强的 Nearby Interaction 模式 App 开始寻找 下一个展览的物理位置 现在 App 确定了 下一个展览的方向 一个简单的箭头图标告诉用户 去查看箭头指向位置出现的东西 这种丰富的空间感知信息 利用 ARKit 和 Nearby Interaction 的结合 甚至可以指向 与用户行进方向相反的 在用户背后的展品 最后 App 会在 AR 世界中 显示下一个展览位置的叠加层 而 App 会提示用户 稍微上下移动 iPhone 从而在 AR 世界中 找到展品的位置 将 AR 内容放入场景中后 Nearby Interaction 超宽带测量值 与 ARKit 的强大组合 能让用户轻松地前往 下一个喷气发动机的位置 我虽然没有找到喷气发动机 但我找到了皇后 现在我们再看看 如何启用这种增强的 Nearby Interaction 模式 使用 ARKit 启用增强模式很简单 在 iOS 15 中 您可以通过在您的 App 中 从附近的对等点 接受 NIDiscoveryToken 创建一个会话配置 并运行 NISession 在新的和现有的 Nearby Interaction 用例上 只需启用新的 isCameraAssistanceEnabled 属性 这一属性位于 NIConfiguration 子类下 就可以很轻松地 用 ARKit 启用增强模式 若要使用 ARKit 的增强模式 只需要设置 isCameraAssistanceEnabled 属性 当两台 Apple 设备交互时 或一台 Apple 设备 与第三方超宽带配件交互时 相机辅助是可用的 我们来看看 当 NISession 在启用 相机辅助的情况下运行时 会发生什么 启用相机辅助功能后 会在 Nearby Interaction 框架内 自动创建一个 ARSessionan 您不需要手动创建此 ARSession 在启用了相机辅助的情况下 运行 NISession 也会在 Nearby Interaction 框架中 自动创建 ARSession 并运行 ARSession 框架 ARSession 在 App 进程中运行 因此 App 必须 在它的 Info.plist 中 提供 CameraUsageDescription 目的字符串 确保字符串要有用 从而告诉你的用户 为什么想要获得良好使用体验 必须要使用相机 对于给定的 App 只能运行一个 ARSession 也就是说 如果您的 App 中 已经拥有 ARKit 就需要向 NISession 共享 您创建的 ARSession 要向 NISession 共享 ARSession 可以使用 NISession 类上 的一个新的 setARSession 方法 在 NISession 上运行之前 调用 setARSession 时 在 Nearby Interaction 框架内 不会自动创建 ARSessionan 这确保了可以在 App 中 在拥有 ARKit 体验的同时 能够获得 Nearby Interaction 中的 相机辅助 在这个 SwiftUI 示例中 作为 makeUIView 函数的一部分 ARView 中的底层 ARSession 通过新的 setARSession 方法 向 NISession 共享 如果您直接使用 ARSession 那么就需要 在 ARSession 上调用运行 ARWorldTrackingConfiguration 此外 还必须在 这个 ARConfiguration 中 以特定的方式配置几个属性 以确保相机辅助的 高质量性能 把 worldAlignment 设置为 .gravity 禁用协作和 userFaceTracking initialWorldMap 为 nil 还有一个委托 其 sessionShouldAttemptRelocalization 方法 返回值应为 false 我们再来看一些 共享您创建的 ARSession 时的最优方法 在您的 NISessionDelegate didInvalidateWith 错误方法中 请一直检查错误代码 如果用于运行共享 ARSession 的 ARConfiguration 不符合概要属性 NISession 将会失效 将会返回一个新的 NIError 码 invalidARConfiguration 若要在 App 中 接收附近的对象更新 请继续在您的 NISessionDelegate 中 使用 didUpdateNearbyObjects 方法 在您的 didUpdateNearbyObjects 方法中 您可能会检查附近的对象 以找到所需的对等方 并根据 NINearbyObject 的 距离和方向属性更新 UI 调用它的时候要时刻小心 因为可能是 nil 启用相机辅助功能后 NINearbyObject 中 有两个新属性可用 第一个是 horizontalAngle 这是以弧度表示的一维角 指示到附近物体的方位角方向 当不可用时 这个值将为 nil 第二 verticalDirectionEstimate 是垂直维度中 与邻近对象的位置关系 这是一个新的 VerticalDirectionEstimate 类型 距离和方向表示用户设备 和附近物体之间的关键空间关系 距离以米为单位 方向是从您的设备 到附近物体的一个三维矢量 水平角是指 运行 NISession 的设备与附近物体 在局部水平面上的夹角 水平角包括了两个设备之间的 任何垂直位移偏移 和设备本身的 任何水平旋转 尽管物体方向是三维 水平角是用一维的方式 表示了两个设备之间的朝向 这个水平角属性 与方向属性互补 而如果方向无法识别 水平角可以帮助您 将用户引导至附近的对象 垂直方向估计 是对垂直位置信息的定性评估 您可以利用它 引导用户前往不同层 我们再来看看新的 VerticalDirectionEstimate 类型 VerticalDirectionEstimate 是 NINearbyObject 内嵌套的枚举 表示与附近对象 垂直关系的定性评估 在使用 VerticalDirectionEstimate 前 请确保检查 这项属性的值为 unknown 垂直关系可以是 相同 (same) 上 (above) 下 (below) 还有上或 下 (aboveOrBelow) 这样的特殊值 这一特殊值表示 附近物体不在同一水平面上 但位置不明显 可能在设备上方或下方 超宽带测量值受 视场和障碍物的影响 用于方向信息的视场 对应于从设备后部投射的锥形 当启用相机辅助时 从 ARKit 计算出的设备轨迹 可以在更多场景中提供 距离 方向 水平角度 和垂直方向估计 有效扩展超宽带传感器的视场 我们再来看利用 ARKit 和 Nearby Interaction 的集成 在场景中放置 AR 对象 为了让您更容易地将 表示附近物体的三维虚拟内容 覆盖到摄像头源可视化上 我们添加了一个辅助方法 NISession 上的 worldTransform 这个方法在 ARKit 的坐标空间中 会返回一个 worldTransform 它表示给定的附近物体 在物理环境中可用的位置 当不可用时 这种方法会返回 nil 我们在演示视频中使用了这种方法 将浮动的球体置于 下一个展品的上方 我们想让您尽可能容易地 利用 Nearby Interaction 位置输出 用您的应用来操纵 AR 世界中的内容 iOS 中 两个强大的系统结合在一起 您的用户必须在垂直和水平方向 充分扫动设备 从而让相机辅助 充分计算周围世界变换 当用户扫动设备不充分时 相机辅助无法完全覆盖到 ARKit 世界变换 这个方法就会返回 nil 如果世界变换对您的 App 体验很重要 就要注意引导用户充分扫动设备 从而生成这种变换 再来看看我们对 NISessionDelegate 所做的一些补充 以使您能够像在演示中看到的那样 指导用户 要帮助引导用户朝向指定对象 一个 NISessionDelegate 回调函数 会通过新的 didUpdateAlgorithmConvergence 委托方法 提供关于 Nearby Interaction 算法收敛的信息 算法收敛可以帮助你理解为什么 水平角度 垂直方向估计 和 worldTransform 是不可用的 以及用户可以做些什么 来解决这些属性 委托会提供 一个新的 NIAlgorithmConvergence 对象 和一个可选的 NINearbyObject 只有当您在 NIConfiguration 中 启用相机辅助时 才会调用此委托方法 让我们看看新的 NIAlgorithmConvergence 类型 NIAlgorithmConvergence 具有单一状态属性 这种属性是 NIAlgorithmConvergenceStatus 类型 NIAlgorithmConvergenceStatus 是一个枚举类型 表示算法是否收敛 如果算法不收敛 关联值的数组 就会提供 NIAlgorithmConvergenceStatus.Reasons 我们回到新的委托方法 假如您要给用户更新 相机辅助状态 您可以打开收敛状态 如果未知或收敛 将该信息显示给用户 请务必检查 NINearbyObject 当对象为 nil 时 NIAlgorithmConvergence 状态 适用于会话本身 而不是特定的 NINearbyObject 当状态未收敛时 它会还包含一个相关值 描述算法不收敛的原因 因此 可以使用本地化的描述 来帮助您更好地与用户进行交流 接下来让我们看看如何使用这些值 一定要仔细检查 notConverged 这个 case 和相关的 reason 值 这样可以引导用户采取 有助于生成关于附近对象 所需信息的操作 关联值是一个 NIAlgorithmConvergence StatusReasons 数组 reason 值可以表明总体运动不足 水平或垂直扫动中的运动不足 和照明不足 请注意 可能同时存在多种原因 请根据对 App 中 最重要的操作顺序 指导用户完成每个操作 回想一下我在演示中 是如何移动手机的 需要在水平和垂直方向上进行扫动 以解析世界变换 这是带有相机辅助的 增强的 Nearby Interaction 模式 最重要的一点 我们做了一些额外的改变 来帮助您更好地利用此模式 以前 NISession 上的 单个 isSupported 类变量 就可以用来检查给定设备上 是否支持 Nearby Interaction 现在这种方式已弃用 随着相机辅助功能的增加 我们通过在 NISession 中 能返回一个新的 NIDeviceCapability 对象的 新的 deviceCapabilities 类成员 使 Nearby Interaction 支持的设备功能更加具有描述性 检查 supportsPreciseDistanceMeasurement 属性 在最低程度上相当于现在已弃用的 isSupported 类变量 当您确定了设备支持 精确的距离测量 你应该使用 NIDeviceCapability 来充分了解设备 App 中 Nearby Interaction 的可用功能 建议您通过检查 NIDeviceCapability 对象的 附加 supportsDirectionMeasurement 和 supportsCameraAssistance 属性 来定制您的 App 体验 以适应设备的功能 并不是所有的设备都支持方向测量 或相机辅助 所以请确应用体验 适合设备功能 特别要注意的是 为了更好地支持 Apple Watch 要加入仅限距离的体验 以上就是将相机辅助作为 通过 Nearby Interaction 增强 ARKit 的方式 现在让我们把注意力转向 辅助后台会话 现在您可以在 App 中 使用 Nearby Interaction 让用户指向其他设备 寻找朋友 并根据距离和方向 显示控件或其他 UI 然而 当 App 切换到后台 或者当用户在 iOS 和 watchOS 上锁定屏幕时 所有正在运行的 NISession 都会被暂停 直到 App 返回前台运行 这意味着当你与你的配件交互时 需要专注于实际的用户体验 从 iOS 16 开始 Nearby Interaction 已经实现免手持 现在 当您走进有智能音箱的房间时 你可以使用 Nearby Interaction 来播放音乐 Nearby Interaction 能帮您打开电动自行车 或触发其他配件上的免手持操作 即使用户没有通过辅助后台会话 积极使用您的 App Nearby Interaction 也能使用 让我们看看如何实现这个 振奋人心的的新功能 我们先来回顾一下这个序列 如何配置和运行 一个带有配件的 NISession 你可能认出了这个序列 去年的 WWDC 演讲中出现过 配件通过数据通道 发送其超宽带配件配置数据 到您的 App 用这个数据 您可以创建一个 NINearbyAccessoryConfiguration 创建一个 NISession 设置一个 NISessionDelegate 从配件获得超宽带测量值 使用您的配置运行 NISession 会话将返回 可共享的配置数据来设置配件 以便与 App 进行互操作 将此共享配置数据 发送回配件后 就可以在 App 和配件中 接收超宽带测量数据 有关配置和运行的所有详细信息 与第三方配件的 Nearby Interaction 请回顾去年的 WWDC 讲座 接下来看看如何设置新的后台会话 前面的序列图显示了 App 和配件之间的数据流 在配件和 App 之间 使用低功耗蓝牙 建立通信通道是很常见的做法 当使用低功耗蓝牙与配件配对时 您可以启用 Nearby Interaction 在后台启动和继续会话 让我们仔细看看这是怎么做到的 现在 您可以配置 App 来使用 Core Bluetooth 在后台时就能 发现 连接到低功耗蓝牙配件 并与低功耗蓝牙交换数据 欲了解更多详情 请查看现有的 《Core Bluetooth 编程指南》 或 2017 年的 WWDC 讲座 利用强大的后台操作从 从 CoreBluetooth 高效发现配件 并在后台运行您的 App 您的 App 可以启动一个 NISession 与低功耗蓝牙配件 在后台也支持超宽带 现在让我们看看序列图是如何更新 以反映这种新模式 要与这个配件交互 首先 确保它与低功耗蓝牙配对 然后 连接到配件 当配件生成 配件超宽带配置数据时 应该能既发送到您的 App 又能执行 Nearby Interaction GATT 服务 接下来我会详细介绍 最后 当您的 App 收到 配件的配置数据时 使用一个新的初始化器构造一个 NINearbyAccessoryConfiguration 对象 该初始化器 同时提供 UWB 配置数据 及它的蓝牙对等标识符 使用这项配置运行您的 NISession 通过在 NISessionDelegate 中 接收共享配置 来确保你完成了设置 并将可共享的配置发送到配件 为了让你的配件在它的蓝牙标识符 和超宽带配置之间 创建关系 它必须实现新的 Nearby Interaction GATT 服务 Nearby Interaction 服务 包含单个加密特性 叫做配件配置数据 它包含用于初始化 NINearbyAccessoryConfiguration 对象 相同 UWB 配置 数据 iOS 使用这个特性来验证 在您的蓝牙对等标识符 和您的 NISession 之间的关联 您的应用无法直接读取此特征 您可以在 developer.apple.com/nearby-interaction 上 找到更多关于 Nearby Interaction GATT 服务的细节 如果您的配件同时 支持多个 NISession 创建配件配置数据的多个实例 每个 NISession 的 UWB 配置都不同 这一点是配件所必需的 让我们深入研究一些代码 来讨论一下 App 中需要实现什么 配件后台会话要求配件 与用户的 iPhone 进行 LE 配对 您的应用负责触发这个过程 要触发它 实施扫描配件的方法 连接到配件并发现它的服务和特性 然后 实施一个方法来读取 配件的加密特征之一 您只需执行一次 它将向用户显示接受配对的提示 辅助后台会话也需要 与配件进行蓝牙连接 即使您的应用在后台 也必须要 能够形成这种连接 那么就要实施一种方法来发起到 配件的连接尝试 即使配件不在蓝牙范围内 您也应该这样做 然后 当你的应用 由 Core Bluetooth 重新启动后 实施 CBManagerDelegate 方法 并在建立连接时进行处理 现在您就可以运行配件后台会话了 通过提供配件的 UWB 配置数据 和来自 CBPeripheral 标识符的 蓝牙对等标识符 来创建 NINearbyAccessoryConfiguration 对象 使用该配置 运行 NISession 它会在您的 App 在后台时运行 内容就这么多了 不过 Xcode 中还有一个设置 需要更新 这个后台模式需要 Nearby Interaction 字符串 位置在应用的 Info.plist 中 UIBackgroundModes 数组里 您还可以使用 Xcode 功能编辑器 添加这个后台模式 您还需要保证 启用了“使用低功耗蓝牙配件” 以确保您的 App 可以在后台连接配件 关于这个新的配件后台会话 有一个重要的注意事项 当您的 App 在后台时 NISession 将继续运行 并且不会被暂停 因此配件上可以获取超宽带测量值 您必须在配件上的超宽带测量值上 使用并进行操作 您的 App 不会收到运行时间 您也不会收到 didUpdateNearbyObjectand 委托回调 直到 App 返回到前台才会收到 使用这种新的后台模式时 我们来回顾一下以下的最优方法 触发与您的配件的 LE 配对 将提示用户接受配对 这样做的时候 用户能直观地明白 他们为什么要配对配件 可能是在创建 与配件关系的设置流中 也可能是用户明确表示 希望与配件交互时触发 当您的 App 处于后台时 您的 NISession 不会被暂停 但它不会收到 didUpdateNearbyObject 委托回调 但是 您的配件将收到 超宽带测量值 直接在您的配件上处理这些测量值 以确定用户应该采取什么操作 最后 通过在重要的用户交互过程中 仅从配件发送数据到 App 从而来管理电池使用 例如 向用户显示通知 以上就是您在后台会话中 需要了解的全部内容 接下来 最后一个主题是 关于第三方硬件支持 今天 我很高兴地向您宣布 之前与 U1 兼容的 Beta 版开发工具包 现在已经结束 Beta 版测试 可以更广泛地使用 请访问 developer.apple.com/nearby-interaction 了解更多关于 兼容的超宽带开发套件 我们还更新了 配件制造商的规范 以支持新的配件后台会话 包括 Nearby Interaction GATT 服务 内容也在刚才的网站中 那么 让我们总结一下 本次讲座中讨论的内容 现在 Nearby Interaction 包含了 新的相机辅助模式 紧密地集成了 ARKit 和 Nearby Interaction 为您提供无缝体验 以创造出空间感知体验 引导用户到附近的对象 配件后台会话使您能够发起会话 并将会话扩展到后台 让您为用户打造更加轻松 无需手持的体验 我们宣布了第三方兼容 超宽带硬件支持的更新 令人振奋 以上就是今年的 Nearby Interaction 更新内容 请下载演示视频 请对更新的功能提供反馈 请查看更新的第三方规范 并去创造具有空间体验的 神奇 App 吧 谢谢 ♪
-
-
正在查找特定内容?在上方输入一个主题,就能直接跳转到相应的精彩内容。
提交你查询的内容时出现错误。请检查互联网连接,然后再试一次。