我有一个有2个设备的用例。一种是运行IOS应用程序的Apple移动电话,另一种是启用BLE的IOT设备。
我该如何解决这个问题?
最佳答案
尽管iBeacon在后台进行检测的速度非常快并且效果最佳,但这并不是绝对必要的。您可以在后台在iOS上检测BLE服务,并在发现服务后将其连接。
为此,您必须:
<key>UIBackgroundModes</key>
<array>
<string>bluetooth-central</string>
</array>
didFinishLaunching
中的AppDelegate中,您必须触发BLE扫描启动centralManager?.scanForPeripherals(withServices: [myServiceUUID], options: nil)
如果执行上述操作,则在终止应用程序后,iOS将自动启动您的应用程序,并且当发现新的外设时,您将获得didDiscoverPeripheral
的回调。尽管这确实可行,但由于iOS跟踪重复项的方式,因此很难正确测试。如果已经检测到设备,并且您杀死了您的应用程序,则不会获得有关其发现的回调-iOS会跟踪已检测到该设备。它只会为您启动和回调新设备。
这是我将如何测试的方法:
上面的电话重新启动步骤对于清除缓存中iPhone已经看到的设备至关重要,因此不符合回调的条件。
最后,您还可以使用BLE设备来加速此过程,该设备还可以宣传iBeacon,因为背景检测速度更快且气质更低。但是请注意,您不能使用iBeacon通过CoreBluetooth连接到外围设备。因此,您必须从BLE设备中同时发布二者。这是我一直使用的常用方法。使用iBeacon可以加快应用程序的唤醒速度,并使用CoreBluetooth服务广告检测来建立连接。
关于ios - 可以在后台运行并可以连接到设备的IOS应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63744187/