【问题标题】:Location Authorization not prompting位置授权不提示
【发布时间】:2014-11-13 18:56:28
【问题描述】:

我是 iOS 新手,速度很快。我正在使用 MapKit,并且正在尝试更新用户的位置。我已经确定它没有运行didUpdateLocations 方法。我正在尝试使用requestWhenInUseAuthorization 和requestAlwaysAuthorization 方法,但仍然没有。

这是错误:

Trying to start MapKit location updates without prompting for location authorization. Must call -[CLLocationManager requestWhenInUseAuthorization] or -[CLLocationManager requestAlwaysAuthorization] first.

代码如下:

if (CLLocationManager.locationServicesEnabled()) {
        println("CLLocationManager")
        manager = CLLocationManager()
        manager.requestAlwaysAuthorization()
        manager.requestWhenInUseAuthorization()
        manager.delegate = self
        manager.desiredAccuracy = kCLLocationAccuracyBest
        manager.startUpdatingLocation()

        updateCoordinates()

        let prefs:NSUserDefaults = NSUserDefaults.standardUserDefaults()
    }

我也尝试将requests 放在delegate 之后,然后也放在desiredAccuracy 之后。

知道怎么解决吗?

【问题讨论】:

    标签: ios swift location mapkit cllocationmanager


    【解决方案1】:

    您必须在 yourApp-info.plist 中添加此键:NSLocationAlwaysUsageDescription 或 NSLocationWhenInUseUsageDescription(两者都更好)。您添加此密钥,文本是请求用户使用的消息。

    【讨论】:

    • 可能会添加 requestAlwaysAuthorization 和 requestWhenInUseAuthorization 的文档都提到了这个要求。您似乎不太可能同时需要两者,尽管我认为如果仅在使用时允许跟踪,则在某些情况下可能会缩减功能。
    • 你只需要一个,取决于你的应用需要的服务。如果您的应用在后台不需要任何定位服务,您应该使用:requestWhenInUseAuthorization(调用此方法,并在 info.plist 中实现密钥)。如果您需要后台服务(如区域警报),则需要始终请求。这会更加侵犯隐私,您必须向用户解释为什么需要您的应用程序提供此服务。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-10
    • 1970-01-01
    • 2016-12-08
    • 1970-01-01
    相关资源
    最近更新 更多