核心概念梳理
在 iOS 蓝牙开发中,理解角色分工是基础。
中心设备(Central):通常指 iPhone 或 iPad,负责发起连接和管理服务。 外围设备(Peripheral):如手环、耳机等,发布蓝牙服务供中心发现。
一个外围设备可以包含多个服务(Service),每个服务由 UUID 标识。服务下又包含一个或多个特征(Characteristic),特征是实际的数据载体,表现为键值对。特征支持多种属性,比如可读、可写、广播或通知。
实现流程
开发主要依赖 CoreBluetooth 框架,核心逻辑围绕 CBCentralManagerDelegate 展开。
1. 初始化与状态监听
首先创建 CBCentralManager 实例并设置代理,同时监听蓝牙是否可用。如果系统蓝牙未开启,后续操作将无法进行。
let manager = CBCentralManager(delegate: self, queue: nil)
2. 扫描与发现
调用 startScan 开始搜索周边设备。当找到目标时,会触发 didDiscoverPeripheral 回调,此时拿到的是 CBPeripheral 对象。
3. 连接与服务发现
确认设备后,调用 connectPeripheral 建立连接。连接成功后,需要请求读取该设备的服务列表(discoverServices)。这一步比较耗时,记得处理 didDiscoverServices 回调。
4. 特征读写
在服务列表中定位到目标特征后,即可进行数据交互。
- 写入数据:使用
writeValue(_:for:type:)发送指令。 - 读取结果:通过
didWriteValueForCharacteristic回调确认写入是否成功。
注意,如果是通知模式,需订阅特征的通知属性,并在 didUpdateNotificationState 中处理。
注意事项
字节序问题
iOS 的 NSData 字节顺序与网络标准字节序相反。如果涉及多字节数值(如 uint16_t),务必进行大小端转换,否则解析出的数据会是乱码。
分包策略
一次发送的数据量不宜过大,容易触发底层限制导致发送失败。建议将大数据拆分成小包依次发送,确保稳定性。
以上流程涵盖了从扫描到通信的基本闭环。实际项目中还需结合具体业务需求处理断连重连、权限申请等细节。

