1

我有一個信標設備,根據自定義輪播方案廣播不同的UUID值。是否可以在iBeacon應用程序上動態設置UUID?

通常,開發者已經設置靜態UUID由像(例如iOS設備)的應用來識別:

CLBeaconRegion *region = [[CLBeaconRegion alloc] initWithProximityUUID:uuid major:major minor:minor identifier:identifier]; 

我想知道如果有一種方法來動態生成(或從一個接收服務器)要識別的UUID。

話雖如此,我仍然難以理解iOS和Android如何理解信標的內部機制。根據我的理解,手機的BLE模塊將所有格式良好的iBeacons轉發到維護已識別的UUID列表的操作系統。在簡單的查找之後,如果找到匹配,操作系統會將相應的應用程序放到前臺。

但是,應用程序的識別UUID何時註冊到操作系統?他們多久重新註冊一次?如果有人向我提供任何相關的在線資料或至少提及此過程中涉及的機制,我將不勝感激。

回答

0

Android和iOS 兩者用於信標ProximityUUIDs註冊到檢測達無非對符合信標和ProximityUUID的字節模式的藍牙分組應用濾波器更。最重要的區別是,在iOS上執行過濾的操作系統框架CoreLocation,對您可以擁有的過濾器施加嚴格的限制。 iOS限制包括:

  • 對於單個應用程序,您可以在任何給定時間只監視20個UUID。
  • 受監控的前30個UUID的設備範圍限制獲得硬件輔助快速檢測。稍後註冊的UUID會變慢(後臺幾分鐘的延遲)檢測。
  • 無法監控或範圍的任何UUID(全局通配符)

你可以,但是,改變20點的UUID您的應用程序在任何時候監控 - 甚至幾秒鐘一次。訣竅是您的應用程序必須位於前臺才能執行此操作,或者有允許的方式在後臺運行以執行此UUID輪換。

要註冊一個UUID在iOS監控,只需聲明與UUID的區域(通常不指定主要和次要值)然後調用

[locationManager startMonitoringForRegion:region]; 

要保持不過去的20區域限制,你也必須致電:

[locationManager stopMonitoringForRegion:oldRegion]; 

在你的舊地區,你不想監測了。否則,如果您超過20個限制,您將無法檢測到新註冊的區域。

當然,您可以使用Web服務爲您的新區域提供UUID進行監控。

在Android上,它更簡單 - 您可以通過使用Android Beacon庫和類似的SDK指定全局通配符來監視所有UUID。

完全披露:我是Android Beacon Library的首席開發人員,該平臺上的首個Beacon實施。

+0

我讀過你關於每個應用程序的20個UUIDS限制的評論,也在這裏:https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/LocationAwarenessPG/RegionMonitoring/RegionMonitoring.html但我必須說我只是實現了一個應用程序,可以覆蓋40多個不同的區域(每個區域都有不同的UUID),它不會給我帶來任何問題。我使用macbeacon而不是真正的信標,所以我只能測試每秒一個UUID(沒有併發UUID)。此外,我使用的設備是iPhone 6s plus,該應用程序正在前臺運行。有什麼改變? –

+0

「等於無非是在藍牙數據包上應用過濾器」Android中的這個過濾過程是Android Beacon庫的一部分嗎?如果是這樣,考慮到一個地區允許的UUID數量龐大(+主要,次要)以及潛在的大量捕獲信標,這種匹配如何有效?我假設它必須是逐行逐字節方案。 –

+0

是的,更精確地說,iOS上的20個區域限制僅適用於監視API,而不是範圍API。但是由於測距通常僅限於前景,因此重要的是要注意背景檢測的限制。 – davidgyoung

相關問題