【问题标题】:How to detect when user has declined to enable Location Services more than 2 times?如何检测用户何时拒绝启用位置服务超过 2 次?
【发布时间】:2019-05-29 09:35:22
【问题描述】:

在调用CLLocationManagerrequestWhenInUseAuthorization 方法时,如果用户禁用了定位服务,iOS 会显示一条警报,内容为:

打开定位服务以允许“您的应用名称”确定您的 位置

此警报有一个“设置”按钮,可将用户带到“设置”应用中的“定位服务”,还有一个“取消”按钮。

此警报很棒,但我遇到的问题是它最多只能显示 2 次。如果用户两次点击取消,那么下次我调用requestWhenInUseAuthorization 时,不会显示任何警报。

我想至少告诉用户这种情况下的问题是什么,但我不知道如何检测这种情况。

【问题讨论】:

    标签: ios


    【解决方案1】:

    您必须自己保存授权请求的数量。 最简单的方法是使用 UserDefaults。像这样:

    保存价值:

    UserDefaults.standard.set(true, forKey: "DidRequestAuthorization")

    负载值:

    let didRequestAuthorization = UserDefaults.standard.bool(forKey: "DidRequestAuthorization")

    然后如果didRequestAuthorization为真,您可以在下次显示警报,警告用户取消请求。

    【讨论】:

    • 他说的不是用户授权。他说的是核心位置本身被关闭了。
    • 这是我考虑过的一种方法。它看起来不是很健壮,但也许它是最好的。
    • @matt 我知道当我们调用 requestWhenInUseAuthorization 时,我们想知道我们是否已经尝试过两次询问用户。如果是这种情况,系统警报将不再显示,因此我们希望通过我们自己的警报通知用户他/她可能必须启用定位服务。所以我们需要以某种方式保存我们已经尝试过的次数。但我同意你的看法,使用“locationServicesEnabled”比我的方法更好。
    【解决方案2】:

    此警报很棒,但我遇到的问题是它最多只能显示 2 次。如果用户两次点击取消,那么下次我调用 requestWhenInUseAuthorization 时,不会显示任何警报。

    正如您正确观察到的,您不能依赖系统警报。但你不必。您可以通过调用 CLLocationManager 类方法locationServicesEnabled 来判断用户是否完全禁用了核心位置。然后您可以显示您自己的警报。

    【讨论】:

    • 您无法知道运行时是否会代表您显示系统警报,这很烦人;您可能需要提交一份关于该问题的错误报告。
    • 感谢您的帮助。显示我自己的警报的问题是,我似乎无法将用户引导到“设置”应用中的“定位服务”视图。
    • 是的,很遗憾。但是您至少可以将用户带到您的应用程序设置中。就像我说的,在这一切上提交一个错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-18
    相关资源
    最近更新 更多