0 Preface/Foreword
0.1 概述
++Android的蓝牙Profile支持++:开发、全面、靠近规格。
++iOS的蓝牙Profile支持++ :收敛(convergence)、受控、服务于产品体验。
1 Android系统
1.1 目标
只要蓝牙SIG标准定义了,尽量支持。
1.2 蓝牙架构权限模型
- App
- Bluetooth API
- Profile Service (A2DP/HFP/HID/PBAP)
- BlueZ/Fluoride
- Profile Service (A2DP/HFP/HID/PBAP)
- Bluetooth API
++注意++:Profile是platform功能。
2 iOS系统
2.1 目标
只支持对最终用户体验有价值、苹果可控的Profile。
2.2 蓝牙架构权限模式
iOS蓝牙架构:
- System
- CoreBluetooth (BLE only)
- Classic Profiles(私有)
++注意++:
- App层完全看不到Classic Bluetooth profile,除了:
- A2DP/HFP(系统)
- HID(系统)
- BLE通过CoreBluetooth暴露GATT级别
2.3 iOS开放BLE的原因
- BLE是属性模型(GATT)
- 权限可控
- 数据结构明确
- BLE功耗低
- 适合移动生态
- BLE支持sandbox(沙盒)
++iOS:++
- BLE = 通用能力
- Classic = 专用能力
3 异同点
3.1 APP访问能力差异
|----------|---------|------------|
| 能力 | Android | iOS |
| SPP | ✅️ | ❌️(MFi除外 ) |
| PBAP | ✅️ | ❌️ |
| MAP(短信) | ✅️ | ❌️ |
| BLE GATT | ✅️ | ✅️ |
| HID | ✅️ | ✅️ |
| A2DP/HPF | ✅️(开放) | ✅️(扩展为私有) |
[APP访问能力]
3.1.1 SPP
SPP让APP直接裸通讯,iOS不允许绕过系统安全模型。
3.1.2 PBAP/MAP(电话本/短信)
iOS对用户隐私数据高度管控,不允许第三方设备直接拿到联系人/短信。
3.1.3 HID
对系统可用性至关重要,Apple自己也大量使用。(键盘、触控板)
4 工程建议
4.1 跨iOS&Android平台
++选择技术架构++:BLE + GATT
4.2 音频或输入设备
可以使用A2DP/HFP/HID,这三个协议,iOS和Android都支持。
++高级体验++:
- Android: Fast Pair / 标准扩展
- iOS:MFi / 私有协议