首页 > 解决方案 > 无法定期在 IOS 中进行后台 API 调用以推送应用程序中从 BLE 设备接收到的数据

问题描述

我有一个来自Acaia(Peripheral)的体重秤,它以 5 点/秒的速度发出体重数据。我使用 Acaias iOS SDK 制作了一个可以连接到它以接收数据点的应用程序。

即使在后台状态下,我也想使连接处于活动状态,因此我在 Capabilities for Bluetooth 中启用了 Background State 模式现在应用程序继续使用NSNotifications接收数据。

需求和我的工作

我必须将此数据推送到我们的服务器,因为我将数据存储在一个数组中,并且每 10 秒,我进行一次 API POST 调用以将数组中可用的内容推送到我们的服务器,然后我正在重置数组.

  1. 它在应用程序的前台状态下按预期工作。
  2. 当屏幕锁定或应用程序处于后台状态时,API 日志不规则,这意味着数据不会定期推送。
  3. 在将应用程序从后台带到前台时,可以说 30 分钟后,应用程序冻结并且连接丢失。

我已阅读 Apple 开发人员指南,其中说如果数据点不断出现,可以在后台永久保持与外围设备的连接。现在我如何确保我不会丢失这些重量数据?是否可以将所有这些推送到服务器中,也许在批处理 API 调用中?

参考:

https://developer.apple.com/library/archive/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html

https://acaia.co/blogs/news/new-ios-sdk-api-release

在后台向服务器发送 BLE 设备数据

标签: iosbluetooth-lowenergybackground-process

解决方案


在 IOS 中可以进行后台处理。但它应该只做从挂起状态保持在后台状态的工作。另外,我发现,不断将数据推送到 IOS 应用程序的 BLE 外围设备会阻止应用程序进入挂起状态,因此应用程序可能永远处于后台,除非 IOS 试图将其杀死以解决内存和其他问题.

  1. 在 Capabilities 部分有使 App 在后台状态下运行的选项。
  2. 还要确保处理正确的外围代理方法。
  3. API 调用是批量进行的。我宁愿将从BLE捕获的数据保存在后台的本地存储中,每当应用程序进入前台并连接到互联网时,都会为用户提供推送到服务器的选项。

推荐阅读