iOS定位服务在应用程序打开时询问



只是试图将定位服务添加到我的应用程序(在ObjC中)。我只希望在即将使用时出现权限提示,但在我第一次打开应用程序时会出现提示。

我的印象是,只有在对CLLocationManager对象调用startUpdatingLocation时才会出现提示。然而,这只在我的应用程序中的某些视图控制器上调用(绝对不是我的第一个视图控制器)。

有趣的是,这个问题只出现在iOS8中,它在iOS7中很好。有人有类似的问题吗?或者你知道还有什么问题吗?

谢谢。

iOS8改变了定位服务的处理方式,这也意味着如果您支持旧版本的操作系统,您可能需要进行一些额外的编码。要了解整个过程的详细信息,请查看NSHipster

在iOS 8之前,yes调用startUpdatingLocation会提示用户获得权限。尽管现在请求权限和启动位置更新是分开的,您需要调用requestWhenInUseAuthorizationrequestAlwaysAuthorization

不仅如此,在iOS8中,您还需要显式添加两个plist键,然后定义它们的值:NSLocationWhenInUseUsageDescriptionNSLocationAlwaysUsageDescription,这两个字符串将显示在通知用户您的应用程序正在请求位置信息的警报中。

但说真的,看看链接。它在解释这一切方面非常出色,比我在这里总结的要好得多。

在不知道代码放在哪里的情况下,我处理这个问题的方法是

  • 创建一个请求位置访问的方法,即-(void)findLocationAsk
  • 现在不要在应用程序启动时调用此方法,因为你不希望出现这种行为
  • 在视图控制器中调用此方法
  • 您可以在视图中调用它DidLoad,也可以将其作为按钮操作或将其作为计时器触发

这应该注意你在应用程序启动时的提示

更新:您的应用程序将在iOS 8上启动时提示位置访问权限。这是因为在plist文件中检测到"Required background modes"必需键。你唯一能做的就是让这条消息更具描述性,说明你为什么需要访问。将这个密钥和描述对添加到您的plist文件中,并在中添加您喜欢的任何解释文本

NSLocationWhenUseUsageDescription如果检测到登录尝试失败,并且您想知道是谁,请授予此应用程序访问您所在位置的权限

相关内容

最新更新