通过iOS在没有App Open(或在后台)的情况下通过BLE同步数据

时间:2016-08-19 15:57:29

标签: ios bluetooth-lowenergy ibeacon core-bluetooth

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

这是我正在思考的图表:

  

门关闭 - > BLE通知iPhone - > BLE向iPhone发送计数 - >   iPhone将该值发送到服务器

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

2 个答案:

答案 0 :(得分:5)

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

首先,您需要选择"使用蓝牙配件"项目中的后台模式。

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

  1. 您的用户运行您的应用程序,该应用程序会扫描可用的门并将其显示给用户
  2. 您的用户选择了他们想要连接的门
  3. 您可以在NSUserDefaults
  4. 等地方保存所选外围设备的标识符
  5. 您连接到外围设备
  6. 调用didConnectPeripheral委托方法后,您可以读取计数并在获得值后更新服务器
  7. 用户现在可以暂停您的应用并执行其他操作
  8. 最终外围设备将超出范围,您将接到didDisconnectPeripheral的电话。在此方法中,您立即重新发出连接到外围设备。
  9. 由于您拥有核心蓝牙后台模式,当最终再次看到外围设备时,您将在后台再次拨打didConnectPeripheral,然后您可以按照步骤5进行操作(在这种情况下,您的应用已经在在没有用户做任何事情的情况下读取数据后,它将返回暂停状态。
  10. 您在步骤5中更新服务器。无论应用程序是在前台还是后台,都会执行此步骤。用户无需打开您的应用。

    现在最终iOS可能会将您的应用从暂停状态中移除,比如由于内存压力。为了在看到外围设备时仍然能够连接到外围设备,您需要按照Core Bluetooth Programming Guide

    中的说明选择进行状态恢复。

答案 1 :(得分:2)

如果您打算构建自己的电路板和蓝牙LE固件,这非常简单:

  1. 添加一个触点开关,可在门打开时向电路板发送电压电平变化。
  2. 当电平变化时,在微控制器上递增计数器。
  3. 使用计数器编写通告iBeacon数据包的固件,作为iBeacon标识符(32位主要和次要)的最低有效部分。
  4. 然后,手机可以通过使用CoreLocation API来监控信标(用于快速后台唤醒)和范围(读取特定标识符),然后根据以下内容将计数器值发送到服务器来接收此计数器。标识符读。

    使用CoreLocation而不是CoreBluetooth作为@ paulw11的优势在于他非常好的答案是应用程序的更快后台唤醒,允许应用程序在后台可靠地读取计数器。使用CoreBluetooth,这种后台唤醒可能会慢很多,并且更容易错过开门事件。