在 iOS 后台实现 BLE 扫描
Posted
技术标签:
【中文标题】在 iOS 后台实现 BLE 扫描【英文标题】:Implement BLE scan in the background in iOS 【发布时间】:2015-05-23 14:45:37 【问题描述】:我有一个关于在 ios 应用中扫描 BLE 设备的问题。
我们的应用程序的用例是每隔 15 分钟将分配给每个用户的一组 BLE 设备的位置连续共享到特定服务器,而不管应用程序的状态如何(可能是终止状态除外)。
关于我们的 BLE 设备,它每 4 秒间隔传输一次广告数据。
我们尝试使用“使用蓝牙 LE 附件”后台模式,并且我们能够使用 CBCentralManager 中的 scanForPeripharal 方法和 BLE 设备的 UUID 连续扫描 BLE 设备。
即使在后台,我们也能够获取扫描设备的列表。 但是当我们锁定设备并且屏幕变为非活动/关闭时,我们无法获取扫描设备的列表。
在另一个解决方案中,我们尝试使用后台获取,但它非常不一致(实际上它在给定的时间间隔内永远不会被调用)。
我们需要一个解决方案,使用它我们应该能够执行以下操作, 对于每 15 分钟的时间间隔。 扫描我们附近的 BLE 外围设备。 获取用户的当前位置。 与 MQTT 服务器共享。
【问题讨论】:
【参考方案1】:几个选项:
如果您有自定义 BLE 设备,您可以对其进行修改以定期发送 iBeacon 广告流,例如每 15 分钟突发 10 个数据包。使用 CoreLocation
查找 iBeacon 的应用会每 15 分钟在后台唤醒一次,然后您可以使用 CoreBluetooth
阅读其他广告。
您可以使您的应用程序请求位置后台模式,并请求精细的位置更新。这可能允许您在接收到位置更新事件的回调后获得 BLE 设备发现。缺点是您需要让 AppStore 审核者相信您的应用是消费者导航应用,才能在 AppStore 中获得它。
【讨论】:
嗨,David,我相信 CoreLocation 使用名为 ProximityUUID 的属性监控提到的信标区域,它如何获取这些 BLE 设备的 ProximityUUID。以上是关于在 iOS 后台实现 BLE 扫描的主要内容,如果未能解决你的问题,请参考以下文章