2017-09-25 56 views
0

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

我目前正在研究应该扫描Eddystone信标的应用程序。 该应用程序的基本思想是: - 用户打开应用程序; - 用户在特定时间(将来)注册会议; - 会议开始前5分钟开始BT扫描; - 找到信标时执行网络请求并向用户显示通知。

如果应用程序在前台没有问题。请致电

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

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

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

一个想法是创建一些“沉默本地通知”,但随后通过苹果文档阅读后好像

func userNotificationCenter(_ center: UNUserNotificationCenter, 
          willPresent notification: UNNotification, 
          withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) { 
} 

被称为只有当应用程序在前台?

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

回答

1

如果应用程序未在前台运行,则无法安排在特定时间启动蓝牙扫描。而且在特定的时间没有可靠的方式来通知您(远程或本地)的应用程序。无声的远程通知是可能的,但可能需要很多分钟才能发送。

你可以做的是设置扫描Eddystone服务的UUID,以便当你的应用程序在后台并首次看到一个信标时由CoreBluetooth获得一个发现回调。主要的问题是,这也不是非常快。检测可能会在几秒钟内出现,在信标位于附近后一两分钟内有可能出现。

+0

好的谢谢澄清。我担心,当应用程序处于后台时,无法在特定时间安排它。 – Karlis

+0

但是如何静默推送通知? https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/CreatingtheNotificationPayload.html#//apple_ref/doc/uid/TP40008194-CH10-SW1 有一些示例说明如何配置静默推送通知。试想这样的情况是否会被应用商店批准: 1.发送无声推送通知 2.启动后台任务以开始监视信标 – Karlis