ios - serviço - xcode privacy location usage description




Serviços de localização não funcionam no iOS 11 (6)

Acabei de reconstruir meu aplicativo com o iOS 11 SDK em uma tentativa de remover o blue banner que agora está sempre aparecendo. Eu pensei - "brilhante, que funcionou", apenas para descobrir que os serviços de localização agora não estão funcionando.

O aplicativo usado para trabalhar com iOS 10 - Alguém ouviu alguma coisa?


Siga esses passos:

Eu me deparei com o mesmo problema com um aplicativo que precisava "Sempre Autorização" e resolvi isso seguindo estas etapas:

1. Adicione a chave Info.plist ao Info.plist

2. Adicione NSLocationAlwaysAndWhenInUseUsageDescription ao Info.plist

3. Adicione NSLocationAlwaysUsageDescription ao Info.plist (para suportar <iOS 11)

4. Chame requestWhenInUseAuthorization() ANTES DE requestAlwaysAuthorization( )

Você não pode executar requestAlwaysAuthorization () antes de requestWhenInUseAuthorization (). Você deve escalar para esse nível de permissão. Depois de fazer essas alterações, as atualizações de localização começaram a funcionar corretamente novamente.

Mais detalhes podem ser encontrados aqui:

https://developer.apple.com/documentation/corelocation/choosing_the_authorization_level_for_location_services/requesting_always_authorization


Apenas para adicionar as etapas para corrigir isso:

2 maneiras de fazer isso:

A) O caminho mais fácil: Selecione seu arquivo Info.plist, adicione as propriedades, note que elas começam com PRIVACY ao invés de LOCATION ... portanto, os nomes exatos dessas variáveis ​​começam com "Privacy - Location ..." etc, add cada aqui, e descreva como o usuário estaria vendo isso no aviso.

B) A maneira hard / interessante / programática (eu gosto disso mais):

Clique com o botão direito do mouse em seu Info.plist para seu aplicativo e, em seguida, selecione "Exibir código-fonte", você deve ver tudo em XML,

Siga o outro formato ...... e adicione essas propriedades da seguinte maneira:

<key>NSLocationAlwaysUsageDescription</key>
<string>Program requires GPS to track cars and job orders</string>
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>Program requires GPS to track cars and job orders</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>Program requires GPS to track cars and job orders</string>
<key>NSMicrophoneUsageDescription</key>
<string>This app uses your Microphone to allow Voice over IP communication with the Program Admin system</string>

Salve e, em seguida, clique com o botão direito do mouse no arquivo info.plist e selecione Lista de propriedades. Isso deve exibir o arquivo de volta na exibição padrão.

EDITAR:

Outro membro pediu código, aqui está:

1) No seu arquivo .H, adicione:

@property (strong, nonatomic) CLLocationManager *LocationManager;

2) No seu arquivo .M, inclua a função ViewDidAppear ():

_LocationManager = [[CLLocationManager alloc] init];
[_LocationManager setDelegate:self];
_LocationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation;
_LocationManager.pausesLocationUpdatesAutomatically = NO;
[_LocationManager requestAlwaysAuthorization];

_LocationManager.headingFilter = 5;
_LocationManager.distanceFilter = 0;

[_LocationManager startUpdatingLocation];
[_LocationManager startUpdatingHeading];

Isso funciona bem para mim, espero que o código funcione para você também.

Saudações

Heider


Testado no iOS 12.2 com o Swift 5

Etapa 1. você deve adicionar as seguintes permissões de privacidade no arquivo plist

<key>NSLocationWhenInUseUsageDescription</key>
<string>Description</string>

<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>Description</string>

<key>NSLocationAlwaysUsageDescription</key>
<string>Description</string>

Etapa 2. Certifique-se de ter seguido o código rápido para obter os locais atuais

import UIKit
import MapKit
import CoreLocation

class ViewController: UIViewController, CLLocationManagerDelegate {

    // MARK: Variables declearations
    @IBOutlet weak var mapView: MKMapView!
    var locationManager: CLLocationManager!

    // MARK: View Controller life cycle methods
    override func viewDidLoad() {
        super.viewDidLoad()
        //TODO: Make user you must add following three privacy permissions in plist
        //NSLocationWhenInUseUsageDescription
        //NSLocationAlwaysAndWhenInUseUsageDescription
        //NSLocationAlwaysUsageDescription

        getCurrentLocation()
    }

    func getCurrentLocation()
    {
        if (CLLocationManager.locationServicesEnabled())
        {
            locationManager = CLLocationManager()
            locationManager.delegate = self
            locationManager.desiredAccuracy = kCLLocationAccuracyBest
            locationManager.requestAlwaysAuthorization()
            locationManager.startUpdatingLocation()
        }
    }

    // MARK: Location Manager Delegate methods
    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation])
    {
        let locationsObj = locations.last! as CLLocation
        print("Current location lat-long is = \(locationsObj.coordinate.latitude) \(locationsObj.coordinate.longitude)")
        showOnMap(location: locationsObj)
    }
    func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {
        print("Get Location failed")
    }

    func showOnMap(location: CLLocation )
    {
        let center = CLLocationCoordinate2D(latitude: location.coordinate.latitude, longitude: location.coordinate.longitude)
        let region = MKCoordinateRegion(center: center, span: MKCoordinateSpan(latitudeDelta: 0.01, longitudeDelta: 0.01))
        mapView.setRegion(region, animated: true)
    }
}

trabalhando no iOS11 descobri que o Info.plist precisa de menos NSLocationAlwaysAndWhenInUseUsageDescription no Info.plist:

Estranho o suficiente quando seu aplicativo é multilíngue, as versões localizadas de suas strings precisam das três chaves mencionadas neste post locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) requestAlwaysAuthorization() e locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) falharão silenciosamente.

Tiro mostrando a tradução alemã como exemplo:

Espero que isso economize seu tempo ao tropeçar.


Swift: 3 eu enfrentei o mesmo problema. Eu estava totalmente ferrada encontrando a solução. aqui está como eu consertei o problema.

Etapa 1: Arquivo de projeto> Recursos> Modos de segundo plano> selecione Atualizar local

Passo 2: Adicione as chaves NSLocationWhenInUseUsageDescription e NSLocationAlwaysAndWhenInUseUsageDescription ao Info.plist

etapa 3 :

manager.pausesLocationUpdatesAutomatically = false
manager.allowsBackgroundLocationUpdates = true

Trabalhando no Swift 4.0.3

   <key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
   <string>Description</string>

   <key>NSLocationAlwaysUsageDescription</key>
   <string>Will you allow this app to always know your location?</string>

   <key>NSLocationWhenInUseUsageDescription</key>
   <string>Do you allow this app to know your current location?</string>  




location-services