簡體   English   中英

CoreBluetooth - 背景模式下的iPhone廣告

[英]CoreBluetooth - iPhone advertising in background mode

我正在開發iPhone和Mac OS X應用程序,它允許您通過鄰近區鎖定和解鎖Mac。 意味着如果信號強度低於確定的閾值或連接丟失,則應鎖定mac。

我正在為BTLE使用Apples CoreBluetooth框架,使用iPhone作為外設,Mac作為中心。 到現在為止還挺好。 它也很好用但是當我將應用程序發送到iPhone的背景時,廣告似乎發生了變化。 iPhone仍在廣告,但沒有服務配置文件和特性,我在應用程序中使用。 雖然當iPhone仍然在Mac的范圍內時這不是問題,因為它仍然連接並且中央沒有使用這些特性,所以在將iPhone移出范圍后會出現問題。 正如預期的那樣,Mac鎖定並開始發現重新連接iPhone並解鎖如果成功。

但在此發現中,我使用指定的服務配置文件和特性來僅運行運行我的應用程序的設備並識別用於解鎖的設備。

我通過發現沒有服務配置文件並通過其UUID識別正確的設備嘗試了一種解決方法,當我開始使用此iPhone進行鎖定和解鎖時,我保存了該UUID。 這種解決方法也適用於小范圍,因為當我關閉iPhone上的藍牙並再次打開它時,它會獲得另一個UUID。 這是我可以忍受的約束,但它也會在幾個小時后更改UUID然后解鎖不起作用。

也許有人已經在這樣的應用程序上工作並知道如何解決這樣的問題? 或者你知道我可以用來識別設備的靜態值嗎?

所以看起來像往常一樣,Apple在他們的框架中有一些奇怪而獨特的東西。 當您從iOS設備(例如您的iPhone)做廣告時,廣告有兩個“存儲區域” - 正常掃描的任何設備都可以看到,以及“溢出”只能通過專門掃描它的iOS設備。 當您的應用程序在后台進行廣告時,您發布的所有服務UUID很遺憾地進入此溢出區域,因此看起來只有其他iOS設備可以看到它 - 而不是您的Mac。 CBPeripheralManager文檔

CBAdvertisementDataServiceUUIDsKey鍵的值中包含的任何服務通用唯一標識符(UUID)不適合分配的空間,將添加到特殊的“溢出”區域; 它們只能由顯式掃描它們的iOS設備發現。 當您的應用程序在后台時,不會公布本地名稱,並且所有服務UUID都會放在溢出區域中。

暫無
暫無

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

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