代码之家  ›  专栏  ›  技术社区  ›  GoreDefex

当iBeacon仍连接到蓝牙时唤醒iOS应用程序

  •  0
  • GoreDefex  · 技术社区  · 8 年前

    here here

    我需要什么

    我需要能够唤醒我的应用程序从终止,发送和接收一些数据从蓝牙外围设备我自己编程。出于安全考虑,这是重要的数据,所以我绝对需要该应用程序来唤醒。然而,设备在大多数情况下并不是总是打开的,因此我需要在外围设备打开/关闭时处理这个用例。为此,我需要使用iBeacon唤醒应用程序,向盒子发送命令,获得响应,然后进入连续交换模式。如果外围设备关闭了,我不在乎,当它重新打开时,我需要重新启动连续数据交换过程。

    我已经尝试了所有建议的背景“应用程序可玩”信息。plist项目…Voip、背景音频、iBeacon和蓝牙 didConnectPeripheral / didDisconnect didEnterRegion didExitRegion 方法在我插入/拔出设备时触发,这样至少有某种可靠的东西。

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

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

    总和

    总之,如果你需要连接/配对到外围设备,那么使用iBeacon唤醒应用程序是不可行的,因为在不再配对/连接之前,这些方法永远不会再次启动。如果我想找到一种神奇的方法,在应用程序死机时断开一个人的连接,然后恢复到iBeacon,那是行不通的,因为我似乎无法与后台配对,因此命令无法发送到外围设备。最后,如果我使用纯连接的蓝牙方法 didConnect 断开连接 方法在我插入/拔出设备时从不触发。

    1 回复  |  直到 8 年前
        1
  •  2
  •   davidgyoung    8 年前

    一些想法:

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

    1. 蓝牙配对和BLE连接的工作方式不同。您可以在后台建立BLE连接,而无需用户交互。BLE连接(非配对)是实现自动连接的典型方式。与关贸总协定服务的连接可以在后台悄悄建立,并在plist中与以下后台模式交换数据(无需特殊的应用商店理由):

      <key>UIBackgroundModes</key>
      <array>
          <string>bluetooth-central</string>
      </array>
      
    2. 如果您真的想与用户交互配对,则需要采取以下步骤: