簡體   English   中英

低功耗藍牙(IOS)-背景廣告和自定義廣告數據

[英]Bluetooth Low Energy(IOS) - Background advertisement and custom advertisement data

我目前正在使用IOS BLE應用之一,在從Peripheral投放廣告時發現了一些問題,

1)當應用程序進入后台時,它似乎確實是由我的Central應用程序發現的(我什至嘗試了在前景良好的LightBlue應用程序中嘗試過),從蘋果文檔中我發現,

CBAdvertisementDataServiceUUIDsKey廣告密鑰的值中包含的所有服務UUID都放置在特殊的“溢出”區域中。 只有通過顯式掃描它們的iOS設備才能發現它們。

這是否意味着Central必須僅掃描特定的服務UUID? 我試圖通過nil來嘗試發現附近所有外圍設備。

2)是否有任何方法可以傳遞自定義廣告數據,而無需連接外圍設備即可由中央讀取? 還是可以通過自定義UUID而不是默認UUID? 我嘗試了不同的方法,但無法找到有助於傳遞自定義數據的方法,我想從外圍設備傳遞一些用戶特定的詳細信息。

我聽說Mingleton也是基於BLE的,似乎他們的應用在后台運行良好,知道他們使用了什么技術嗎?

關鍵是iOS的低功耗藍牙協議棧在充當外圍設備時允許后台廣告。 但是,當在后台進行廣告宣傳時,只能發現您以前知道的UUID(在Apple的BLE文檔中已提到過,但我們也對其進行了測試)。 使用以下調用:

NSDictionary * scanOptions = @ {CBCentralManagerScanOptionAllowDuplicatesKey:@(YES)}; [centralManager scanForPeripheralsWithServices:無選項:scanOptions];

將找到周圍所有在前景中廣告的外圍設備,但找不到在背景中廣告的所有外圍設備。 因此,這不是有效的選擇。

解決方案是發現已知的服務UUID。 因此,中心將掃描所有設備已經知道的通用UUID的其他外圍設備。 找到外圍設備后,他們將連接到該外圍設備,並使用服務和特征為該外圍設備獲取特定的UUID。 請務必注意,您需要使用2個不同的UUID。 所有設備的通用UUID始終相同,允許我們找到它們,並使用BLE將它們與其他設備區分開。 所有設備的特定UUID均不同,這使我們能夠識別和區分彼此之間的AltBeacon。 重要的是要知道外圍設備和中央設備之間的連接僅發生一次,此后中央設備可以記住外圍設備,之后只需要感知范圍即可。 無需重新連接(減少電池消耗)。

我們發布了可以做到這一點以及更多的開源框架。 您可以在以下位置檢出: https : //github.com/CharruaLabs/AltBeacon 檢查類AltBeacon.m,了解我們如何實現它。

  1. 是的,您需要提供特定的UUID才能發現。
  2. 看起來不像。 實際上,我已經嘗試過在前台和后台同時嗅探同一應用程序的廣告包,而UUID字節甚至都不相同。 它在后台似乎被散列了。 localName也將被忽略(您會發現這與Apple的Core Bluetooth編程指南中提到的內容一致)。

至於Mingleton,根據此TechCrunch文章

當被問及解釋該技術如何更詳細地工作時,Ekekezie說,用戶將在被分配獨特的信標配置之前先與Facebook注冊。 “當另一個用戶檢測到您的信標配置,然后點擊“查看附近的人”以查看其身份時,他或她ping我們的服務器以根據您的陳述確定您是誰,以及您是否與他或她相關偏好–目前僅包括性別和年齡范圍,”他說。

我假設該應用程序完全基於iBeacon技術,並且知道iBeacon當前無法在后台做廣告,所以我認為該應用程序需要在前台運行才能正常工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM