Nearby Interaction 的新功能
What's new in Nearby Interaction
2022年6月6日
一句话判断
Nearby Interaction 框架今年最大的升级是与 ARKit 的深度整合,带来了类似 AirTag 精准查找的空间感知能力——如果你的应用涉及”找到附近的某个东西”,这场 Session 值得仔细看。
这场 Session 讲了什么
Apple Location Technologies 团队的 Jon Schoenberg 介绍了 Nearby Interaction 框架在 iOS 16 中的两大新功能:ARKit 增强模式和后台会话。
Nearby Interaction 基于 Apple 的 U1 超宽带芯片,提供设备间的精确距离和方向信息。2020 年首次发布时只支持两台 iPhone 之间的会话,2021 年扩展到 Apple Watch 和第三方 UWB 配件。今年最大的变化是引入了 ARKit 增强——利用 ARKit 计算的设备轨迹数据,大幅提升了超宽带的有效视场角和方向感知的稳定性。
Session 还介绍了后台会话功能,允许应用在后台持续追踪配件状态,以及第三方硬件支持的更新。
值得深挖的点
ARKit 增强模式的核心价值。 传统 Nearby Interaction 的超宽带视场角有限,方向信息并不总是可用。结合 ARKit 后,系统可以获取设备的运动轨迹,从而更稳定地推算目标方向。这套技术正是 AirTag 精准查找的底层方案。开启方式极其简单——只需在 NIConfiguration 上设置 isCameraAssistanceEnabled = true。
新的方向属性。 开启 ARKit 辅助后,NINearbyObject 新增两个属性:horizontalAngle(水平方位角,弧度制)和 verticalDirectionEstimate(垂直方向估计)。前者提供精确的水平方向,后者告诉你目标在你上方、下方还是同一水平面。
ARSession 的共享机制。 ARKit 增强模式会在 Nearby Interaction 框架内部自动创建 ARSession,但如果你的应用本身已经使用了 ARKit,你需要通过 setARSession() 方法将现有的 ARSession 共享给 NISession。这避免了两个 ARSession 冲突的问题。共享时对 ARConfiguration 有严格要求:世界对齐必须设为 gravity、协作和面部追踪必须禁用、初始世界地图为 nil。
后台会话。 新增的后台会话允许应用在后台状态下继续接收配件的更新。这对于”查找我的钥匙”这类场景至关重要——用户不需要一直打开应用。
代码片段
// 开启 ARKit 弫助模式
let config = NINearbyAccessoryConfiguration(peer: discoveryToken)
config.isCameraAssistanceEnabled = true // 一行代码开启 ARKit 增强
let session = NISession(configuration: config)
session.delegate = self
// 如果应用已有 ARKit 体验,需要共享 ARSession
// 在 SwiftUI 的 makeUIView 中:
let arView = ARView(frame: .zero)
niSession.setARSession(arView.session) // 共享给 Nearby Interaction
// 处理更新回调,获取新的方向信息
func session(_ session: NISession, didUpdate nearbyObjects: [NINearbyObject]) {
guard let object = nearbyObjects.first else { return }
// 新增的水平角度(弧度)
if let angle = object.horizontalAngle {
// 更新箭头方向指引
}
// 新增的垂直方向估计
if let vertical = object.verticalDirectionEstimate {
// 目标在上方、下方还是同一水平面
}
}
最佳实践
- ARKit 增强模式最适合引导用户找到静止物品的场景,不适合追踪快速移动的目标
- 共享 ARSession 时,确保
sessionShouldAttemptRelocalization返回false,否则 NISession 会被判定为无效配置而失效 - 在
didInvalidateWith回调中检查新的invalidARConfiguration错误码,及时修复配置问题 horizontalAngle和verticalDirectionEstimate可能为 nil,始终做好可选值处理- 应用必须在 Info.plist 中提供相机使用说明字符串,向用户解释为什么需要相机权限
- 对于已经使用 ARKit 的应用,确保只有一个 ARSession 在运行,通过
setARSession共享
还有什么值得关注
- 后台会话的具体 API 细节和生命周期管理需要进一步查阅文档
- 第三方 UWB 配件的支持在今年有所扩展,具体硬件认证流程值得关注
- 这套技术方案与 AirTag 精准查找使用相同底层技术,说明 Apple 正在将第一方功能的成熟技术逐步开放给开发者
- 配套观看 WWDC 2020 的 “Meet Nearby Interaction” 和 WWDC 2021 的 “Explore Nearby Interaction with third-party accessories” 可以获得完整上下文