iOS-Bluetooth-MFI&BLE

过去的半年里,我一直都在做蓝牙耳机与手机的交互,现在把一些有价值的东西分享给大家。

硬件知识储备:

Bluetooth:是一种无线技术标准,可实现固定设备、移动设备和楼宇个人域网之间的短距离数据交换。注:蓝牙4.0非蓝牙2.1的升级,使用了新的协议

MFI通俗的讲就是采用External Accessory Native的传统蓝牙交互的代名词,因为这种交互需要苹果MFI认证。

BLEBluetooth Low Energy):蓝牙省电模式,支持小规模的数据传输,是广大做iOS应用与蓝牙交互,不想通过MFI认证的开发者们的福音


MFI,蓝牙2.1的交互:

  • 使用ExternalAccessory.framework具体可参考https://developer.apple.com/reference/ExternalAccessory的官方文档及EADemo
  • 声明App支持的协议,通常推荐使用反DNS形式的命名协议,例:com.xx.protocol
  • 通信步骤:创建EASession,使用NSInputStreamNSOutputStream收发数据包,数据格式通常由与交互设备通信协议决定。
  • 与设备交互步骤:获取连接的外设,实现NSStreamDelegate的协议,主要包含数据的拆包、封装和分发(数据包,数据解析model的建立)
  • 大数据的传输需要拆分多个数据包收发,此时还要小心外设的断开造成的数据的丢失或者错乱,需要做相应Exception的处理
  • 注册EAAccessoryDidConnectNotificationEAAccessoryDidDisconnectNotification通知,对设备的断连及时做处理,注意与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 CoreBluetoothApp 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耳机

我看网上有很多关于MFIBLE4.0的使用教程,所以此次文章并没有将这些具体的使用描述出来,而是列出了我做蓝牙耳机与手机交互的一些注意的事项,意在总结归纳,望大家指正交流。

你可能感兴趣的:(iOS,ios,蓝牙,移动设备,MFI,BLE)