1

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

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

我在问什么:

  • 如果有用于执行后台任务的后台执行机制(选择目标 -> 功能 -> 后台模式),那么为什么要使用核心位置来做这样的事情呢?

  • 如果使用 Core Location 不同,那么使用它有什么好处?

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

4

2 回答 2

1

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

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

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

于 2016-12-07T16:07:25.480 回答
0

编辑:为了消除任何疑问:我不推荐以下方法,事实上,就像@matt 我非常不鼓励任何人使用这种方法或类似方法。请参阅下面的评论,以更好地在后台更新应用程序。

要回答 OP 问题:您可以要求CLLocationManager获取significantLocationChanges. 这不仅会通知您并在后台为您提供 CPU 时间,而且会实际启动您的应用程序(即使在手机重启后!)以让您知道位置更改。

这是向自己承诺在后台获得额外处理时间的一种很好的方法(尽管就像您说的那样-这是一种非常糟糕的“应用程序行为”,甚至可能导致您的应用程序被 AppStore 拒绝)

AFAIK 这样做的第一个应用程序是 Dropbox - 他们在设置中有一个完整的屏幕来解释为什么他们要求您提供位置只是为了备份您的图像......因为 iOS 没有任何事件(对于第 3 方开发人员)来通知应用程序对于设备照片的更改,Dropbox 的解决方案是在这些位置更改时“唤醒”并检查自己是否有更改,如果他们发现任何更改 - 他们会在后台将新图像上传到 Dropbox。

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

于 2016-12-07T15:59:44.367 回答