1

我正在我的应用程序上使用 HealthKit SDK(它与健康有关)。我设置了“enableBackgroundDelivery”,希望 iOS 在有新的用户健康数据时唤醒我的应用程序,以便我可以开始查询用户的健康数据。当有新的健康数据并且代码在我的设备和用户的设备上按预期工作时,iOS 会唤醒应用程序,但在某些设备上,iOS 根本不会唤醒应用程序。

如果我的代码有问题,那么它不应该适用于任何设备,但它适用于我的设备和用户的设备,所以我认为我的代码出现问题的可能性很小。当我搜索该问题的其他可能性时,我发现当某些设备上有用户的新健康数据时,iOS 不唤醒应用程序的原因如下。

  1. 健身追踪和健康在设置 -> 隐私 -> 运动和健身下关闭。并且运动校准和距离在设置 -> 隐私 -> 位置服务 -> 系统服务下关闭。在这种情况下,默认的健康应用程序本身无法获取健康数据,因此它不会唤醒我的应用程序。

  2. 我的应用程序的后台应用程序刷新已关闭。在这种情况下,当应用程序被最小化或强制关闭时,HealthKit 不会唤醒我的应用程序,因为用户设置就是这样。

  3. iOS 故意不频繁唤醒我的应用程序或任何应用程序,原因有很多,例如节省用户设备的电池电量,或者如果用户正在积极使用如此多的应用程序,那么 iOS 会优先考虑这些应用程序,并且 iOS 会将我们应用程序的服务安排到未来. iOS 内部算法会考虑设备的性能和优化,将服务分配给安装在设备上的应用程序,这意味着我们的代码只有在 iOS 决定执行时才会执行。这可能是为什么我看不到某些用户的健康数据的原因,但持续了多长时间?iOS 应该至少在一两天后唤醒我的应用程序,但它没有。


对于我看到问题的用户,上述#1 和#2 设置已正确设置。如果#3是原因,iOS应该至少在一两天后唤醒我的应用程序,但它并没有唤醒应用程序,我已经与一些用户进行了沟通,他们在iOS默认的“健康”应用程序中有一些数据.


有没有人遇到过这种问题?除了上述原因(代码方面和 iOS 设置方面),还有人知道为什么 iOS 没有唤醒我的应用程序的任何其他原因吗?

我的代码与此类似:https ://gist.github.com/phatblat/654ab2b3a135edf905f4a854fdb2d7c8

谢谢。

4

0 回答 0