ios - 在不打开 App(或在后台)的情况下通过 iOS 通过 BLE 同步数据

标签 ios bluetooth-lowenergy ibeacon core-bluetooth

我正在研究一种可以在门关闭时进行计数的设备。我想做的是,当我走进门时,我的 iPhone 会自动同步设备上的数据并将该计数发送到服务器(通过 iPhone),而无需我打开应用程序或将其置于后台。这可能吗?如果可能的话如何?

这是我的想法的图表:

Door closes -> BLE notifies iPhone -> BLE sends count to iPhone -> iPhone sends that value to server

所有这些都无需用户(我)触摸我的设备或打开已安装的 iOS 应用程序。

最佳答案

您的应用程序必须在后台运行才能执行某些操作,但这没关系,因为 Core Bluetooth 后台模式会为您处理。

首先,您需要在您的项目中选择“使用蓝牙配件”背景模式。

现在,您的程序流程将是这样的:

  1. 您的用户运行您的应用,该应用会扫描可用的门并将其显示给用户
  2. 您的用户选择他们想要连接的门
  3. 您将所选外设的标识符保存在某个地方,例如 NSUserDefaults
  4. 你连接到外设
  5. 一旦调用了 didConnectPeripheral 委托(delegate)方法,您就可以读取计数并在获得值后更新服务器
  6. 用户现在可以暂停您的应用并执行其他操作
  7. 最终外围设备将超出范围,您将收到对 didDisconnectPeripheral 的调用。在这种方法中,您立即重新发出与外围设备的连接。
  8. 因为你有 Core Bluetooth 后台模式,当外围设备最终再次出现时,你将在后台再次调用 didConnectPeripheral,你可以按照第 5 步继续(在这种情况下你的应用已经在后台,所以它会在您读取数据后回到暂停状态,而无需用户执行任何操作)。

您在第 5 步中更新服务器。无论应用程序是在前台还是后台,都会执行此步骤。用户不需要打开您的应用程序。

现在,iOS 最终可能会将您的应用程序从挂起状态中移除,例如由于内存压力。为了在看到外围设备时仍然能够连接到外围设备,您需要选择进入状态恢复,如 Core Bluetooth Programming Guide 中所述。

关于ios - 在不打开 App(或在后台)的情况下通过 iOS 通过 BLE 同步数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39043320/

相关文章:

ipod-touch - iPod Touch 第 4 代是否支持蓝牙 LE?

ios - 在后台模式下保持 XMPP 连接作为 BLE 附件(iOS、Swift)

ios - 当设备已经在 Beacon 范围内时无法检测到 Beacon 然后我们打开蓝牙 & 应用程序被杀死

ios - 图像选择器在模拟器上崩溃

iphone - 如何声明 NSDecimal 以及如何使用 NSDecimalAdd

iphone - 显示 Plist 到 UITableview

iOS 解析土耳其字符的 OrderByAscending 结果错误

ios - IOS 后台任务的 React-native native 模块可能性

bluetooth-lowenergy - 对 BLE Beacon 进行编程以与服务器连接

ios - 我可以在 ios 中获取 eddystone-UID 信标信号的 mac 地址吗