iOS 13中“始终允许”位置的问题

时间:2019-09-26 10:26:02

标签: ios objective-c location locationmanager ios13

我有一个取决于用户位置的应用程序。在iOS 13之前,该应用程序可以正常运行,但现在它不会发送用户的位置。

我尝试选择“在使用应用程序时”选项,并等待下一个提示以选择“始终允许”,但它不起作用。选择“在使用应用程序时”并将设置更改为“始终允许”选项将不起作用。 (这两种情况都是苹果在文档中的“官方”答复)

有什么主意吗? 谢谢

3 个答案:

答案 0 :(得分:4)

从iOS 13开始,Apple从权限屏幕上将“始终允许”替换为“始终允许”,并在设置中将“始终允许”移动了。

如果用户选择“总是”,则每次用户启动应用时,应用都会提示位置权限屏幕。

如果用户选择“正在使用”,则下次用户明确需要访问设置并提供许可时,应用将不会提示权限屏幕。

从设置切换到“使用应用时”到“始终允许”的位置更新也对我有用。

这是我指定的属性

let locationManager = CLLocationManager()
locationManager.requestAlwaysAuthorization()
locationManager.allowsBackgroundLocationUpdates = true
locationManager.pausesLocationUpdatesAutomatically = false
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.delegate = self

.
.
.

extension AppDelegate: CLLocationManagerDelegate {

    func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
        switch status {
        case .authorizedAlways, .authorizedWhenInUse:
            locationManager.startUpdatingLocation()

        case .denied:
            print("Location permission denied")

        case .restricted:
            print("Location permission restricted")

        case .notDetermined:
            print("Location permission notDetermined")

        @unknown default:
            fatalError()
        }
    }

    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
        print("Location Update = \(String(describing: locations.first))")
    }

    func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {
        print("Location Error = \(error.localizedDescription)")
    }
}

答案 1 :(得分:2)

这是iOS 13本身引入的功能。如此处所述:https://engineering.q42.nl/apple-location-permission-ios13/ 如果用户授予您“使用中”权限,并且您尝试在后台扫描位置,则只有该用户才会看到一个对话框,以授予背景权限。

This is an image for reference

到目前为止,似乎还存在很多问题,并且绝对不是良好的UX体验,但是到目前为止,情况就是这样!

答案 2 :(得分:0)

从MDM角度来看,这非常令人讨厌,因为现在必须使用的location-app不断询问用户是否仍应允许其使用“ Allow allow”。 管理员需要将其设置为“始终允许”,以便我们跟踪iPad,以防它们丢失/被盗。