Приложение не запрашивает разрешение службы определения местоположения при установке?

Я использую карту Google в своем приложении. Я установил это в info.plist

Конфиденциальность - Расположение при использовании Описание использования

и в моем коде (HomeScreen) я тоже проверяю, как это:

 if (CLLocationManager.locationServicesEnabled())
    {
        locationManager = CLLocationManager()
        locationManager.delegate = self
        locationManager.desiredAccuracy = kCLLocationAccuracyBest
        locationManager.requestAlwaysAuthorization()
        locationManager.startUpdatingLocation()
    } else{
        let alertController = UIAlertController(title: "Oops !!" , message: "Location service seems to be disabled. Please enable from Settings -> Privacy ->LocationService.", preferredStyle: .Alert)
        let defaultAction = UIAlertAction(title: "OK", style: .Default, handler: nil)
        alertController.addAction(defaultAction)
        self.presentViewController(alertController, animated: true, completion: nil)
    }

Но он не спрашивает разрешения при первой установке приложения. Любая помощь будет цениться.

3 ответа

Вы устанавливаете Info.plist ключ для доступа к местоположению, когда пользователь использует приложение (то есть, когда оно находится на переднем плане), но в вашем коде вы запрашиваете разрешение всякий раз, когда приложение работает (то есть всегда).

Вам нужно решить, что вы хотите. Если вы хотите всегда иметь доступ к местоположению пользователя, измените Info.plist ключ. Если вы хотите получить доступ к местоположению пользователя, когда ваше приложение находится на переднем плане, измените запрос на разрешение на requestWhenInUseAuthorization() вместо.

import CoreLocation
class AppDelegate: CLLocationManagerDelegate{

var locationManager: CLLocationManager!
var currentCoordinate: CLLocationCoordinate2D?

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
       self.setupLocationManager()
       return true
}

func setupLocationManager(){

        locationManager = CLLocationManager()
        locationManager?.delegate = self
        self.locationManager?.requestAlwaysAuthorization()
        locationManager?.desiredAccuracy = kCLLocationAccuracyNearestTenMeters
        locationManager?.startUpdatingLocation()
    }

// Below method will provide you current location.
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {

    if currentCoordinate == nil {
        currentCoordinate = locations.last?.coordinate
        locationManager?.stopMonitoringSignificantLocationChanges()
        let locationValue:CLLocationCoordinate2D = manager.location!.coordinate

        print("locations = \(locationValue)")
        //currentCoordinate use this location Coordinate in your whole app.
        locationManager?.stopUpdatingLocation()
    }
}

// Below Mehtod will print error if not able to update location.
func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {
    print("Error")
}

Если какой-либо запрос по моему ответу, то скажите мне.

Начиная с iOS 10, мы должны дать разрешения на местоположение в файле.plist, как показано ниже

и просто проверьте, включены ли службы определения местоположения вашего приложения в настройках. Настройки -> имя вашего приложения -> Разрешить доступ к местоположению. Никогда не должен быть выбран.

Удалите приложение с устройства и переустановите приложение снова, после чего оно должно запросить разрешение на местоположение.

Другие вопросы по тегам