Android和iOS支持蓝牙profile的差异

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是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 / 私有协议