2017-04-11 26 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等)时,它们没有相同的限制。