无法定期在 IOS 中进行后台 API 调用以推送应用程序中从 BLE 设备接收的数据

Posted

技术标签:

【中文标题】无法定期在 IOS 中进行后台 API 调用以推送应用程序中从 BLE 设备接收的数据【英文标题】:Unable to make Background API call in IOS at regular intervals to push data received in app from a BLE device 【发布时间】:2019-05-29 03:50:01 【问题描述】:

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

我希望即使在 后台 状态下也能建立连接,因此我在蓝牙功能中启用了后台状态模式。现在,该应用继续使用 NSNotifications 接收数据。

需求和我的工作

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

    它在应用程序的前台状态下按预期工作。 当屏幕被锁定或应用程序处于后台状态时,API 日志不规则,这意味着数据没有定期推送。 在将应用从后台转移到前台时,假设 30 分钟后,应用冻结并且连接丢失。

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

参考:

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

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

Sending BLE device data to server in background

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

以上是关于无法定期在 IOS 中进行后台 API 调用以推送应用程序中从 BLE 设备接收的数据的主要内容,如果未能解决你的问题,请参考以下文章

PayPal API 调用以进行订阅和即时付款

iOS - 在后台推送通知上刷新数据(发出 Api 请求)

PayPal API 调用以获取所有经常性付款资料“支付”我的帐户

导出Promise API调用以重用

进行 javaScript 调用以使用在 localhost 上运行的 REST API

如何错开异步 API 调用以防止使用 grequests 库进行最大重试?