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

Я использую карту 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)
    }

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


person Anushka Madushan    schedule 14.03.2017    source источник
comment
Вы добавляете ‹?xml version=1.0 encoding=UTF-8?› ‹!DOCTYPE plist PUBLIC -//Apple//DTD PLIST 1.0//EN apple.com/DTDs/PropertyList-1.0.dtd› ‹plist version=1.0› ‹string›Чтобы определить, едете ли вы за рулем, мы нужен доступ к вашему местоположению.‹/string› ‹/plist› в вашем файле .plist ?   -  person Himanshu Moradiya    schedule 14.03.2017
comment
просто установите этот код в свой файл appdelegates.swift   -  person Himanshu Moradiya    schedule 14.03.2017
comment
@HimanshuMoradiya Какой код добавить в AppDelagate ??   -  person Anushka Madushan    schedule 14.03.2017
comment
Взгляните на этот ответ - stackoverflow.com/a/46339284/3024579   -  person Alok    schedule 23.10.2017


Ответы (3)


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

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

person Jim    schedule 14.03.2017

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")
}

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

person Himanshu Moradiya    schedule 14.03.2017
comment
@AnushkaMadushan, это работает, тогда зачем отказываться от голосования? - person Himanshu Moradiya; 14.03.2017
comment
извините за это, как я могу изменить это - person Anushka Madushan; 14.03.2017
comment
@AnushkaMadushan просто прими мой ответ. теперь это не отменяет ваш голос против - person Himanshu Moradiya; 14.03.2017
comment
@AnushkaMadushan, если ваша проблема решена, одобрите ответ. Удачного кодирования. - person Himanshu Moradiya; 15.03.2017

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

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

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

person Venkat    schedule 14.03.2017