Explore UWB-based car keys
System & Services 进阶 22m

探索基于 UWB 的数字车钥匙

Explore UWB-based car keys

2021年6月9日

在 Apple 官方观看视频

一句话判断

UWB(Ultra Wideband)让数字车钥匙从”手机靠近车就能开”进化到了”手机在口袋里就能开” —— 精确到厘米级的空间感知才是这个技术真正的价值,但车企的适配进度比想象中慢得多。

这场 Session 讲了什么

Session 详细讲解了苹果数字车钥匙(Digital Car Keys)在 iOS 15 中的升级,重点是 U1 芯片的 UWB 技术如何让车钥匙体验更自然。

传统的 BLE(蓝牙低功耗)车钥匙只能判断手机在不在车的附近(几米范围),而 UWB 可以精确到厘米级的位置判断。这意味着系统能知道你站在车的哪一侧、是驾驶员还是乘客、离车门多远。基于这些信息,车可以实现”靠近即解锁”、“离开即上锁”的无感体验。

还讨论了车钥匙的安全架构:通过 Secure Element 存储密钥、NFC 作为 UWB 的后备方案、以及通过 iMessage 共享车钥匙的功能。

值得深挖的点

UWB 精确定位的工作原理。iPhone 的 U1 芯片发送 UWB 脉冲信号,车端的 UWB 锚点接收并计算飞行时间(Time of Flight),从而得到精确距离。多个锚点(前左、前右、后部)通过三角定位确定手机的 3D 位置。精度可达 10 厘米以内,远超 BLE 的米级精度。这个精度足够区分”站在车门外”和”坐在驾驶座上”。

密钥管理的安全链路。车钥匙的私钥存储在 iPhone 的 Secure Element 中,和 Apple Pay 使用相同的安全硬件。交易时通过 UWB/NFC 通道进行挑战-响应认证,密钥永远不会离开 Secure Element。共享钥匙时,通过 iMessage 传输的是经过加密的钥匙配置,接收方设备需要用自己的 Secure Element 解锁。

代码片段

通过 Wallet API 添加车钥匙(概念代码):

import WalletOrders

// 车企后端生成 PKPass 格式的车钥匙凭证
func addCarKeyPass(from url: URL) {
    // 用户点击添加按钮后,系统会弹出添加到 Wallet 的确认框
    PKAddPassesViewController.requestAutomaticPassPresentationSuppression { requestToken in
        // 在 app 内处理添加流程
    }
}

检测 UWB 可用性

import CoreLocation

func checkUWBCapability() {
    // 检查设备是否支持 UWB(需要 iPhone 11 或更新机型)
    let isUWBAvailable = NISession.deviceCapabilities.supportsPreciseDistanceMeasurement
    if isUWBAvailable {
        print("设备支持 UWB 精确定位")
        setupNearbyInteraction()
    } else {
        print("设备不支持 UWB,回退到 BLE/NFC 模式")
    }
}

NearbyInteraction 实现距离感知

import NearbyInteraction

class CarKeyDistanceManager: NSObject, NISessionDelegate {
    var session: NISession?

    func setupNearbyInteraction() {
        session = NISession()
        session?.delegate = self

        // 配置交互 token(由车端提供)
        let config = NINearbyPeerConfiguration(peerToken: carPeerToken)
        session?.run(config)
    }

    func session(_ session: NISession, didUpdate nearbyObjects: [NINearbyObject]) {
        guard let car = nearbyObjects.first else { return }
        // 获取精确距离(米)
        if let distance = car.distance {
            print("距离车辆: \(String(format: "%.2f", distance)) 米")
            // 距离小于 1 米且在驾驶员侧,自动解锁
            if distance < 1.0 {
                unlockCar()
            }
        }
        // 获取方向(水平角度)
        if let direction = car.horizontalAngle {
            print("方向角: \(direction) 弧度")
        }
    }
}

最佳实践

  1. UWB 作为主通道,NFC 作为后备,BLE 作为补充。三层方案确保在各种环境下都能工作。UWB 信号被金属遮挡时(比如停车场混凝土墙),回退到 BLE。
  2. 共享钥匙要设置合理的权限级别。给家人”完全访问”、给代客泊车”受限访问(只能开不能锁、限速)“、给临时用车人”限时访问”。
  3. UWB 功耗控制。NISession 在 app 进入后台时会自动暂停,需要配合 Background Modes 中的 Location Updates 保持活跃。但要谨慎使用,持续 UWB 扫描会显著消耗电量。

还有什么值得关注

  • 数字车钥匙现在支持通过 iMessage 共享,对方不需要安装车企 app。
  • Apple Watch 也支持作为车钥匙使用,UWB 在 Watch Series 6 及以上可用。
  • 车钥匙的标准化工作由 Car Connectivity Consortium(CCC)推动,苹果的方案符合 CCC 3.0 规范。
WWDC 2021