Eddystone信标背景跟踪ios

时间:2017-09-25 05:51:05

标签: ios swift beacon eddystone

我想知道在iOS上使用Eddystone信标跟踪实际上是否可以实现这样的功能。

我目前正致力于应用扫描Eddystone信标的app。 该应用程序的基本思想是: - 用户打开应用程序; - 用户在特定时间(将来)注册会议; - 在会议开始前5分钟开始BT扫描; - 当发现信标发出网络请求并向用户显示通知时。

如果应用程序位于前台,则没有问题。只需致电

func startScan() {
    if centralManager.state == .poweredOn {
        let services = [CBUUID(string: "FEAA")]
        let options = [CBCentralManagerScanOptionAllowDuplicatesKey: true]
        centralManager.scanForPeripherals(withServices: services, options: options)
    }
}

它将开始扫描。 然后,当找到信标并从服务器获取正确的数据时,我将停止扫描。

所以问题是,即使应用程序处于后台,也能以某种方式安排扫描的开始? 当然如果它被杀了那么我们就无法做任何事情。

一个想法是创建一些“无声的本地通知”,但在阅读Apple文档后,似乎

func userNotificationCenter(_ center: UNUserNotificationCenter,
                            willPresent notification: UNNotification,
                            withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
}
仅当app在前台时才会调用

任何帮助或建议都将不胜感激。

1 个答案:

答案 0 :(得分:1)

如果应用未在前台运行,则无法安排蓝牙扫描在特定时间启动。并且没有可靠的方法在特定时间通过通知(远程或本地)启动您的应用程序。可以进行静音远程通知,但它们可能需要很长时间才能完成。

您可以做的是设置扫描Eddystone服务UUID,以便当您的应用程序在后台并且第一次看到信标时,CoreBluetooth会获得单个发现回调。主要的问题是,这也不是超级快。检测可能在几秒钟之内,在信标附近的一两分钟内更有可能发生。