Supercharge device connectivity with Wi-Fi Aware
Privacy & Security 进阶 1m

Supercharge device connectivity with Wi-Fi Aware

2025年6月9日

在 Apple 官方观看视频

一句话判断

Wi-Fi Aware 是 Apple 官方的 P2P 直连方案 — 不依赖路由器,不中断现有 Wi-Fi 连接,高吞吐低延迟,配合 DeviceDiscoveryUI 和 AccessorySetupKit 做发现配对,用 Network framework 建连接。做本地文件传输、屏幕共享、配件控制的开发者终于有了一等公民 API。

这场 Session 讲了什么

Swetank 系统介绍了 Wi-Fi Aware 框架的完整使用流程:

概述:Wi-Fi Aware 是 Wi-Fi Alliance 维护的全球标准,支持设备间直接通信(不经过路由器或服务器)。与现有 Wi-Fi 连接共存 — 设备保持互联网连接的同时使用 Wi-Fi Aware。支持高吞吐、低延迟、Wi-Fi 层认证加密、多设备同时连接。

两大核心流程

  • 配对(Pairing):一次性建立信任的过程。两种框架可选 — DeviceDiscoveryUI(app 间或 app 到设备的配对,支持 Apple 和第三方设备)和 AccessorySetupKit(硬件配件专用,支持同时配对蓝牙和 Wi-Fi Aware)。配对过程:选择设备 -> 输入 PIN 码 -> 系统完成配对。
  • 连接(Connecting):配对后的设备通过 Network framework 建立连接。Publisher 发布服务并监听连接,Subscriber 订阅服务并浏览可连接设备。

服务声明:在 Info.plist 中通过 WiFiAwareServices 声明服务。服务名必须唯一,不超过 15 个字符,只包含字母/数字/短横线。两个角色:Publisher(服务提供者)和 Subscriber(服务使用者)。一个 app 可以同时充当两个角色。

性能优化:两种调优维度 — Performance Mode(bulk 低功耗高延迟 / real-time 低延迟高功耗)和 Traffic Service Class(best effort / interactive video / voice / background)。系统默认 bulk + best effort。可通过 performanceReport 获取信号强度、吞吐量、延迟等实时指标。

值得深挖的点

  1. Wi-Fi Aware 不中断现有网络连接。这是相比传统 Wi-Fi Direct 的关键优势。用户保持互联网连接的同时,你的 app 可以与附近设备高速通信。

  2. 服务命名是全局的。服务名必须在 IANA 注册以避免冲突。格式是 service-name.tcpservice-name.udp

  3. AccessorySetupKit 的多传输协议配对。如果你的配件同时使用蓝牙和 Wi-Fi Aware,AccessorySetupKit 会在一次配对流程中同时完成两种传输的设置。

  4. real-time 模式的电池影响需要谨慎评估。它提供最低延迟但消耗更多电量。大多数场景用 bulk + best effort 就够了。只在视频流、实时控制等真正需要低延迟的场景下使用 real-time。

代码片段

Info.plist 服务声明

<key>WiFiAwareServices</key>
<dict>
    <key>file-service.tcp</key>
    <dict>
        <key>Publishable</key>
        <true/>
        <key>Subscribable</key>
        <true/>
    </dict>
    <key>drone-service.tcp</key>
    <dict>
        <key>Subscribable</key>
        <true/>
    </dict>
</dict>

用 DeviceDiscoveryUI 配对

// Publisher 端
let pairingView = DevicePairingView(
    service: WAPublishableService.fileService
)

// Subscriber 端
let picker = DevicePicker(
    service: WASubscribableService.fileService
)
// 选择设备后获取可连接的网络端点

建立 Wi-Fi Aware 连接

// Publisher:监听连接
let listener = NetworkListener(
    service: WAPublishableService.fileService,
    deviceFilter: deviceFilter
)
try await listener.run { connection in
    // 收到连接,开始数据交换
}

// Subscriber:浏览并连接
let browser = NetworkBrowser(
    service: WASubscribableService.fileService,
    deviceFilter: deviceFilter
)
for try await endpoint in browser.run() {
    let connection = NetworkConnection(to: endpoint)
    try await connection.start()
}

最佳实践

  1. 先检查设备能力。使用 WACapabilities.supportedFeatures 确认设备支持 Wi-Fi Aware,再启用相关功能。

  2. 配对完成后用 WAPairedDevice.allDevices 监听配对设备列表变化。用户可能在系统设置中删除配对设备,你的 app 需要响应这个变化。

  3. 连接建立后及时停止 listener 和 browser。持续运行会消耗无线资源和电量,只在需要时开启。

  4. 使用 Traffic Service Class 区分数据优先级。低优先级数据用 background class,避免干扰其他流量。视频流用 interactive video class。

  5. 在真实 Wi-Fi 环境中测试。Wi-Fi 干扰、信号强度变化、设备能力差异都会影响实际性能。用 performanceReport 监控连接质量。

还有什么值得关注

  • Apple 提供了 Wi-Fi Aware 配件设计指南(Accessory Design Guidelines),硬件制造商应遵循该指南确保与 Apple 设备的互操作性。
  • Sample app 展示了不同性能配置对实际行为的影响,建议下载体验。
  • Wi-Fi Aware 是跨平台标准,你的 app 可以连接 Apple 设备、第三方设备和配件。
隐私与安全 系统服务