Scroll to top

German (Deutsch) translation by Katharina Grigorovich-Nevolina (you can also view the original English article)

Mit der Veröffentlichung von iOS 4 erhielt das Core Location Framework ein bedeutendes Update, indem es Geofencing unterstützte. Eine Anwendung kann nicht nur benachrichtigt werden, wenn das Gerät einen Geofence betritt oder verlässt, sondern das Betriebssystem benachrichtigt auch, wenn sich die Anwendung im Hintergrund befindet. Diese Ergänzung des Core Location-Frameworks passt perfekt zu Apples Bestreben, Multitasking unter iOS zu unterstützen. Dies eröffnet eine Reihe von Möglichkeiten, z. B. das Ausführen von Aufgaben im Hintergrund durch Geofencing, und genau darum geht es in diesem Tutorial.


Was ist Geofencing?

Geofence

Ein Geofence ist nichts anderes als eine virtuelle Grenze, die einem tatsächlichen Ort im Raum entspricht. In iOS wird ein Geofence durch eine Instanz der CLRegion-Klasse dargestellt, die durch eine Koordinate (Breite und Länge), einen Radius und eine eindeutige Kennung gekennzeichnet ist. Dies bedeutet, dass Geofences unter iOS per Definition kreisförmig sind.

Geofencing

Geofencing ist der Prozess, bei dem ein oder mehrere Geofences überwacht werden und Maßnahmen ergriffen werden, wenn ein bestimmter Geofence betreten oder verlassen wird. Geofencing ist eine Technologie, die sich sehr gut für mobile Geräte eignet. Ein gutes Beispiel ist Apples Reminders-Anwendung. Sie können einer Erinnerung einen Geofence hinzufügen, damit die Anwendung Sie benachrichtigt, wenn Sie sich in der Nähe eines bestimmten Standorts befinden (Abbildung 1). Dies ist unglaublich leistungsfähig und viel intuitiver als die Verwendung herkömmlicher Erinnerungen, die Sie an ein bestimmtes Datum oder eine bestimmte Uhrzeit erinnern.

Geofencing with Core Location: Geofencing in the Apple's Reminders Application - Figure 1

Auf der iOS-Plattform kann Geofencing auf verschiedene Arten implementiert werden. Die einfachste Implementierung besteht darin, das Core Location-Framework zur Überwachung eines oder mehrerer Geofences zu verwenden. Immer wenn das Gerät des Benutzers einen dieser Geofences betritt oder verlässt, wird die Anwendung vom Betriebssystem benachrichtigt. Dies funktioniert auch, wenn die Anwendung nicht im Vordergrund steht. Dies ist entscheidend, wenn Sie Geofencing in einer Anwendung ordnungsgemäß implementieren möchten.

Eine komplexere Implementierung von Geofencing umfasst einen Remote-Server, der den Standort des Geräts des Benutzers verfolgt und Push-Benachrichtigungen an das Gerät des Benutzers sendet, wenn es einen Geofence betritt oder verlässt. Dieser Ansatz ist viel komplizierter und mit einem erheblichen Overhead verbunden. Ein Grund für die Entscheidung für diese Strategie liegt in den Einschränkungen des Core Location Frameworks. Lassen Sie mich erklären, was ich damit meine.


Geofencing unter iOS

Wie ich Ihnen bereits sagte, ist das Core Location Framework für das Geofencing unter iOS verantwortlich. Ortungsdienste sind eng mit Multitasking verbunden, und Geofencing ist keine Ausnahme. Wenn Sie Geofencing im Hintergrund aktivieren, sieht es so aus, als würde Ihre Anwendung weiterhin im Hintergrund ausgeführt. Das Betriebssystem geht jedoch noch einen Schritt weiter, indem es interessierende Bereiche überwacht, selbst wenn die Anwendung inaktiv ist, dh keine Instanz der Anwendung im Hintergrund oder im Vordergrund ausgeführt wird. Der Mechanismus ist nicht so kompliziert. Das Betriebssystem verwaltet eine Liste von Geofences und welche Anwendungen an welchen Geofences interessiert sind. Wenn ein bestimmter Geofence eingegeben oder beendet wird, benachrichtigt das Betriebssystem die entsprechende Anwendung. Der Hauptgrund für diesen Ansatz besteht darin, Batteriestrom zu sparen. Anstatt mehrere Anwendungen im Hintergrund laufen zu lassen und die Ortungsdienste des Geräts zu verwenden, verwaltet das Betriebssystem diese Aufgabe und benachrichtigt eine Anwendung nur bei Bedarf.

Es gibt eine Reihe von Nachteilen, wie Geofencing unter iOS funktioniert. Beispielsweise kann eine Anwendung nicht mehr als zwanzig Regionen oder Geofences überwachen. Dies mag für die meisten Anwendungen ausreichend sein, aber Sie können sich vorstellen, dass diese Obergrenze für einige Anwendungen nicht akzeptabel ist.

Im weiteren Verlauf dieses Tutorials werde ich Ihnen zeigen, wie Sie Geofencing in einer iOS-Anwendung implementieren. Am Ende des Tutorials werde ich einige Vorschläge machen, wie Sie Geofencing nutzen können, um Aufgaben im Hintergrund auszuführen, auch wenn Ihre Anwendung nicht ausgeführt wird.


Schritt 1: Projekteinrichtung

Erstellen Sie ein neues Projekt in Xcode, indem Sie die Einzelansicht Anwendung-Vorlage aus der Liste der Vorlagen auswählen (Abbildung 2). Benennen Sie Ihre Anwendung Geofencing, geben Sie eine Firmenkennung ein, legen Sie das iPhone für die Gerätefamilie fest und aktivieren Sie die Option Storyboards verwenden und Automatische Referenzzählung verwenden. In diesem Projekt werden keine Komponententests verwendet (Abbildung 3). Teilen Sie Xcode mit, wo Sie das Projekt speichern möchten, und klicken Sie auf Erstellen.

Geofencing with Core Location: Choosing a Project Template - Figure 2Geofencing with Core Location: Choosing a Project Template - Figure 2Geofencing with Core Location: Choosing a Project Template - Figure 2
Geofencing with Core Location: Configuring the New Project - Figure 3Geofencing with Core Location: Configuring the New Project - Figure 3Geofencing with Core Location: Configuring the New Project - Figure 3

Da das Core Location Framework das schwere Heben für uns übernehmen wird, müssen wir unser Projekt damit verknüpfen. Wählen Sie das Projekt im Projektnavigator aus und wählen Sie das Geofencing-Ziel aus der Liste der Ziele aus. Wählen Sie oben die Registerkarte "Phasen erstellen" und öffnen Sie die Schublade "Binär mit Bibliotheken verknüpfen". Klicken Sie auf die Schaltfläche mit dem Pluszeichen und wählen Sie CoreLocation.framework aus der Liste der Bibliotheken und Frameworks (Abbildung 4).

Geofencing with Core Location: Linking the Project Against the Core Location Framework - Figure 4Geofencing with Core Location: Linking the Project Against the Core Location Framework - Figure 4Geofencing with Core Location: Linking the Project Against the Core Location Framework - Figure 4

Schritt 2: Benutzeroberfläche

Bevor wir die Benutzeroberfläche erstellen, müssen wir eine Änderung an der MTViewController-Klasse vornehmen. Öffnen Sie die Klassenheaderdatei und ändern Sie die Oberklasse in UITableViewController.

1
#import <UIKit/UIKit.h>

2
3
@interface MTViewController : UITableViewController
4
5
@end

Durch die Verwendung eines Storyboards ist das Erstellen der Benutzeroberfläche schnell und einfach. Öffnen Sie MainStoryboard.storyboard, wählen Sie den Ansichts-Controller aus und löschen Sie ihn aus dem Storyboard. Ziehen Sie einen Tabellenansichts-Controller aus der Objektbibliothek rechts und setzen Sie seine Klasse im Identitätsinspektor auf MTViewController. Öffnen Sie bei weiterhin ausgewähltem Ansichts-Controller das Menü Editor und wählen Sie Einbetten > Navigations-Controller (Abbildung 5).

Geofencing with Core Location: Creating the User Interface - Figure 5Geofencing with Core Location: Creating the User Interface - Figure 5Geofencing with Core Location: Creating the User Interface - Figure 5

Wählen Sie die Prototypzelle des Controllers für die Tabellenansicht aus, geben Sie ihr eine Kennung für GeofenceCell und setzen Sie den Stil der Zelle auf Untertitel (Abbildung 6).

Geofencing with Core Location: Configuring the Table View's Prototype Cell - Figure 6Geofencing with Core Location: Configuring the Table View's Prototype Cell - Figure 6Geofencing with Core Location: Configuring the Table View's Prototype Cell - Figure 6

Die Anwendung muss Geofences hinzufügen und entfernen können. Beginnen wir mit der Erstellung von zwei Schaltflächen. In der viewDidLoad-Methode des View Controllers rufen wir setupView auf, eine Hilfsmethode, mit der wir die Benutzeroberfläche weiter konfigurieren. In setupView erstellen wir eine Schaltfläche zum Hinzufügen eines Geofence basierend auf dem aktuellen Speicherort und eine Schaltfläche zum Bearbeiten der Tabellenansicht.

1
- (void)viewDidLoad {
2
    [super viewDidLoad];
3
4
    // Setup View

5
    [self setupView];
6
}
1
- (void)setupView {
2
    // Create Add Button

3
    self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(addCurrentLocation:)];
4
5
    // Create Edit Button

6
    self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"Edit", nil) style:UIBarButtonItemStyleBordered target:self action:@selector(editTableView:)];
7
}

Schritt 3: Initialisierung

Die CLLocationManager-Klasse ist der Star dieses Tutorials. Der Standortmanager gibt uns die Koordinaten des aktuellen Standorts des Geräts an und ermöglicht uns die Arbeit mit Geofences. Fügen Sie zunächst der Header-Datei des View Controllers eine Import-Anweisung hinzu, um die Header-Dateien des Frameworks zu importieren.

1
#import <UIKit/UIKit.h>

2
#import <CoreLocation/CoreLocation.h>

3
4
@interface MTViewController : UITableViewController
5
6
@end

Wir müssen auch zwei private Immobilien erstellen. Die erste Eigenschaft speichert einen Verweis auf den Standortmanager, eine Instanz der CLLocationManager-Klasse. Um Aktualisierungen vom Standortmanager zu erhalten, muss die MTViewController-Klasse dem CLLocationManagerDelegate-Protokoll entsprechen. Ich werde in wenigen Augenblicken mehr darüber sprechen. Die zweite Eigenschaft ist vom Typ NSArray und dient als Datenquelle für die Tabellenansicht. Es werden die Geofences, Instanzen von CLRegion, gespeichert, die der Standortmanager überwacht. Aus praktischen Gründen habe ich auch eine Hilfsvariable(BOOL) mit dem Namen _didStartMonitoringRegion deklariert. Der Zweck wird etwas später in diesem Tutorial klar.

1
@interface MTViewController () <CLLocationManagerDelegate> {
2
    BOOL _didStartMonitoringRegion;
3
}
4
5
@property (strong, nonatomic) CLLocationManager *locationManager;
6
@property (strong, nonatomic) NSMutableArray *geofences;
7
8
@end

In der awakeFromNib-Methode des View Controllers initialisieren und konfigurieren wir den Standortmanager wie unten gezeigt. Die awakeFromNib-Methode wird an den View Controller gesendet, nachdem jedes Objekt in der NIB-Datei geladen und einsatzbereit ist.

1
- (void)awakeFromNib {
2
    [super awakeFromNib];
3
4
    // Initialize Location Manager

5
    self.locationManager = [[CLLocationManager alloc] init];
6
7
    // Configure Location Manager

8
    [self.locationManager setDelegate:self];
9
    [self.locationManager setDesiredAccuracy:kCLLocationAccuracyHundredMeters];
10
}

Schritt 4: Auffüllen der Tabellenansicht

Zum Auffüllen der Tabellenansicht benötigen wir die Geofences, die das Betriebssystem für uns überwacht. Der Standortmanager behält einen Verweis auf diese Geofences bei, sodass die Geofences nicht selbst gespeichert werden müssen. Ändern Sie die awakeFromNib-Methode wie unten gezeigt. Da die monitoredRegions-Eigenschaft eine Menge ist, muss ein Verweis auf die monitoredRegions-Eigenschaft des Standortmanagers in der geofences-Eigenschaft des Ansichtscontrollers gespeichert werden.

1
- (void)awakeFromNib {
2
    [super awakeFromNib];
3
4
    // Initialize Location Manager

5
    self.locationManager = [[CLLocationManager alloc] init];
6
7
    // Configure Location Manager

8
    [self.locationManager setDelegate:self];
9
    [self.locationManager setDesiredAccuracy:kCLLocationAccuracyHundredMeters];
10
11
    // Load Geofences

12
    self.geofences = [NSMutableArray arrayWithArray:[[self.locationManager monitoredRegions] allObjects]];
13
}

Die Implementierung des Datenquellenprotokolls für die Tabellenansicht hält keine Überraschungen bereit (siehe unten). Wie bereits erwähnt, enthält die geofences-Eigenschaft Instanzen von CLRegion. In jeder Tabellenansichtszelle zeigen wir die Position jeder Region zusammen mit der eindeutigen Kennung der Region an. Wir schauen uns die tableView: commitEditingStyle:forRowAtIndexPath:-Methode später in diesem Tutorial genauer an.

1
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
2
    return self.geofences ? 1 : 0;
3
}
4
5
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
6
    return [self.geofences count];
7
}
8
9
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
10
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:GeofenceCellIdentifier];
11
12
    // Fetch Geofence

13
    CLRegion *geofence = [self.geofences objectAtIndex:[indexPath row]];
14
15
    // Configure Cell

16
    CLLocationCoordinate2D center = [geofence center];
17
    NSString *text = [NSString stringWithFormat:@"%.1f | %.1f", center.latitude, center.longitude];
18
    [cell.textLabel setText:text];
19
    [cell.detailTextLabel setText:[geofence identifier]];
20
21
    return cell;
22
}
23
24
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
25
    return YES;
26
}
27
28
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath {
29
    return NO;
30
}

Vergessen Sie nicht, die statische Zellenkennung oben in der Implementierungsdatei des View Controllers zu deklarieren, wie unten gezeigt.

1
static NSString *GeofenceCellIdentifier = @"GeofenceCell";

Schritt 5: Hinzufügen eines Geofence

Um einen Geofence hinzuzufügen, müssen wir die addCurrentLocation:-Aktion implementieren. Die Implementierung ist ziemlich einfach, wie Sie sehen können. In der addCurrentLocation:-Methode fordern wir die Standortmanagerinstanz auf, Aktualisierungen für den aktuellen Standort des Geräts zu generieren. Wir setzen auch die Hilfsinstanzvariable _didStartMonitoringRegion auf NO. Ich werde den Grund dafür gleich erklären.

1
- (void)addCurrentLocation:(id)sender {
2
    // Update Helper

3
    _didStartMonitoringRegion = NO;
4
5
    // Start Updating Location

6
    [self.locationManager startUpdatingLocation];
7
}

Immer, wenn der Standortmanager Standortaktualisierungen zur Verfügung hat, ruft er die Delegatmethode locationManager:didUpdateLocations: auf, wie unten gezeigt. In dieser Delegatmethode wird zunächst geprüft, ob _didStartMonitoringRegion auf NO gesetzt ist. Dies ist wichtig, da es vorkommen kann, dass Standortaktualisierungen so schnell nacheinander gesendet werden, dass mehrere Geofences für einen Standort erstellt werden. Wir erstellen die Region oder den Geofence (CLRegion) basierend auf dem ersten Standort in der Liste der Standorte, die uns vom Standortmanager zur Verfügung gestellt werden. Der Radius der Region ist auf 250,0 (in Metern) eingestellt. Sie können ihn jedoch jederzeit an Ihre Bedürfnisse anpassen.

1
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations {
2
    if (locations && [locations count] && !_didStartMonitoringRegion) {
3
        // Update Helper

4
        _didStartMonitoringRegion = YES;
5
6
        // Fetch Current Location

7
        CLLocation *location = [locations objectAtIndex:0];
8
9
        // Initialize Region to Monitor

10
        CLRegion *region = [[CLRegion alloc] initCircularRegionWithCenter:[location coordinate] radius:250.0 identifier:[[NSUUID UUID] UUIDString]];
11
12
        // Start Monitoring Region

13
        [self.locationManager startMonitoringForRegion:region];
14
        [self.locationManager stopUpdatingLocation];
15
16
        // Update Table View

17
        [self.geofences addObject:region];
18
        [self.tableView insertRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:([self.geofences count] - 1) inSection:0]] withRowAnimation:UITableViewRowAnimationLeft];
19
20
        // Update View

21
        [self updateView];
22
    }
23
}

Die Kennung der CLRegion-Instanz stellt sicher, dass wir eine überwachte Region von einer anderen unterscheiden können. Wenn wir eine neue Region mit derselben Kennung überwachen würden, würde die alte Region durch die neue Region ersetzt. Um die Überwachung der neuen Region zu starten, senden wir dem Standortmanager eine Nachricht von startMonitoringForRegion: und übergeben die neue Region als Argument. Da die neue Region überwacht wird, wird auch der aktuelle Standort nicht mehr aktualisiert.

Um die Tabellenansicht zu aktualisieren, aktualisieren wir zuerst die Datenquelle und fügen dann eine Zeile am unteren Rand der Tabellenansicht ein. Die Ansicht wird auch durch Aufrufen einer anderen Hilfsmethode, updateView, aktualisiert. Diese Methode führt mehrere Überprüfungen durch und aktualisiert die Ansicht des Ansichtscontrollers entsprechend.

1
- (void)updateView {
2
    if (![self.geofences count]) {
3
        // Update Table View

4
        [self.tableView setEditing:NO animated:YES];
5
6
        // Update Edit Button

7
        [self.navigationItem.rightBarButtonItem setEnabled:NO];
8
        [self.navigationItem.rightBarButtonItem setTitle:NSLocalizedString(@"Edit", nil)];
9
10
    } else {
11
        // Update Edit Button

12
        [self.navigationItem.rightBarButtonItem setEnabled:YES];
13
    }
14
15
    // Update Add Button

16
    if ([self.geofences count] < 20) {
17
        [self.navigationItem.leftBarButtonItem setEnabled:YES];
18
    } else {
19
        [self.navigationItem.leftBarButtonItem setEnabled:NO];
20
    }
21
}

Immer wenn das Gerät des Benutzers eine überwachte Region betritt und verlässt, wird dem Delegierten des Standortmanagers eine Nachricht von locationManager: didEnterRegion: bzw. locationManager: didExitRegion: gesendet. Implementieren Sie beide Delegatenmethoden wie unten gezeigt.

1
- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region {
2
    NSLog(@"%s", __PRETTY_FUNCTION__);
3
}
4
5
- (void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region {
6
    NSLog(@"%s", __PRETTY_FUNCTION__);
7
}

Bevor Sie die Anwendung im iOS-Simulator ausführen, müssen Sie das aktive Schema ändern. Klicken Sie rechts neben der Schaltfläche Stopp auf Geofencing (Abbildung 7) und wählen Sie im Menü die Option Schema bearbeiten. Wählen Sie links die Registerkarte Run Geofencing.app aus und wählen Sie oben die Registerkarte Options (Abbildung 8). Aktivieren Sie das Kontrollkästchen Standort-Simulation zulassen und setzen Sie den Standardstandort auf New York, NY, USA (Abbildung 8). Dies erleichtert das Testen unserer Anwendung.

Geofencing with Core Location: Editing the Active Scheme - Figure 7Geofencing with Core Location: Editing the Active Scheme - Figure 7Geofencing with Core Location: Editing the Active Scheme - Figure 7
Geofencing with Core Location: Enabling Location Simulation - Figure 8Geofencing with Core Location: Enabling Location Simulation - Figure 8Geofencing with Core Location: Enabling Location Simulation - Figure 8

Erstellen und führen Sie die Anwendung im iOS-Simulator aus und fügen Sie eine zu überwachende Region hinzu, indem Sie oben links auf die Schaltfläche Hinzufügen klicken. Sie können den Geofence testen, indem Sie den simulierten Standort des iOS-Simulators ändern (Abbildung 9).

Geofencing with Core Location: Changing the Simulated Location of the iOS Simulator - Figure 9Geofencing with Core Location: Changing the Simulated Location of the iOS Simulator - Figure 9Geofencing with Core Location: Changing the Simulated Location of the iOS Simulator - Figure 9

Schritt 6: Bearbeiten von Geofences

Das Bearbeiten der Geofences ist recht einfach. Beginnen Sie mit der Implementierung der Aktion editTableView: wie unten gezeigt. Wir schalten lediglich den Bearbeitungsmodus der Tabellenansicht um und aktualisieren den Titel der Bearbeitungsschaltfläche.

1
- (void)editTableView:(id)sender {
2
    // Update Table View

3
    [self.tableView setEditing:![self.tableView isEditing] animated:YES];
4
5
    // Update Edit Button

6
    if ([self.tableView isEditing]) {
7
        [self.navigationItem.rightBarButtonItem setTitle:NSLocalizedString(@"Done", nil)];
8
    } else {
9
        [self.navigationItem.rightBarButtonItem setTitle:NSLocalizedString(@"Edit", nil)];
10
    }
11
}

Um einen Geofence aus der Tabellenansicht zu entfernen (und die Überwachung der Region zu beenden), implementieren wir die tableView:commitEditingStyle:forRowAtIndexPath: wie unten gezeigt. Die Implementierung ist nicht kompliziert, wie Sie sehen können. Wir rufen die entsprechende Region aus der Datenquelle ab, weisen den Standortmanager an, die Überwachung dieser Region zu beenden, die Tabellenansicht und ihre Datenquelle zu aktualisieren und die Ansicht zu aktualisieren. Erstellen Sie die Anwendung und führen Sie sie erneut aus, um sie auszuprobieren.

1
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
2
    if (editingStyle == UITableViewCellEditingStyleDelete) {
3
        // Fetch Monitored Region

4
        CLRegion *region = [self.geofences objectAtIndex:[indexPath row]];
5
6
        // Stop Monitoring Region

7
        [self.locationManager stopMonitoringForRegion:region];
8
9
        // Update Table View

10
        [self.geofences removeObject:region];
11
        [self.tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationRight];
12
13
        // Update View

14
        [self updateView];
15
    }
16
}

Ein bisschen Hacking

Entwickler haben jahrelang versucht, die Einschränkungen des iOS-Betriebssystems zu umgehen. Einer der Hacks, mit denen einige Anwendungen eine Anwendung im Hintergrund aktualisieren, ist Geofencing. Dies ist eine offensichtliche Strategie für Anwendungen wie Foursquare oder TomTom. Apple scheint jedoch auch anderen Anwendungen zu erlauben, Geofencing zu verwenden. Instapaper hat diese Strategie beispielsweise vor einiger Zeit umgesetzt. Durch das Definieren eines oder mehrerer Geofences aktualisiert Instapaper Ihre Liste der gespeicherten Artikel im Hintergrund, wenn Sie einen dieser Geofences eingeben. Dies ist eine clevere Strategie, die in einer Reihe von Anwendungsfällen nützlich sein kann.


Statusleiste

Immer wenn eine Anwendung die Ortungsdienste des Geräts aktiv nutzt, wird das Ortungssymbol in der Statusleiste angezeigt. Gleiches gilt für Geofencing. Der Unterschied ist das in Abbildung 10 gezeigte Symbol. Selbst wenn keine Anwendung im Vordergrund ausgeführt wird, wird das Symbol für die umrissenen Ortungsdienste angezeigt, solange eine Anwendung auf dem Gerät Geofencing verwendet.

Geofencing with Core Location: Location Services Icons - Figure 10

Dinge, die Sie beachten sollten

Ich habe in diesem Tutorial nur die absoluten Grundlagen des Geofencing behandelt. Es ist wichtig, einige Dinge zu beachten, bevor Sie Geofencing in einer Anwendung implementieren. Der offensichtlichste Aspekt ist die Privatsphäre. Ein Benutzer kann Ortungsdienste für jede Anwendung deaktivieren, was bedeutet, dass Geofencing nicht in jedem Anwendungsfall garantiert funktioniert. Es ist wichtig, drei Überprüfungen durchzuführen, wenn Sie mit Ortungsdiensten arbeiten:(1) sind Ortungsdienste aktiviert,(2) hat der Benutzer Ihrer Anwendung die Berechtigung zur Nutzung der Ortungsdienste des Geräts erteilt und(3) unterstützt das Gerät Geofencing.

Die erste Frage wird beantwortet, indem der CLLocationManager-Klasse eine Nachricht von locationServicesEnabled gesendet wird. Dies teilt der Anwendung mit, ob auf dem Gerät Ortungsdienste aktiviert sind. Um zu überprüfen, ob Ihre Anwendung die Standortdienste des Geräts nutzen darf, senden Sie dem CLLocationManager eine Nachricht von locationServicesEnabled. Rufen Sie abschließend die Klassenmethode regionMonitoringAvailable von CLLocationManager auf, um zu überprüfen, ob Geofencing auf dem Gerät verfügbar ist. Nicht alle Geräte und Modelle unterstützen Geofencing.


Abschluss

Das Implementieren von Geofencing in einer iOS-Anwendung ist nicht so schwierig, wie Sie sehen können. Ein grundlegendes Verständnis des Core Location Frameworks ist alles, was Sie benötigen, um loszulegen. Das Core Location-Framework ist ein leistungsstarkes Framework und bietet viel mehr nützliche Funktionen, die häufig übersehen oder nicht ausreichend genutzt werden.