繁体   English   中英

在没有应用打开的情况下通过iOS通过BLE同步数据(或在后台)

[英]Syncing data over BLE via iOS without App Open (or in the background)

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

这是我在想什么的图表:

门关上-> BLE通知iPhone-> BLE将计数发送给iPhone-> iPhone将该值发送给服务器

全部都没有用户(我)触摸我的设备或打开已安装的iOS应用程序。

您的应用必须在后台运行才能执行某些操作,但这没关系,因为Core Bluetooth后台模式将为您解决这一问题。

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

现在,您的程序流程将如下所示:

  1. 您的用户运行您的应用程序,该应用程序扫描可用的门并将其显示给用户
  2. 您的用户选择了要连接的门
  3. 您将所选外围设备的标识符保存在NSUserDefaults之类的位置
  4. 您连接到外围设备
  5. 调用didConnectPeripheral委托方法后,您可以读取计数并在获取值后更新服务器
  6. 用户现在可以暂停您的应用并执行其他操作
  7. 最终,外围设备将超出范围,您将获得对didDisconnectPeripheral的调用。 使用这种方法,您可以立即重新发出与外围设备的连接。
  8. 由于您具有Core Bluetooth后台模式,因此当最终再次看到外围设备时,您将在后台再次调用didConnectPeripheral ,然后可以按照步骤5进行操作(在这种情况下,您的应用程序已经在后台,因此它将进入后台读取数据后,用户无需执行任何操作即可返回暂停状态)。

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

现在,由于内存压力,最终iOS可能会将您的应用从暂停状态中删除。 为了仍然能够在看到外围设备时连接到外围设备,您需要按照《 核心蓝牙编程指南》中的说明选择进入状态恢复

如果您打算构建自己的电路板和Bluetooth LE固件,那么这很简单:

  1. 添加一个接触开关,每当门打开时,该开关就会向电路板发送电压电平变化。
  2. 电平变化时,在微控制器上增加一个计数器。
  3. 编写发布iBeacon数据包的固件,其计数器作为iBeacon标识符的最低有效部分(主要和次要32位)。

然后,电话可以使用CoreLocation API来监视该信标(用于快速后台唤醒)和监视其范围(以读取特定标识符),然后根据所读取的标识符将计数器值发送到服务器,从而获取此计数器。

@ paulw11在他的很好的回答中建议使用CoreLocation而不是CoreBluetooth的优点是可以更快地唤醒应用程序,从而使应用程序可以在后台可靠地读取计数器。 使用CoreBluetooth,此背景唤醒的速度可能要慢得多,并且更可能错过开门事件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM