首页 > 解决方案 > react-native-ble-plx:iOS 后台和挂起模式下的 BLE 扫描

问题描述

上下文 IOS 后台和挂起模式

库版本:react-native-ble-plx 1.0.3 平台:iOS。平台日志(XCode)

预期行为当应用程序即使处于 ios 的后台或挂起模式时,也会调用 startDeviceScan 的回调。

当前行为当应用程序处于 ios 的后台或挂起模式时,startDeviceScan 的回调永远不会被调用。根据apple ble doc,我认为还没有发现发现事件。是否可以配置“startDeviceScan”以使应用程序在后台和挂起模式下扫描?

标签: react-nativebluetooth

解决方案


经过一些研究,我发现一些与 ios 后台和挂起模式下的 ble 扫描有关的有用信息。

1.) 当 iOS 设备在后台时,扫描会被限制。

虽然在前台扫描可能会立即发现旁边有广告的设备,但在后台发现可能需要长达约 60 倍的时间。iOS 系统不假设用户更喜欢一个应用程序比另一个应用程序具有更好的蓝牙功能(或者只有一个应用程序想要使用它)。由于它是共享功能,因此他们希望用户在应用程序中拥有统一的体验。您应该查看有关广告和扫描间隔的技术规范,以更好地了解 Apple 在幕后必须做的事情。</p>

2.) 您的设备可能在进入后台之前就已经发现了彼此。

我们必须记住,当我们进入后台时,Apple 禁用了 CBCentralManagerScanOptionAllowDuplicatesKeyscanning 标志。由于您甚至没有指定此标志,因此无论如何它默认为 NO。因此,如果他们甚至见过一次,当他们在后台时,您将不会收到另一个回调。</p>

3.) 尊重广告数据的限制

虽然广告数据包通常可以包含有关外围设备的各种信息,但您可以只宣传您的设备的本地名称和您想要宣传的任何服务的 UUID。广告数据时可以使用多少空间也有限制。当您的应用程序处于前台时,它可以在初始广告数据中使用最多 28 字节的空间,用于两个受支持的广告数据键的任意组合。如果这个空间用完了,扫描响应中还有额外的 10 字节空间只能用于本地名称。任何不适合分配空间的服务 UUID 都将添加到特殊的“溢出”区域;只有明确扫描它们的 iOS 设备才能发现它们。当您的应用程序在后台时,


推荐阅读