2017-09-25 88 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