0

我正在寻找找出哪些委托方法可靠地触发终止时在后台连接/断开连接。每当用户接近我的BLE设备时,我都希望它自动连接,然后启动一个快速方法与设备交换数据。iOS蓝牙中央,可靠的委托方法来检测连接/断开

我似乎无法得到任何委托方法可靠地触发此用例。我开启了bluetooth-central的背景模式,我有适当的代表正在使用,当应用程序处于活动状态或在任务切换器中时,我写的整个BT模块工作得非常好。我只需要用最后一个用例进行最终确定,即终止应用程序。

我原来的计划是使用iBeacon,但这最终成为一个有缺陷的方法来唤醒应用程序终止,因为我需要保持和坚持蓝牙配对。获取iBeacon背景/终止事件(如didEnterRegiondidExitRegion)的唯一方法是在应用程序与用户进行连接/配对阶段后“忘记此设备”(在iOS系统的BT菜单中)。所以这是行不通的,因为除非用户为我这么做,否则应用程序将永远无法从设备取消配对(我甚至在盒子中尝试了一个AT +命令来擦除认证/绑定并断开连接)。

所以......现在唯一剩下的计划就是找到一种方法,在iOS系统重新连接时激活centralManager:(CBCentralManager *)central didConnectPeripheral:(CBPeripheral *)peripheraldidDisconnectPeripheral方法。所以,当设备打开或用户接近足以回到范围内。

+0

老实说,我发现核心蓝牙在终止状态下并不可靠。我回写了一段时间:https://stackoverflow.com/questions/37493684/ios-stops-waking-up-the-app-upon-incoming-ble-connection-from-peripheral/37529843#37529843 以前我曾经用过CB的一些问题已经在iOS11 beta版中修复了,但不幸的是我遇到了一些新的严重问题,而不是在我自己的测试中。我的建议是只使用CB,如果它像应用程序的额外“功能”,而不是它是应用程序/商业理念的核心部分。 – Anton

+0

不幸的是,由于iOS的性质,我没有选择,并且因为他们的政策而被迫使用这个蓝牙外设作为我整个业务的核心核心。我已经多次阅读过你的文章,希望自写这篇文章以来,有些事情已经发生了变化。我写了这篇文章(https://stackoverflow.com/questions/45241033/obj-c-how-to-app-using-ble-connection-and-ibeacon-in-same-device),但没有人回复。它陈述我在同一设备中使用iBeacon/BLE唤醒和响应的问题。 – GoreDefex

+0

我有几个悬而未决的bug提交和功能增强请求,在iOS11中他们已经应用了其中的一些,并且事情看起来正朝着正确的方向发展。但正如我所说的那样还不好。无论如何,如果你正确地实施状态保存和恢复,那么在理论上,你所需要做的就是确保你总是有一个挂起的连接到设备。如果你正在开发你自己的硬件,那么你也可以在这方面做出改进。例如,我们取消外围设备的连接,以避免您在帖子中提到的问题。 – Anton

回答

0

我终于找到了答案!可靠的方法绝对是iBeacon ...我认为我无法使用,因为我使用的是蓝牙配对连接,而iBeacon在您的设备连接时未被发布。这是“不恰当的”,因为你无法检测到已经连接到其他设备的设备的iBeacon输出......直到最近我还没有想到的是,它正在构建一块带有2个蓝牙芯片的电路板!

我所做的就是使用一个BT芯片为专用的iBeacon游侠以更稳定可靠的方式唤醒应用程序,另一个芯片用于专用BT连接/配对/授权/绑定状态。现在,我可以在设备中使用加密的自定义特征,并让设备在终止或睡眠后唤醒我的应用! :)

Here is an article我在那里提出了类似的问题,并回答。