ios - 无法定期在 IOS 中进行后台 API 调用以推送应用程序中从 BLE 设备接收到的数据
问题描述
我有一个来自Acaia(Peripheral)的体重秤,它以 5 点/秒的速度发出体重数据。我使用 Acaias iOS SDK 制作了一个可以连接到它以接收数据点的应用程序。
即使在后台状态下,我也想使连接处于活动状态,因此我在 Capabilities for Bluetooth 中启用了 Background State 模式。现在应用程序继续使用NSNotifications接收数据。
需求和我的工作
我必须将此数据推送到我们的服务器,因为我将数据存储在一个数组中,并且每 10 秒,我进行一次 API POST 调用以将数组中可用的内容推送到我们的服务器,然后我正在重置数组.
- 它在应用程序的前台状态下按预期工作。
- 当屏幕锁定或应用程序处于后台状态时,API 日志不规则,这意味着数据不会定期推送。
- 在将应用程序从后台带到前台时,可以说 30 分钟后,应用程序冻结并且连接丢失。
我已阅读 Apple 开发人员指南,其中说如果数据点不断出现,可以在后台永久保持与外围设备的连接。现在我如何确保我不会丢失这些重量数据?是否可以将所有这些推送到服务器中,也许在批处理 API 调用中?
参考:
解决方案
在 IOS 中可以进行后台处理。但它应该只做从挂起状态保持在后台状态的工作。另外,我发现,不断将数据推送到 IOS 应用程序的 BLE 外围设备会阻止应用程序进入挂起状态,因此应用程序可能永远处于后台,除非 IOS 试图将其杀死以解决内存和其他问题.
- 在 Capabilities 部分有使 App 在后台状态下运行的选项。
- 还要确保处理正确的外围代理方法。
- API 调用是批量进行的。我宁愿将从BLE捕获的数据保存在后台的本地存储中,每当应用程序进入前台并连接到互联网时,都会为用户提供推送到服务器的选项。
推荐阅读
- php - 获取:“尝试获取非对象的属性”时尝试访问对象数组中的值
- authentication - 即使使用 AuthorizeFilter,Asp.Net Core MVC 中间件也会返回 404 而不是 401
- html - debounce (AfterValueChanged) 无法正常工作
- django - Django admin:内联模型:如何从 has_delete_permission 方法访问当前记录 id
- visual-c++ - 链接列表创建头部导致错误 C2143:语法错误:缺少“;” 前 '*'
- c - 可变大小的二维数组声明错误吗?
- qualtrics - 如何将选定的选项以其嵌入的价值带入下一个问题以进行进一步评估?
- laravel - 如何正确连接 Nuxt.js 与 laravel 后端?
- google-app-engine - 如何使用 Google App Engine 代理端点
- python - 为树生成干净的 __str__ 方法的算法