可以在后台运行并可以连接到设备的IOS应用程序
我有一个用例,其中有两个设备。一款是运行IOS应用程序的苹果手机,另一款是支持BLE的物联网设备可以在后台运行并可以连接到设备的IOS应用程序,ios,mobile,ibeacon,Ios,Mobile,Ibeacon,我有一个用例,其中有两个设备。一款是运行IOS应用程序的苹果手机,另一款是支持BLE的物联网设备 IOS应用程序不断扫描附近的BLE设备,如果它发现一个具有特定UUID服务的BLE设备,它将连接到该设备并通过GATT特性发送数据 即使在后台,此IOS应用程序也应连续运行。也就是说,当它在后台时,它应该扫描具有特定服务的BLE设备,如果找到它,它应该在后台连接到它并写入GATT特征 这里的问题是IOS在应用程序处于后台时终止应用程序 唯一的办法是让物联网设备广播IBeacon而不是普通的BLE信标
如何解决这个问题?虽然iBeacon在后台检测速度非常快,效果最好,但它不是绝对必要的。您可以在后台检测iOS上的可扩展服务,并在发现时连接到该服务 为此,您必须:
didiscoverperipal
的回调
虽然这确实有效,但由于iOS跟踪重复项的方式,很难正确测试。如果一个设备已经被检测到,并且你杀死了你的应用程序,你将不会得到关于它的发现的回调——iOS会跟踪它已经被检测到。它只会给你一个新设备的启动和回调
下面是我将如何测试它:
最后,您可以使用一个BLE设备来加速这一过程,该设备还宣传iBeacon,因为背景检测要快得多,而且不那么喜怒无常。但正如您所注意到的,您不能使用iBeacon通过CoreBooth连接到外围设备。因此,您必须从您的BLE设备上发布这两种产品的广告。这是我一直使用的常用方法。使用iBeacon加速应用程序的唤醒,并检测核心蓝牙服务广告以建立连接。在检测到可恢复服务后在后台重新启动应用程序。应用程序是否可以连接到检测到其服务的设备并使用其执行GATT操作?是的,这是蓝牙中央后台模式的要点。如果用户已强制终止应用程序,那么如果BLE设备靠近手机,应用程序是否可以在后台启动?我不是肯定的,但我怀疑答案是否定的。您可以,但是,在此类事件发生后,使用iBeacon监控重新启动您的应用程序。
<key>UIBackgroundModes</key>
<array>
<string>bluetooth-central</string>
</array>
centralManager?.scanForPeripherals(withServices: [myServiceUUID], options: nil)