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?

1097voto

ozg Punkte 17542

Ich habe mein Problem selbst gelöst.

Offensichtlich ist im iOS 8 SDK ein Aufruf von requestAlwaysAuthorization (für Hintergrundstandort) oder requestWhenInUseAuthorization (nur Standort im Vordergrund) auf CLLocationManager erforderlich, bevor Standortaktualisierungen gestartet werden können.

Es muss auch ein NSLocationAlwaysUsageDescription oder NSLocationWhenInUseUsageDescription Schlüssel in der Info.plist Datei mit einer Nachricht, die im Dialogfeld angezeigt werden soll, vorhanden sein. Das Hinzufügen dieser hat mein Problem gelöst.

Gib eine Bildbeschreibung hier ein

Für umfassendere Informationen, schau dir an: Core-Location-Manager-Changes-in-ios-8

320voto

Henry Punkte 3447

Ich hatte mit demselben Problem zu kämpfen. Xcode gibt Ihnen den Fehler:

Versucht, MapKit Standortaktualisierungen zu starten, ohne nach Standortberechtigung zu fragen. Muss zuerst -[CLLocationManager requestWhenInUseAuthorization] oder -[CLLocationManager requestAlwaysAuthorization] aufrufen.

Aber selbst wenn Sie eine der oben genannten Methoden implementieren, wird der Benutzer nicht aufgefordert, es sei denn, es gibt einen Eintrag in der Info.plist für NSLocationAlwaysUsageDescription oder NSLocationWhenInUseUsageDescription.

Fügen Sie die folgenden Zeilen zu Ihrer info.plist hinzu, wobei die Zeichenfolgenwerte den Grund repräsentieren, warum Sie auf den Standort des Benutzers zugreifen müssen

NSLocationWhenInUseUsageDescription
Diese Anwendung benötigt Standortdienste, um zu funktionieren

NSLocationAlwaysUsageDescription
Diese Anwendung benötigt Standortdienste, um zu funktionieren

Ich denke, diese Einträge könnten fehlen, seit ich dieses Projekt in Xcode 5 gestartet habe. Ich vermute, dass Xcode 6 standardmäßige Einträge für diese Schlüssel hinzufügen könnte, habe es aber nicht bestätigt.

Sie finden weitere Informationen zu diesen beiden Einstellungen hier

105voto

JKo Punkte 1260

Um sicherzustellen, dass dies abwärtskompatibel mit iOS 7 ist, sollten Sie überprüfen, ob der Benutzer iOS 8 oder iOS 7 verwendet. Zum Beispiel:

#define IS_OS_8_OR_LATER ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0)

//In ViewDidLoad
if(IS_OS_8_OR_LATER) {
   [self.locationManager requestAlwaysAuthorization];
}

[self.locationManager startUpdatingLocation];

51voto

neo D1 Punkte 1690
- (void)startLocationManager
{
    locationManager = [[CLLocationManager alloc] init];
    locationManager.delegate = self;
    locationManager.distanceFilter = kCLDistanceFilterNone; //whenever we move
    locationManager.desiredAccuracy = kCLLocationAccuracyBest;

    [locationManager startUpdatingLocation];
    [locationManager requestWhenInUseAuthorization]; // Füge diese Zeile hinzu

}

Und zu deiner info.plist Datei enter image description here

30voto

metatheoretic Punkte 1082

Laut den Apple-Dokumenten:

Ab iOS 8 ist das Vorhandensein eines NSLocationWhenInUseUsageDescription oder eines NSLocationAlwaysUsageDescription Schlüsselwerts in der Info.plist-Datei Ihrer App erforderlich. Es ist dann auch notwendig, die Erlaubnis des Benutzers einzuholen, bevor Sie sich für Standortupdates registrieren, entweder durch Aufruf von [self.myLocationManager requestWhenInUseAuthorization] oder [self.myLocationManager requestAlwaysAuthorization] abhängig von Ihrem Bedarf. Der String, den Sie in die Info.plist eingetragen haben, wird dann im anschließenden Dialog angezeigt.

Wenn der Benutzer die Erlaubnis erteilt, läuft alles wie gewohnt. Wenn die Erlaubnis verweigert wird, wird der Delegierte nicht über Standortupdates informiert.

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