使用 Core Location 在后台执行功能是否合适?

Is using Core Location for performing functionality in the background appropriate?

最近,我注意到有一些应用程序请求访问用户的位置以在后台执行某些功能。

例如:应用扫描并上传用户照片用于备份,所以进入后台状态时,一直在扫描上传。

我在问什么:

另外,我读过(这就是我的假设)使用核心位置不是本意应该导致申请被拒绝,奇怪的是 - 正如我提到的 - 有一些应用程序这样做!我对此感到有点困惑。

编辑: 消除疑虑:我不推荐以下方法,事实上,就像@matt 一样,我强烈反对任何人使用这种或类似的方法。请参阅下面我的评论,了解在后台更新应用程序的更好方法。

回答 OP 问题: 你可以问 CLLocationManager 得到 significantLocationChanges。这不仅会通知您并在后台给您 CPU 时间,而且实际上 启动 您的应用程序(即使在 phone 重启后!)让您知道的位置更改。

这是一个很好的方式,可以让你自己在后台获得一些额外的处理时间(尽管就像你说的 - 这是一个非常糟糕的 "app behavior",甚至可能导致你的应用程序被 AppStore 拒绝)

据我所知,第一个执行此操作的应用程序是 Dropbox - 他们在设置中有一个完整的屏幕来解释为什么他们要求您提供位置只是为了备份您的图像...因为 iOS 没有任何事件(对于第 3 方开发者)为了通知应用程序设备照片的变化,Dropbox 解决方案是获取 "woken" 这些位置变化并检查自己是否有变化,如果他们发现任何变化 - 他们会上传新图像到 Dropbox背景。

significantLocationChanges 仅使用蜂窝塔和附近 Wifi 等低功耗方法,因此非常省电。然而,处理本身可能很密集,具体取决于利用此方法的应用程序。

Also, I've read (and this is what I assume) that using the core location for not what is meant should causes to let the application to be rejected, the weird thing that -as I mentioned- there are a few applications doing this! I feel a little confused about it.

你的怀疑是对的。 不要模仿这种行为。这些人 滥用 CoreLocation 作为让他们的代码在后台 运行 的一种方式,即使他们并没有真正使用任何 CoreLocation 功能。

你不能在后台任意做事——而且有充分的理由。不要违反规则。如果您想在后台继续上传,请使用带有后台 URLSessionConfiguration 的 URLSession。以正确的方式做事。