ios - 可以在后台运行并可以连接到设备的IOS应用程序

标签 ios mobile ibeacon

我有一个有2个设备的用例。一种是运行IOS应用程序的Apple移动电话,另一种是启用BLE的IOT设备。

  • IOS应用程序会连续扫描附近的BLE设备,如果找到具有特定UUID服务的BLE设备,它将连接到该设备并通过GATT特性发送数据。
  • 此IOS应用程序即使在后台也应连续运行。那就是当它在后台时,它应该扫描具有特定服务的BLE设备,如果找到了,它应该在后台连接到它并编写GATT特性。
  • 问题在于这是当App处于后台时IOS终止了该应用程序。
  • 唯一的方法是使IOT设备广播IBeacon,而不是普通的BLE Beacon。但是,如果找到IBeacon,IOS应用程序将在后台唤醒,但无法获取正在发送IBeacon且无法连接的设备的BLE地址。

  • 我该如何解决这个问题?

    最佳答案

    尽管iBeacon在后台进行检测的速度非常快并且效果最佳,但这并不是绝对必要的。您可以在后台在iOS上检测BLE服务,并在发现服务后将其连接。
    为此,您必须:

  • 在您的Info.plist中声明:
  •     <key>UIBackgroundModes</key>
        <array>
            <string>bluetooth-central</string>
        </array>
    
  • didFinishLaunching中的AppDelegate中,您必须触发BLE扫描启动
  • centralManager?.scanForPeripherals(withServices: [myServiceUUID], options: nil)
    
    如果执行上述操作,则在终止应用程序后,iOS将自动启动您的应用程序,并且当发现新的外设时,您将获得didDiscoverPeripheral的回调。
    尽管这确实可行,但由于iOS跟踪重复项的方式,因此很难正确测试。如果已经检测到设备,并且您杀死了您的应用程序,则不会获得有关其发现的回调-iOS会跟踪已检测到该设备。它只会为您启动和回调新设备。
    这是我将如何测试的方法:
  • 修改您的应用程序以在检测到BLE设备时发送本地通知。验证此工作。
  • 关闭您的BLE设备
  • 启动您的应用程序
  • 重新启动手机。
  • 打开您的BLE设备
  • 等待上面的通知。耐心一点!当您重启手机时,BLE堆栈可能在几分钟内无法完全启动。

  • 上面的电话重新启动步骤对于清除缓存中iPhone已经看到的设备至关重要,因此不符合回调的条件。
    最后,您还可以使用BLE设备来加速此过程,该设备还可以宣传iBeacon,因为背景检测速度更快且气质更低。但是请注意,您不能使用iBeacon通过CoreBluetooth连接到外围设备。因此,您必须从BLE设备中同时发布二者。这是我一直使用的常用方法。使用iBeacon可以加快应用程序的唤醒速度,并使用CoreBluetooth服务广告检测来建立连接。

    关于ios - 可以在后台运行并可以连接到设备的IOS应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63744187/

    相关文章:

    jquery - 将鼠标映射到触摸事件以在桌面浏览器中测试移动网站

    ios - 子类和 Storyboard - nil IBOutlets

    ios - 复选框在 Swift 中选中的 Action ?

    ios - 从 ios 中的字典数组中的键获取数据

    ios - 在 iOS 上的 flex 中更改 StageVideo 的音量

    javascript - 如何区分滚动事件和长按事件?

    ios - 在未运行且 iBeacon 在范围内时调用应用程序

    ios - 检测到信标时打开新 View

    ios - CGAffineTransform 旋转 UIButton

    ios - BLE Advertisement switch interval & advertising interval