[英]Syncing data over BLE via iOS without App Open (or in the background)
我正在研究一种在关门时保持计数的设备。 我想做的是,当我走进门时,iPhone会自动同步设备上的数据,并将该计数发送到服务器(通过iPhone),而无需我打开应用程序或将其置于后台。 如果可能的话,这可能吗?
这是我在想什么的图表:
门关上-> BLE通知iPhone-> BLE将计数发送给iPhone-> iPhone将该值发送给服务器
全部都没有用户(我)触摸我的设备或打开已安装的iOS应用程序。
您的应用必须在后台运行才能执行某些操作,但这没关系,因为Core Bluetooth后台模式将为您解决这一问题。
首先,您需要在项目中选择“使用蓝牙配件”背景模式。
现在,您的程序流程将如下所示:
didConnectPeripheral
委托方法后,您可以读取计数并在获取值后更新服务器 didDisconnectPeripheral
的调用。 使用这种方法,您可以立即重新发出与外围设备的连接。 didConnectPeripheral
,然后可以按照步骤5进行操作(在这种情况下,您的应用程序已经在后台,因此它将进入后台读取数据后,用户无需执行任何操作即可返回暂停状态)。 您在步骤5中更新服务器。无论应用程序是在前台还是在后台,都将执行此步骤。 用户不需要打开您的应用程序。
现在,由于内存压力,最终iOS可能会将您的应用从暂停状态中删除。 为了仍然能够在看到外围设备时连接到外围设备,您需要按照《 核心蓝牙编程指南》中的说明选择进入状态恢复
如果您打算构建自己的电路板和Bluetooth LE固件,那么这很简单:
然后,电话可以使用CoreLocation API来监视该信标(用于快速后台唤醒)和监视其范围(以读取特定标识符),然后根据所读取的标识符将计数器值发送到服务器,从而获取此计数器。
@ paulw11在他的很好的回答中建议使用CoreLocation而不是CoreBluetooth的优点是可以更快地唤醒应用程序,从而使应用程序可以在后台可靠地读取计数器。 使用CoreBluetooth,此背景唤醒的速度可能要慢得多,并且更可能错过开门事件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.