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

Joh*_*ato 0 ios core-bluetooth bluetooth-lowenergy ibeacon

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

这是我正在思考的图表:

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

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

Pau*_*w11 5

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

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

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

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

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

现在最终iOS可能会将您的应用从暂停状态中移除,比如由于内存压力.为了在看到外围设备时仍然能够连接到外围设备,您需要选择状态恢复,如" 核心蓝牙编程指南"中所述