623 Stimmen

Standortdienste funktionieren nicht in iOS 8

Meine App, die mit iOS 7 einwandfrei funktionierte, funktioniert nicht mit dem iOS 8 SDK.

CLLocationManager liefert keinen Standort zurück, und ich sehe meine App auch nicht unter Einstellungen -> Ortungsdienste. Ich habe bei Google nach dem Problem gesucht, aber es kam nichts heraus. Was könnte falsch sein?

9voto

budiDino Punkte 12048

Vor [locationManager startUpdatingLocation]; füge eine iOS8-Standortdienstanfrage hinzu:

if([locationManager respondsToSelector:@selector(requestAlwaysAuthorization)])
    [locationManager requestAlwaysAuthorization];

Bearbeite die Info.plist deiner App und füge den Schlüssel NSLocationAlwaysUsageDescription mit dem Zeichenfolgenwert hinzu, der dem Benutzer angezeigt wird (zum Beispiel, Wir tun unser Bestes, um die Batterielaufzeit zu erhalten.)

Wenn deine App nur Standortdienste benötigt, während die App geöffnet ist, ersetze:

requestAlwaysAuthorization durch requestWhenInUseAuthorization und

NSLocationAlwaysUsageDescription durch NSLocationWhenInUseUsageDescription.

9voto

Kris Utter Punkte 129

Ich habe an einer App gearbeitet, die auf iOS 8 aktualisiert wurde und die Standortdienste nicht mehr funktionierten. Wahrscheinlich erhalten Sie einen Fehler im Debug-Bereich wie folgt:

Versuch, MapKit-Standortupdates zu starten, ohne um die Standortberechtigung zu bitten. Muss zuerst -[CLLocationManager requestWhenInUseAuthorization] oder -[CLLocationManager requestAlwaysAuthorization] aufrufen.

Ich habe das am wenigsten invasive Verfahren durchgeführt. Fügen Sie zunächst den Eintrag NSLocationAlwaysUsageDescription zu Ihrer info.plist hinzu:

Bildbeschreibung hier eingeben

Beachten Sie, dass ich den Wert für diesen Schlüssel nicht ausgefüllt habe. Dies funktioniert immer noch, und ich mache mir keine Sorgen, weil dies eine firmeninterne App ist. Außerdem gibt es bereits einen Titel, der um die Verwendung von Standortdiensten bittet, daher wollte ich nichts redundantes tun.

Als nächstes habe ich eine Bedingung für iOS 8 erstellt:

if ([self.locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) {
    [_locationManager requestAlwaysAuthorization];
}

Nach diesem Schritt wird die Methode locationManager:didChangeAuthorizationStatus: aufgerufen:

- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:  (CLAuthorizationStatus)status
{
    [self gotoCurrenLocation];
}

Und jetzt funktioniert alles einwandfrei. Wie immer, schauen Sie sich die Dokumentation an.

7voto

hrchen Punkte 1203

Lösung mit Abwärtskompatibilität:

SEL requestSelector = NSSelectorFromString(@"requestWhenInUseAuthorization");
if ([CLLocationManager authorizationStatus] == kCLAuthorizationStatusNotDetermined &&
    [self.locationManager respondsToSelector:requestSelector]) {
    [self.locationManager performSelector:requestSelector withObject:NULL];
} else {
    [self.locationManager startUpdatingLocation];
}

Legen Sie den Schlüssel NSLocationWhenInUseUsageDescription in Ihrer Info.plist-Datei fest

6voto

Lösung mit Abwärtskompatibilität, die keine Xcode-Warnungen erzeugt:

SEL requestSelector = NSSelectorFromString(@"requestWhenInUseAuthorization");
if ([CLLocationManager authorizationStatus] == kCLAuthorizationStatusNotDetermined &&
  [self.locationManager respondsToSelector:requestSelector]) {
((void (*)(id, SEL))[self.locationManager methodForSelector:requestSelector])(self.locationManager, requestSelector);
  [self.locationManager startUpdatingLocation];
} else {
  [self.locationManager startUpdatingLocation];
}

Richten Sie den Schlüssel NSLocationWhenInUseUsageDescription in Ihrer Info.plist ein.

Für iOS Version 11.0+: Richten Sie den Schlüssel NSLocationAlwaysAndWhenInUseUsageDescription in Ihrer Info.plist ein, zusammen mit 2 anderen Schlüsseln.

5voto

Pooja Patel Punkte 626

Dies ist ein Problem mit ios 8 Fügen Sie diesen Code hinzu

if (IS_OS_8_OR_LATER)
{
    [locationmanager requestWhenInUseAuthorization];

    [locationmanager requestAlwaysAuthorization];
}

und zu info.plist:

 NSLocationUsageDescription
 Ich brauche den Standort
 NSLocationAlwaysUsageDescription
 Ich brauche den Standort
 NSLocationWhenInUseUsageDescription
 Ich brauche den Standort

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X