我正在iOS 11中实现一个非VOIP应用程序,根据我的应用程序的性质,我已经实现了startMonitoringSignificantLocationChanges()。所有的实现都进行得很顺利,现在已经开始工作了。
当应用程序处于前台或后台时,位置更新会反映在我的服务器上。即使用户手动关闭应用程序,它现在也是反映出来的。所以它适用于SLC,但是
问题是;
更新似乎会在一段时间后停止,比如3-4个小时。如果用户手动关闭应用程序,就会发生这种情况。根据我的应用程序的性质,我需要让它重新启动位置更改,并将位置更新到我的服务器。
在iOS11中是否有任何类别的应用程序可以永久地获得这个位置更新?我在考虑移动应用在iOS中的应用是如何工作的。不过,不确定它是否与iOS11完美地工作。
发布于 2017-11-29 07:09:28
如果您只使用“同时使用”位置访问,据我所知,对您没有任何更改。但是,如果您使用“始终”访问,并且没有提供“同时使用”回退,那么您应该使用…好吧,你现在就得这么做
正如布拉德·詹森( Brad )在“我提到的WWDC谈话”杂志中所解释的那样,苹果已经认定,强迫用户“始终”访问应用程序的位置访问是一种糟糕的用户体验:
现在,我们认为许多开发人员选择总是要求授权的第二个原因是他们只是想给他们的用户提供最好的体验(…)但是,对于那些不希望授予应用程序授权的用户来说,这会导致用户体验非常糟糕。他们被迫在始终授予应用程序(这比他们在本例中所希望的更多)和不授予应用程序之间做出选择,这意味着他们无法从应用程序的任何基于位置的功能中受益。他们的最后一个选择是始终授予它,然后在他们使用完应用程序之后撤销授权。在任何情况下,用户对这个应用程序没有一个很好的时间。
因此,当您使用iOS 11 SDK构建应用程序时,您现在需要提供一个新的NSLocationWhenInUseUsageDescription键(如果您使用了location )。对于“始终”访问,您还可以提供第二个密钥,现在称为NSLocationAlwaysAndWhenInUseUsageDescription。如果您只提供新的NSLocationAlwaysAndWhenInUseUsageDescription,而不提供NSLocationWhenInUseUsageDescription,则请求“始终”访问将无法工作:
这个应用程序试图访问隐私敏感数据,而不需要使用描述。应用程序的Info.plist必须同时包含NSLocationAlwaysAndWhenInUseUsageDescription和NSLocationWhenInUseUsageDescription键以及字符串值,向用户解释应用程序如何使用这些数据
对现有应用程序的影响
大多数SDK更改通常只有在使用SDK & Xcode的最新版本重新编译应用程序时才会生效。这个不一样:即使你今年夏天没有发布任何更新,这个变化也会影响到你。下面是用户在iOS 11 beta版的apps中运行现有应用程序时所看到的情况,并要求访问位置:


第一个来自Foursquare,它提供了两个访问级别的选项已经很长时间了。在这种情况下,iOS 11允许您立即选择“同时使用”或“始终”,而且由于描述文本还没有根据新的行为进行更新,所以它同时显示了这两个文本。
第二个是来自Topo的应用程序,它可以让你浏览徒步旅行地图,并在旅途中发现自己在地图上。您可以想象它没有理由在后台跟踪您,但是开发人员仍然没有提供一个“同时使用”选项。iOS 11现在允许您选择该选项,但是由于它可能会在应用程序中导致一些意外行为,它显示了一个警告,即应用程序的某些部分可能无法工作。
如果您的应用程序到目前为止只提供了一个“始终”键,我建议您准备一个过渡更新,添加密钥,并确保应用程序在这种模式下正常工作。这样,用户就会得到一个像Foursquare那样的弹出窗口,至少看起来不那么可怕。
https://stackoverflow.com/questions/47539720
复制相似问题