原文地址:http://blog.csdn.net/yyang_Z/article/details/52016793?locationNum=4
硬件知识储备:
Bluetooth:是一种无线技术标准,可实现固定设备、移动设备和楼宇个人域网之间的短距离数据交换。注:蓝牙4.0非蓝牙2.1的升级,使用了新的协议
MFI:通俗的讲就是采用External Accessory Native的传统蓝牙交互的代名词,因为这种交互需要苹果MFI认证。
BLE(Bluetooth Low Energy):蓝牙省电模式,支持小规模的数据传输,是广大做iOS应用与蓝牙交互,不想通过MFI认证的开发者们的福音。
MFI,蓝牙2.1的交互:
- 使用ExternalAccessory.framework,具体可参考https://developer.apple.com/reference/ExternalAccessory的官方文档及EA的Demo
- 声明App支持的协议,通常推荐使用反DNS形式的命名协议,例:com.xx.protocol
- 通信步骤:创建EASession,使用NSInputStream和NSOutputStream收发数据包,数据格式通常由与交互设备通信协议决定。
- 与设备交互步骤:获取连接的外设,实现NSStreamDelegate的协议,主要包含数据的拆包、封装和分发(数据包,数据解析model的建立)
- 大数据的传输需要拆分多个数据包收发,此时还要小心外设的断开造成的数据的丢失或者错乱,需要做相应Exception的处理
- 注册EAAccessoryDidConnectNotification及EAAccessoryDidDisconnectNotification通知,对设备的断连及时做处理,注意与BLE断连的不同
- App进入后台,防止通讯断开的操作,需设置Required background modes的选项App communicates with an accessory
- MFI设备与App的交互只需要在手机蓝牙设置界面进行简单的搜索、连接和断开操作,注意与BLE连接的不同
- 待用户点击连接了手机蓝牙设置中的某个外设,进入App后,需要做大约10~30s的尝试获取设备操作,因为可能系统的原因,设备获取有延迟,即:[[EAAccessoryManager sharedAccessoryManager] connectedAccessories];
- App与设备断开操作的事件处理,例:用户的退出账户,因为MFI设备与App的连接因业务需要,也可能存在设置绑定功能
BLE,蓝牙4.0的使用:
- 使用CoreBluetooth.framework,具体可参考https://developer.apple.com/reference/corebluetooth的官方文档
- 建议使用封装BLE的一些第三方框架,简单易控,例BabyBluetooth等
- 苹果手机的蓝牙Mac地址获取不到,但可生成UUID,唯一标示设备
- 与设备交互步骤:实现CBCentralManagerDelegate协议,设置过滤条件,扫描蓝牙外设列表,连接外设,发现Services和搜索到的Characteristics,读写数据
- 外设与App的蓝牙4.0数据交互,需要在APP里进行BLE的搜索、连接,手机蓝牙设置界面的简单连接操作一般在首次连接后进行,当然支持外设处于配对状态时,直接在其中搜索到蓝牙2.1设备,进行传统蓝牙交互,例,传递音乐数据等
- BLE断连无须注册通知,会有断连的回调,同时通过centralManagerDidUpdateState检测蓝牙开启关闭状态,实现断连的处理
- 与MFI相似,App进入后台,防止通讯断开的操作,需设置Required background modes的两个选项:App communicates using CoreBluetooth与App shares data using CoreBluetooth
- 当中心设备周围统一的peripheral很多时,会出现连接、数据交互错误的问题,需要避免。必要时可根据获取外设的RSSI值来连接自己的设备
- 蓝牙4.0的交互不稳定,连接多次后可能还会随时断开,广播包中断,远程连接可能需要回连的时间也会较长
- BLE的连接成功后并没有真正绑定设备,绑定操作是在可读写数据后,App中也可模仿手机蓝牙设置,做绑定UUID操作,方便外设的直接连接
- IPhone4设备或者iOS8.0系统以下的设备,BLE交互不稳定,可能会出现连接不成功或搜索不到相应BLE设备等问题
- 标准服务不用配对,系统弹出配对提示只是自定义服务的结果,BLE设备只进行简单的心率数据,运动步数等交互时,无须自定义服务
- 蓝牙4.0的应用一般有手环,监测心率设备,支持BLE蓝牙耳机等,据调研,BLE可与MFI绑定交互(因为手机蓝牙设置中一般是搜索不到BLE设备的),这可能是App外可直接连接BLE设备的一种支持,例Jabra耳机