在 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 扫描的主要内容,如果未能解决你的问题,请参考以下文章

iOS - 在后台扫描 BLE 设备

iOS 应用程序在后台扫描 BLE 设备

iOS BLE后台重连

iOS BLE使用(用户)杀死App进行扫描

iBeacons 在 iOS 中以后台模式扫描?

进入后台时停止BLE扫描?