Healthkit:设置“ enableBackgroundDelivery”,但是当某些设备上有用户的新健康数据时,iOS根本不会唤醒应用程序

时间:2018-09-12 09:41:47

标签: ios swift health-kit hkhealthstore hkobserverquery

我正在我的应用程序上使用HealthKit SDK(与Health相关)。我设置了“ 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

谢谢。

0 个答案:

没有答案