Windows Phone 8.1 unterstützt Geofencing. Dabei handelt es sich um die Möglichkeit virtuelle Zäune an beliebiger Stelle auf dem Globus festzulegen. Für App Entwickler ist das ganze interessant, da diese eingegrenzten Gebiete dazu benutzt werden können um gezielt Aktionen auszulösen, wenn ein Anwender diesen Bereich betritt.

Beispielszenarien für Geofences

Ein beispielhaftes Szenario zeigt die Möglichkeit am Flughafen an einem bestimmten Gate einen Geofence einzurichten. Würde dann der Anwender diesen Bereich betreten – also am Gate erscheinen – könnte beispielsweise eine Pushnotification an den Teilnehmer geschickt werden, die ihm noch einmal die neusten Informationen zum Flug mitgibt, oder einen Deeplink in die App der Fluggesellschaft beinhaltet, wo vielleicht schon das Online-Ticket wartet.

Ein weiterer naheliegender Anwendungsfall ist das Darstellen von aktuellen, ortsbezogenen Informationen, wenn es um Shopping-Lösungen geht. Man nehme an, man läuft am Lieblings-Fastfood-Lokal vorbei und bekommt automatisch eine Information, dass der leckere Snake-Shake heute nur 1.- statt 5.- kostet. Ohne Interaktion, genau zum richtigen Zeitpunkt – wäre das nicht großartig? Ok – eventuell wäre das auch einfach nur fürchterliches Gespamme. Aber man hat ja als Anwender die Wahl, da diese Geofences natürlich nur von Apps installiert werden können und auch immer nur im Zusammenhang mit einer App funktionieren.

Das heißt:

1. Um Geofences anzulegen, benötige ich eine App
2. Die Geofences einer App können immer nur Hintergrundaktionen genau dieser App auslösen.
3. Ein Deinstallieren der App löscht auch die zugehörigen Geofences

Wie legt man so einen Geofence jetzt an?

Das ist relativ einfach:
Der Konstruktor ist mehrfach überladen und sieht neben den Pflichtparameter (Id und Geoshape) auch unter anderem folgende Konfigurationsmöglichkeiten:

    • wann der Geofence auslösen soll, also ob bei Ein- oder Austritt in oder aus dem Bereich
    • wie schnell der Geofence auslösen soll – ggf. bietet es sich an hier etwas Toleranzzeit verstreichen zu lassen, damit sich der Anwender auch wirklich im gewünschten Bereich befindet und nicht nur versehentlich den Bereich tangiert.
    • Startzeit und Dauer: Damit wäre es möglich vorzugeben, dass die oben genannte Benachrichtigung für das Shake zum Sonderpreis nur zur Mittagszeit kommt, oder dass die Benachrichtigung am Gate nur rund um die Abflugszeit eingeblendet wird.


Gerade der letzte Punkt ist relativ interessant, da wir hier nicht nur ortsbezogen dynamisch mit den Geofences arbeiten können, sondern eben auch im Hinblick auf die Zeit. Natürlich stellt sich dann die folgende Frage:

Wie bekommt man Geofences, die zum einen ortsbezogen sein sollen, zum anderen Zeitbezug vorweisen sollen, aber natürlich auch anwenderabhängig sein müssen, auf das Device, ohne ständig ein Update der App veröffentlichen zu müssen?

Die Antwort ist denkbar einfach – zum Beispiel durch Hintergrundprozesse, die auf dem Endgerät eines bestimmten Nutzers unter bestimmten Umständen ausgelöst werden. Diese könnten wiederum durch Geofences aktiviert werden. Man könnte also einen Geofence einrichten, der bei Aktivierung einen Server anpingt und sich eine Liste von weiteren Geofences geben lässt, die dann eingetragen werden. Die Auswahl dieser Geofences könnte serverseitig durch ein bisschen Server-Magic schon soweit beschränkt sein, dass sie Benutzerverhalten reflektiert und dadurch dem Anwender die “richtigen” Geofences neu angelegt werden. Natürlich muss man dafür das App Manifest entsprechend anpassen, um Hintergrundprozesse zu erm��glichen.

image

Codeseitig ist dafür nicht viel mehr nötig als einen Backgroundtask zu implementieren, der in seiner Run-Methode eben die neuen Fences erstellt und registriert.

async public void Run(IBackgroundTaskInstance taskInstance)
{
// Create new Fence
// Geofence fence = new Geofence(...);

// Add Fence
//GeofenceMonitor.Current.Geofences.Add(fence);
}

Testen

Interessant ist auch das Testen. Testen kann man natürlich, indem man einfach mal mit dem Smartphone durch die Gegend marschiert und dann versucht ein paar Trigger auszulösen. Bequemer ist das im Visual Studio Simulator. Hier kann man die simulierte Location ja per Klick auf die Karte festlegen. Kleiner Hinweis an dieser Stelle: Unbedingt die “Route” Option wählen und dann die festgelegte Route abspielen. Anderenfalls könnten die Geofence-Trigger eventuell nicht auslösen. Falls das Anlegen der Route zu einem Visual Studio Fehler führt (“Unable to create a route between the waypoints”), dann umgeht man das am einfachsten, indem man die Windows Formateinstellungen anpasst – siehe Screenshot.

image

image

 

image

Viel Spaß mit den Geofences!