Supercharge device connectivity with Wi-Fi Aware
2025年6月9日
一句话判断
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 获取信号强度、吞吐量、延迟等实时指标。
值得深挖的点
-
Wi-Fi Aware 不中断现有网络连接。这是相比传统 Wi-Fi Direct 的关键优势。用户保持互联网连接的同时,你的 app 可以与附近设备高速通信。
-
服务命名是全局的。服务名必须在 IANA 注册以避免冲突。格式是
service-name.tcp或service-name.udp。 -
AccessorySetupKit 的多传输协议配对。如果你的配件同时使用蓝牙和 Wi-Fi Aware,AccessorySetupKit 会在一次配对流程中同时完成两种传输的设置。
-
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()
}
最佳实践
-
先检查设备能力。使用
WACapabilities.supportedFeatures确认设备支持 Wi-Fi Aware,再启用相关功能。 -
配对完成后用
WAPairedDevice.allDevices监听配对设备列表变化。用户可能在系统设置中删除配对设备,你的 app 需要响应这个变化。 -
连接建立后及时停止 listener 和 browser。持续运行会消耗无线资源和电量,只在需要时开启。
-
使用 Traffic Service Class 区分数据优先级。低优先级数据用 background class,避免干扰其他流量。视频流用 interactive video class。
-
在真实 Wi-Fi 环境中测试。Wi-Fi 干扰、信号强度变化、设备能力差异都会影响实际性能。用
performanceReport监控连接质量。
还有什么值得关注
- Apple 提供了 Wi-Fi Aware 配件设计指南(Accessory Design Guidelines),硬件制造商应遵循该指南确保与 Apple 设备的互操作性。
- Sample app 展示了不同性能配置对实际行为的影响,建议下载体验。
- Wi-Fi Aware 是跨平台标准,你的 app 可以连接 Apple 设备、第三方设备和配件。