【问题标题】:Wake up iOS application by iBeacon when still connected to Bluetooth仍然连接到蓝牙时通过 iBeacon 唤醒 iOS 应用程序
【发布时间】:2018-01-16 02:43:42
【问题描述】:

我已经问过这个问题几次(herehere),但没有可用的回答,所以我现在换个方式问这个问题...

我需要什么

我需要能够从我自己编程的蓝牙外围设备中唤醒我的应用程序,发送和接收一些数据。出于安全原因,这是重要的数据,因此我绝对需要唤醒该应用程序。但是,设备在大多数情况下并不总是处于关闭状态,因此我需要在打开/关闭外围设备时处理这个用例。为此,我需要使用 iBeacon 唤醒应用程序,向盒子发送命令,获得响应,然后进入持续交换模式。外围设备是不是关了我才不管,等它再开的时候才需要重新开始连续数据交换的过程。

问题

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

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

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

我的问题

其他应用如何如此轻松地做到这一点?从后台/终止永久唤醒您的应用的正确流程是什么?我正在努力弄清楚这里的流程。

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

求和

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

【问题讨论】:

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


    【解决方案1】:

    一些想法:

    1. 是的,BLE 外围设备通常会在连接时停止广告。在这种状态下,如果 BLE 外围设备不再广播信标,您将无法唤醒 iBeacon 应用。

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

      • 防止永久连接的常用方法是构建外围代码,如果在 X 秒或几分钟内没有与手机进行任何通信,该外围代码将自动断开连接。这将允许信标重新开始。

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

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

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

    【讨论】:

    • 感谢@davidgyoung,但不幸的是,我不能让配对/连接完全落入用户交互的手中。这需要非常被动并且不妨碍用户。我绝对宁愿不配对而只连接(因为我已经可以做到这一点)但我正在使用的 BLE GATT 设备(Bluefruit feather nrf52)我认为需要配对才能通过特征发送数据。它是否正确?如果没有,那么我需要一些帮助来弄清楚如何将草图文件更改为不需要配对。
    • 这是一个特定于产品的问题,很遗憾我无法回答。但我同意,让这台设备或另一台设备在不配对的情况下工作对您的用例至关重要。
    • 只有当特征指示需要加密时才需要配对(实际上是绑定,但在对话框中称为配对)。如果您从您的特征中删除加密要求,那么 iOS 应用程序可以直接连接到外围设备,而无需用户干预。如果您实现与外围设备的挂起连接并实现核心蓝牙状态恢复,则没有理由为此使用 iBeacon。如果您“绝对需要应用程序唤醒”,那么您可能不走运。根据我的经验,后台蓝牙没有 100% 的保证
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-22
    • 2017-04-01
    • 2012-03-14
    • 2021-12-29
    • 1970-01-01
    相关资源
    最近更新 更多