1.问题描述
有时我们会收到客户的反馈,他们在使用自己开发的应用时遇到了一些困扰。具体表现为:当应用被切换到后台运行后,尽管蓝牙设备依然与应用保持连接,但设备的dp等相关信息不能正常同步。
这个问题的核心在于蓝牙通信过程中一个非常重要的权限 —— "Uses Bluetooth LE accessories" 权限的使用是否正确配置。
2. 权限介绍
默认情况下,大多数常用的蓝牙任务(不论是中心还是周边的)在app后台或悬挂时都是不可用的。你可以声明你的app支持蓝牙后台执行模式,这允许你的app在需要处理连接的那个蓝牙设备的关联事件时,系统可以把你的app从悬挂状态唤醒。即使你的app不需要全范围的后台处理支持,但是当重要的事件发生时,系统还是会通知你的app。 即使你的app实现了一种甚至两种后台执行模式的支持,它也并不是一直运行的。在某些时候,系统需要杀掉你的app来为前台app提供足够的内存资源(例如你在玩某大型手游时,内存一般会相对吃紧,这时后台应用自然就不太好过)--这会导致所有的行动和挂载的连接丢失(这里的挂载原文是pending connections,我理解是你的app和周边设备的连接,因为你注册了后台模式,所以系统为你保留了资源维持这种连接,可以使用BLE的通信,但是当内存被释放时,你的对象也就不见了)。在iOS7,Core Bluetooth框架支持保存中心管理者和周边管理者(就是你的CBCenteralManager && CBPeripheralManager 对象)的状态信息,并且支持在app 启动的时候去恢复中心管理者的状态。你可以使用这个功能去做一些蓝牙设备相关的长期行为。(翻译自Apple Doc.)
3.权限配置
3.1 sdk 开发者
第一步:在项目工程中,开启 Use Bluetooth LE accessories 。
第二步 :在 Info.plist 配置必要的声明
3.2 OEM app 客户
目前 OME app 默认关闭该权限。如需打开该权限,需要找涂鸦客户经理或者 FAE 打开该权限功能。