簡體   English   中英

CoreBluetooth廣告在iOS 10的后台

[英]CoreBluetooth advertising in background on iOS 10

第一:我有一台iPad Air 2和一台iPhone 7.為了進一步閱讀,我們估計該應用程序處於活動狀態並在iPad上以及在iPhone上以后台模式打開。 該應用程序完全相同,即使使用相同的藍牙服務UUID和相同的DataLocalNameKey。

我想寫一個可以在后台宣傳藍牙服務的應用程序,並且能夠發現這項服務(在后台也是最佳的)。 正如我已經讀過的那樣,我不能使用蘋果信標技術,因為它只能在背景中接近掃描/通知信標(我測試過,工作正常)但不能做廣告。 所以我開始使用CoreBluetooth,如上面提到的SO答案所述,因為它可以在后台做廣告。

我的應用程序在iPhone上的didDiscoverPeripheral中調用了didDiscoverPeripheral方法(后台應用程序),因此它檢測到了iPad。 iPhone上CBPeripheralManager的isAdvertising屬性是true 但是在iPad上沒有調用發現didDiscoverPeripheral 我有點困惑。 一個選擇是我的iPad由於某些原因不再能夠檢測到iPhone,或者我的iPhone正在撒謊而且它不是廣告。

所以我認為我只是有點愚蠢和google搜索“CoreBluetooth調試應用程序”。 我找到了VicinityAltBeacon 對於這兩個應用程序,行為是相同的! 如果您是廣告應用程序的后台(按主頁/睡眠按鈕),瀏覽應用程序將無法再發現它。 如果您打開應用程序的后台,它將立即發現它。 兩個應用程序都提到它可以與它們在后台播放。

難道我做錯了什么; 這種行為有望嗎? 我誤解了這個框架嗎? 你能證實這種行為嗎?

要確認這一點,最快的方法是在兩台設備上安裝Vicinity (您必須將NSBluetoothPeripheralUsageDescription鍵添加到Info.plist)將一台設備設置為廣播,然后按主頁按鈕。

這不是iOS 10特有的 - 它總是以這種方式在iOS上運行。 在iOS上,應用程序無法在后台發送標准藍牙LE廣告 他們必須在前台才能做到這一點。

也就是說,iOS在后台廣告GATT服務的應用程序支持有限。 這使用專有技術,僅適用於尋找這些服務的其他iOS設備。 (因為它使用非標准的專有方案,例如,相同的技術不適用於信標廣告。)

以下是Apple如何描述它:

...你應該知道,當你的應用程序在后台時,廣告的運行方式與應用程序在前台時的運行方式不同。 特別是,當您的應用在后台廣告時:

  • 忽略CBAdvertisementDataLocalNameKey廣告密鑰,並且不公布外圍設備的本地名稱。
  • 包含在CBAdvertisementDataServiceUUIDsKey廣告密鑰值中的所有服務UUID都放在一個特殊的“溢出”區域中; 它們只能由顯式掃描它們的iOS設備發現。
  • 如果所有廣告應用都在后台,則外圍設備發送廣告數據包的頻率可能會降低。

點擊此處了解更多信息: https//developer.apple.com/library/content/documentation/NetworkingInternetWeb/Conceptual/CoreBluetooth_concepts/CoreBluetoothBackgroundProcessingForIOSApps/PerformingTasksWhileYourAppIsInTheBackground.html

這是ios 10.0中的一個錯誤。(1)並在ios 10.1中部分修復

src: https//forums.developer.apple.com/thread/51309

暫無
暫無

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

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