iBeacon在连接蓝牙

时间:2017-08-08 13:34:58

标签: ios objective-c bluetooth bluetooth-lowenergy ibeacon

我已经问了几次这个问题(herehere)没有可用的回复,所以我现在会用不同的方式问这个...

我需要什么

我需要能够终止我的应用程序,从我自己编程的蓝牙外围设备发送和接收一些数据。这是出于安全原因的重要数据,因此我绝对需要应用程序才能唤醒。但是,设备并非总是处于断电状态,因此我需要在外围设备打开/关闭时处理此用例。要做到这一点,我需要使用iBeacon唤醒应用程序,向框发送命令,获得响应,然后进入持续交换模式。如果外围设备关闭,我不在乎,只是在我需要连续数据交换重启的过程中重新启动时。

问题

我已经尝试了所有建议的背景“app wakable”info.plist项目... Voip,背景音频,iBeacon和蓝牙didConnectPeripheral / didDisconnect委托方法,没有什么真的非常可靠。几天后,当我插入/拔出我的设备时,iBeacon didEnterRegiondidExitRegion方法被触发,所以至少有些可靠。

如果我使用iBeacon唤醒应用程序并连接到蓝牙(因为我无法与盒子交换信息,直到我在iOS系统级别连接/配对),真正的问题就开始了。由于该应用程序尚未与之配对,因此后台中的所有命令都无法进入该框。当此过程在后台启动时,不会出现任何消​​息,询问您是否要与此设备配对(当应用程序运行且您可以配对时,一切正常)。

此外,即使我确实有机会配对,那么我现在将永久连接/配对(我不希望用户每次插入设备时都必须按“配对”并且应用程序是关闭)。除非用户进入蓝牙设置并“忘记设备”,否则我无法断开它们。因此,一旦关闭应用程序,我就失去了使用iBeacon唤醒应用程序的能力,因为现在只要应用程序通过蓝牙连接,iBeacon就永远不会启动。

我的问题

其他应用程序如何轻松地执行此操作以及从后台永久唤醒应用程序/终止的正确流程是什么?我在努力弄清楚这里的流程。

我真的希望只在不需要连接或配对的用例中使用iBeacon吗?我是否应该以某种方式将用户与外围设备断开连接?

求和

总而言之,如果您需要连接/配对外围设备,使用iBeacon唤醒应用程序是行不通的,因为这些方法永远不会再次触发,直到不再配对/连接。如果我找到一种神奇的方法来断开一个人,当应用程序死亡并恢复到iBeacon时,它将无法工作,因为我似乎无法从背景配对,因此命令不会进入外围设备。最后,如果我使用纯粹连接的蓝牙方法,当我插入/拔出设备时,didConnectdidDisconnect方法永远不会触发。

1 个答案:

答案 0 :(得分:1)

一些想法:

  1. 是的,BLE外围设备通常在连接时停止广告。在这种状态下,如果BLE外设不再宣传信标,则无法获得iBeacon应用程序唤醒。

    • 虽然这种行为很典型,但并不是绝对的规则。虽然可能存在使用的芯片组的限制,但可以构建在连接时保持广告的外围设备。

    • 防止持久连接的常用方法是构建外围代码,如果在X秒或几分钟内没有与移动电话进行任何通信,则会自动断开连接。这将允许再次开始信标。

  2. 蓝牙配对和BLE连接的工作方式不同。您可以在后台建立BLE连接,无需用户交互。 BLE连接(不配对)是通常如何使其自动化。可以在后台静默建立与GATT服务的连接,并在plist中使用以下后台模式交换数据(不需要特殊的App Store理由):

    <key>UIBackgroundModes</key>
    <array>
        <string>bluetooth-central</string>
    </array>
    
  3. 如果您确实想与用户互动配对,则需要执行以下步骤:

    • 当在后台检测到信标时,向用户发送本地通知,告知用户启动要配对的应用。 (调整语言以匹配您的用例。)
    • 当用户点击通知时,应用程序将进入前台。检测到这一点并开始配对过程。