2017-04-11 142 views
0

我有一個連接到藍牙外設的iOS應用程序(將其視爲連接的按鈕)。外設處於固定位置,因此不一定在iOS設備的範圍內。我的應用程序旨在作爲後臺任務運行,並且外設會定期通知我的應用程序按鈕按下。在後臺保持iOS BLE應用程序的最佳實踐方法

我發現iOS有時會因爲(我相信)內存壓力而殺死我的應用程序。我認爲BLE狀態保存和恢復將幫助我:

https://developer.apple.com/library/content/documentation/NetworkingInternetWeb/Conceptual/CoreBluetooth_concepts/CoreBluetoothBackgroundProcessingForIOSApps/PerformingTasksWhileYourAppIsInTheBackground.html

...通過重新啓動被殺死的應用每當藍牙連接到外圍恢復,並壓在外圍的按鈕。然而,這個帖子:

BLE background reconnect

...(由Anton評論)似乎表明,狀態恢復是一個有點片狀和BT關閉後不能恢復狀態/日或之後飛行模式等等。

這是BLE狀態還原的情況。我是否浪費時間試圖讓它發揮作用?如果它能夠工作,那麼在任何地方是否有很好的示例實現?

如果我不能使用狀態恢復,有沒有其他的選擇?

  • 保持我的應用程序足跡小,所以它不太可能被iOS殺死?
  • 將某種保持活動通信添加到保持應用程序活動的遠程服務器?
  • 爲我的應用程序添加消息或VOIP等功能(我知道它需要通過應用商店批准纔是合法的)。這將允許應用程序重新啓動並重新建立BLE外設連接,還是喚醒只允許VOIP特定的API調用?
  • 還有什麼?

很明顯,上面的列表不太可取得BLE狀態恢復爲我做的工作。任何意見不勝感激。

+0

你在哪裏看到關於切換飛行模式後不重新連接的意見?我也相當肯定,如果你有一個長時間運行的連接,你會在重新啓動後重新啓動。你真的試圖實施國家恢復和有問題嗎?我發現BLE很難在iOS上很好地使用,但在遇到任何問題之前我不會嘗試解決它。 (當然,如果你的內存使用率很高,你應該繼續努力,但這是完全獨立的。) –

+0

我相信我已經看到了開發人員在很多地方提到的飛機模式問題,包括這裏:[link](https: //forums.developer.apple.com/thread/26798)(這與我在原始文章中的鏈接相同)以及我不清楚這些問題是否仍然存在或與舊版iOS相關。我試圖讓國家恢復工作,但看到一些負面的帖子,這讓我想檢查我沒有浪費我的時間!任何鏈接到一個良好的工作解決方案將是偉大的! –

+0

任何人都可以提出任何技術? –

回答

0

我這裏寫評論了一段時間後,你可能需要閱讀,以及:Does CBCentralManager connect ever time out?

總之,保持你的應用程序佔用空間小的可能使其不太可能,你的應用程序將在早期死亡,但最終還是無論如何都會發生 如果您真的有合法的理由使用它,VOIP可能是一個很好的解決方案。您可能需要閱讀VOIP推送消息。 訂閱重要的位置更改也可能非常有用,但僅適用於移動較多的用戶。例如,如果您的用戶將BLE與「固定式」iPad配合使用,則無法提供幫助。 正如我之前提到的,你可以使它工作得很好(取決於你的用例),但是100%是不可能的。另外,Apple Watch的bug有點不幸。因爲我現在已經配對了手錶,所以基本上我已經放棄了自己使用的Core藍牙。

我一直在接觸一些蘋果藍牙工程師,他們或多或少地證實他們知道這些問題。爲什麼他們不會解決它我不知道,但很顯然,確保第三方外圍設備運行良好並不是他們的優先考慮。當涉及到他們自己的產品(手錶,EarPods等)時,它們沒有相同的限制。