使用requestWhenInUseAuthorization和swift

时间:2015-08-12 18:45:25

标签: ios swift cllocationmanager

我对我正在制作的应用程序有疑问,加载的第一页要求用户使用 requestWhenInUseAuthorization 方法使用其位置的权限。他们要么给予或不给予,这是公平的,但没有位置应用程序是无用的。

我的问题是,如果他们说没有任何方式以编程方式再次请求许可?因为 requestWhenInUseAuthorization 功能一旦你说不,就没有真正做任何事情。唯一的方法是挖掘iOS设置并授予权限,或删除应用程序并重新安装。我想尽可能避免两种选择。

有什么建议吗?

4 个答案:

答案 0 :(得分:2)

除非用户在其隐私设置中启用它,否则没有任何办法。

最好的方法是让他们事先知道您要求访问,并在实际调用授权请求之前显示您自己的对话框。这样,当他们拒绝时,你实际上并没有拒绝授权 - 你只是没有向他们展示系统对话框。喜欢"嘿,要使用这个很酷的功能,我们需要访问您的位置"。这样,您可以在应用中设置一个设置,以便根据需要打开和关闭位置。

另一件需要考虑的事情是,只有在用户表示他们想要使用该功能时才会要求获得许可 - 例如,在首次加载应用时不要求获取位置权限,在他们提出要求时请求尝试使用基于位置的功能。他们已经决定让应用访问,因此他们更有可能接受。

答案 1 :(得分:2)

不,该弹出窗口是一次性请求。但是,如果他们拒绝,则可以使用UIApplicationOpenSettingsURLString常量提示他们以更有用的方式更改其设置。 NSHipster article on Core Location有一个很好的例子。

答案 2 :(得分:1)

检查CLLocationManager.authorizationStatus()

  1. 如果它返回.NotDetermined,则要求授权(locationManager.requestWhenInUseAuthorization()

  2. 如果它返回.AuthorizedWhenInUse,你就没事了

  3. 在所有其他情况下,您可以将用户重定向到他/她可以更改设置的设置中的适当位置。

    UIApplication.sharedApplication().openURL(NSURL(string:UIApplicationOpenSettingsURLString)
    

答案 3 :(得分:0)

来自func说明:

func requestWhenInUseAuthorization()

<强>描述 请求在应用程序位于前台时使用位置服务的权限。 当当前授权状态未确定时,此方法异步运行并提示用户授予应用程序使用位置服务的权限。

用户提示包含应用程序Info.plist文件中NSLocationWhenInUseUsageDescription键的文本,调用此方法时需要存在该键。

确定状态后,位置管理器将结果传递给代理的 locationManager(:didChangeAuthorization:) 方法。如果当前授权状态不是notDetermined,则此方法不执行任何操作,也不会调用locationManager(:didChangeAuthorization :)方法。