iOS bietet Entwicklern die Möglichkeit, den Gerätestandort des Benutzers abzurufen und zu verwenden. Der Standortdienst stellt den Benutzerstandort bereit und sendet auch Aktualisierungen, wenn sich dieser Standort ändert. Aus Datenschutz- und Sicherheitsgründen kann dies jedoch nur nach Aufforderung durch den Benutzer erfolgen.
Berechtigungsarten und Genauigkeitsstufe
Der geografische Standort ist eine der vertraulichsten Informationen, die eine App über den Benutzer erhalten kann. Er könnte verwendet werden, um Aktivitäten oder Bewegungen gegen den Willen des Nutzers zu verfolgen. Daher müssen wir vorab um Erlaubnis bitten, bevor wir Standortaktualisierungen erhalten. Der Benutzer kann zulassen, dass der Standort nur einmal verwendet wird, d.h. nur während der aktuellen Sitzung oder dauerhaft, d.h. auch wenn die App im Hintergrund läuft.
Ab iOS 14 wurde von Apple eine zusätzliche Sicherheitsfunktion hinzugefügt, mit der der Benutzer die Standortgenauigkeitsstufe definieren kann. Hier kann der Benutzer entscheiden, eine Standortberechtigung mit reduzierter Genauigkeit zu erteilen. Dies führt dazu, dass ein Standort mit einer Genauigkeit zwischen 1 und 20 km zurückgegeben wird. Beispielsweise benötigt eine Wetter-App nicht den genauen Standort des Benutzers, um die richtige Wettervorhersage abzugeben. Karten- oder Navigations-Apps müssen jedoch den genauen Standort ermitteln.
Nach Benutzerberechtigungen fragen
In diesem Tutorial verwenden wir Xcode 12.1 oder höher, dass das iOS 14 SDK unterstützt. Wenn Du diese Version noch nicht hast, dann laden Dir die neueste Xcode-Version aus dem Mac Appstore herunter und erstelle ein neues iOS-Projekt (weitere Informationen zum Erstellen eines neuen Projekts findest Du in diesem Tutorial). Führe dann folgende Schritte aus:
öffne den File "ViewController.swift"
Importiere vor der class Deklaration den CoreLocation framework und eine locationManager instance:
import CoreLocation
class ViewController: UIViewController {
let locationManager = CLLocationManager()
...
Kreiere eine neue Funktion, um die Benutzerstandortberechtigungen anzufordern
Öffne den File "Info.plist"
Füge einen neuen Eintrag hinzu, wählen "Privacy - Location When In Use Usage Description" und füge einen Text mit einer Begründung für die Standortverwendung hinzu:
Öffne die Datei Main.storyboard und füge einen Button und ein Label hinzu, um die Gerätekoordinaten anzuzeigen und die Variablen in ViewController.swift zu deklarieren. Nenne diese getLocationButton und koordinatenLabel.
Erstelle in ViewController.swift eine neue IBAction Funktion, die beim Tippen auf den getLocationButton nach der Benutzerberechtigung fragt:
@IBAction func getLoation(sender: UIButton) {
if locationManager.authorizationStatus == .notDetermined {
locationManager.requestWhenInUseAuthorization()
} else {
locationManager.startUpdatingLocation()
}
}
Verknüpfe die IBAction Funktion mit dem Button im Storyboard (weitere Informationen dazu in diesem Tutorial).
Der vorherige Code prüft zuerst, ob der Benutzer die Standortberechtigungen bereits erteilt hat. Wenn ja, werden die Standortaktualisierungen sofort abgerufen. Wenn nicht, wird das System-Popup angezeigt, in dem der Benutzer aufgefordert wird, der App zu erlauben, seine geografische Position zu verwenden.
Benutzerantwort verarbeiten und Standortaktualisierungen erhalten
Das Popup für Berechtigungsanforderungen wird vom iOS-System verwaltet. Wir können weder die Darstellung noch das Verhalten ändern. Wir können nur den Beschreibungstext ändern. Diesen haben wir hier schon in der Datei Info.plist hinzugefügt. Wir erhalten aber noch eine Rückmeldung, ob der Benutzer die erforderlichen Berechtigungen erteilt hat oder nicht. Befolge nun folgenden Schritte:
Öffne ViewController.swift
Bearbeite die class Deklaration, um das CLLocationManagerDelegate protocol zu implementieren
class ViewController: UIViewController, CLLocationManagerDelegate {
....
Setzte den locationManager delegate in der viewDidLoad function gleich dem viewController selbst
override func viewDidLoad() {
super.viewDidLoad()
locationManager.delegate = self
}
Implementiere die erste delegate function, die nach Änderungen des Autorisierungsstatus sucht. Diese Funktion wird aufgerufen, wenn der locationManager erstellt wird und auch jedesmal wenn sich der Berechtigungsstatus ändert
func locationManagerDidChangeAuthorization(_ manager: CLLocationManager) {
if manager.authorizationStatus == .authorizedWhenInUse {
manager.startUpdatingLocation()
} else if manager.authorizationStatus == .notDetermined {
coordinatesLabel.text = "Tap the button to ask for permissions"
} else if manager.authorizationStatus == .denied {
coordinatesLabel.text = "User denied permissions"
}
}
implementiere die zweite delegate function, die die Standortaktualisierungen empfängt und die Koordinaten auf dem coordinatesLabel anzeigt:
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
if let location = locations.first {
coordinatesLabel.text = "latitude:\
(location.coordinate.latitude)\nlongitude:\
(location.coordinate.longitude)"
}
}
Diese Funktion erhält den Speicherort, sobald ein Update verfügbar ist. Ein Ort hat verschiedene Attribute wie Höhe, Geschwindigkeit usw.. Er hat auch eine Variable namens coordinate. Diese enthält zwei Dezimalwerte. Einer ist der Breitengrad, der andere ist der Längengrad. Dies sind die Werte, die den geografischen 2D-Standort auf der Erde ohne Berücksichtigung der Höhe definieren.
Du kannst auch diese Werte im Simulator simulieren, indem Du in der Menüleiste auf “Features”, dann auf “Location then Custom Location” klickst. Dort kannst Du die Breiten- und Längengrade eingeben.
Führe jetzt die App aus, klicke auf den Button, um nach der Standortberechtigung zu fragen. Denke daran, dass das Popup für Berechtigungsanforderungen nur einmal angezeigt wird. Wenn Du es erneut sehen möchtest, lösche die App und installiere sie erneut. Du kannst wie immer die Projektdateien hier herunterladen. Happy Coding und bleibe dran!
Du liest: iOS Development Tutorial 8 - Benutzerstandort erhalten
Bình luận