Beim Geofencing wird der aktuelle Standort des Nutzers mit der Nähe des Nutzers zu Orten kombiniert, die für ihn von Interesse sein könnten. Wenn Sie einen Ort von Interesse markieren möchten, geben Sie dessen Breiten- und Längengrad an. Wenn Sie die Nähe zum Standort anpassen möchten, fügen Sie einen Radius hinzu. Der Längen- und Breitengrad sowie der Radius definieren einen Geofence, d. h. einen kreisförmigen Bereich oder Zaun um den gewünschten Ort.
Sie können mehrere aktive Geofences haben, maximal 100 pro App und pro Gerätenutzer. Für jeden Geofence können Sie die Standortdienste auffordern, Ihnen Ereignisse zum Betreten und Verlassen zu senden. Alternativ können Sie eine Dauer innerhalb des Geofence-Bereichs angeben, die gewartet oder verweilt werden soll, bevor ein Ereignis ausgelöst wird. Sie können die Dauer eines Geofence begrenzen, indem Sie eine Ablaufdauer in Millisekunden angeben. Nach Ablauf des Geofence wird er von den Standortdiensten automatisch entfernt.
In dieser Lektion erfährst du, wie du Geofences hinzufügst und entfernst und dann mit einem BroadcastReceiver auf Geofence-Übergänge wartest.
Hinweis:Auf Wear-Geräten nutzen die Geofencing APIs die Energie nicht effizient. Wir empfehlen diese APIs für Wear nicht. Weitere Informationen findest du unter Energie und Akku sparen.
Geofence-Monitoring einrichten
Der erste Schritt beim Anfordern des Geofence-Monitorings besteht darin, die erforderlichen Berechtigungen anzufordern. Wenn Sie Geofencing verwenden möchten, muss Ihre App Folgendes anfordern:
-
ACCESS_FINE_LOCATION -
ACCESS_BACKGROUND_LOCATIONwenn Ihre App auf Android 10 (API-Level 29) oder höher ausgerichtet ist
Weitere Informationen finden Sie im Leitfaden zum Anfordern von Berechtigungen zur Standortermittlung.
Wenn Sie einen BroadcastReceiver verwenden möchten, um auf Geofence-Übergänge zu warten, fügen Sie ein Element hinzu, das den Dienstnamen angibt. Dieses Element muss ein untergeordnetes Element des
<application>-Elements sein:
<application android:allowBackup="true"> ... <receiver android:name=".GeofenceBroadcastReceiver"/> <application/>
Für den Zugriff auf die Standort-APIs musst du eine Instanz des Geofencing-Clients erstellen. So verbinden Sie Ihren Client:
Kotlin
lateinit var geofencingClient: GeofencingClient override fun onCreate(savedInstanceState: Bundle?) { // ... geofencingClient = LocationServices.getGeofencingClient(this) }
Java
private GeofencingClient geofencingClient; @Override public void onCreate(Bundle savedInstanceState) { // ... geofencingClient = LocationServices.getGeofencingClient(this); }
Geofences erstellen und hinzufügen
In Ihrer App müssen Geofences erstellt und hinzugefügt werden. Verwenden Sie dazu die Builder-Klasse der Standort-API zum Erstellen von Geofence-Objekten und die Convenience-Klasse zum Hinzufügen. Außerdem können Sie einen PendingIntent definieren, um die Intents zu verarbeiten, die von den Standortdiensten gesendet werden, wenn Geofence-Übergänge auftreten. Dies wird in diesem Abschnitt gezeigt.
Hinweis:Auf Geräten mit nur einem Nutzer gilt ein Limit von 100 Geofences pro App. Auf Geräten mit mehreren Nutzern gilt ein Limit von 100 Geofences pro App und Gerätenutzer.
Geofence-Objekte erstellen
Erstellen Sie zuerst mit
Geofence.Builder einen Geofence und legen Sie den gewünschten Radius, die Dauer und die Übergangstypen für den Geofence fest. So füllen Sie beispielsweise ein Listenobjekt:
Kotlin
geofenceList.add(Geofence.Builder() // Set the request ID of the geofence. This is a string to identify this // geofence. .setRequestId(entry.key) // Set the circular region of this geofence. .setCircularRegion( entry.value.latitude, entry.value.longitude, Constants.GEOFENCE_RADIUS_IN_METERS ) // Set the expiration duration of the geofence. This geofence gets automatically // removed after this period of time. .setExpirationDuration(Constants.GEOFENCE_EXPIRATION_IN_MILLISECONDS) // Set the transition types of interest. Alerts are only generated for these // transition. We track entry and exit transitions in this sample. .setTransitionTypes(Geofence.GEOFENCE_TRANSITION_ENTER or Geofence.GEOFENCE_TRANSITION_EXIT) // Create the geofence. .build())
Java
geofenceList.add(new Geofence.Builder() // Set the request ID of the geofence. This is a string to identify this // geofence. .setRequestId(entry.getKey()) .setCircularRegion( entry.getValue().latitude, entry.getValue().longitude, Constants.GEOFENCE_RADIUS_IN_METERS ) .setExpirationDuration(Constants.GEOFENCE_EXPIRATION_IN_MILLISECONDS) .setTransitionTypes(Geofence.GEOFENCE_TRANSITION_ENTER | Geofence.GEOFENCE_TRANSITION_EXIT) .build());
In diesem Beispiel werden Daten aus einer Konstantendatei abgerufen. In der Praxis können Apps Geofences dynamisch auf Grundlage des Standorts des Nutzers erstellen.
Geofences und erste Trigger angeben
Im folgenden Snippet werden die Klasse
GeofencingRequest und die verschachtelte Klasse
GeofencingRequestBuilder verwendet, um die zu überwachenden Geofences anzugeben und festzulegen, wie zugehörige Geofence-Ereignisse ausgelöst werden:
Kotlin
private fun getGeofencingRequest(): GeofencingRequest { return GeofencingRequest.Builder().apply { setInitialTrigger(GeofencingRequest.INITIAL_TRIGGER_ENTER) addGeofences(geofenceList) }.build() }
Java
private GeofencingRequest getGeofencingRequest() { GeofencingRequest.Builder builder = new GeofencingRequest.Builder(); builder.setInitialTrigger(GeofencingRequest.INITIAL_TRIGGER_ENTER); builder.addGeofences(geofenceList); return builder.build(); }
In diesem Beispiel werden zwei Geofence-Trigger verwendet. Der Übergang
GEOFENCE_TRANSITION_ENTER wird ausgelöst, wenn ein Gerät einen Geofence betritt, und der Übergang
GEOFENCE_TRANSITION_EXIT, wenn ein Gerät einen Geofence verlässt. Wenn Sie
INITIAL_TRIGGER_ENTER angeben, werden die Standortdienste darüber informiert, dass
GEOFENCE_TRANSITION_ENTER ausgelöst werden soll, wenn sich das Gerät bereits innerhalb des Geofence befindet.
In vielen Fällen ist es besser, stattdessen
INITIAL_TRIGGER_DWELL zu verwenden. Dadurch werden Ereignisse nur ausgelöst, wenn der Nutzer für eine bestimmte Dauer innerhalb eines Geofence anhält.
Dieser Ansatz kann dazu beitragen, „Benachrichtigungsspam“ zu reduzieren, der durch eine große Anzahl von Benachrichtigungen entsteht, wenn ein Gerät Geofences kurzzeitig betritt und verlässt. Eine weitere Strategie, um die besten Ergebnisse mit Ihren Geofences zu erzielen, besteht darin, einen Mindestradius von 100 Metern festzulegen. So wird die Standortgenauigkeit typischer WLANs berücksichtigt und der Stromverbrauch des Geräts reduziert.
Übertragungsempfänger für Geofence-Übergänge definieren
Ein von den Standortdiensten gesendeter Intent kann verschiedene Aktionen in Ihrer App auslösen. Sie sollten jedoch keine Aktivität oder kein Fragment starten, da Komponenten nur als Reaktion auf eine Nutzeraktion sichtbar werden sollten. In vielen Fällen ist ein BroadcastReceiver eine gute Möglichkeit, einen Geofence-Übergang zu verarbeiten. Ein BroadcastReceiver wird aktualisiert, wenn ein Ereignis eintritt, z. B. ein Übergang in einen oder aus einem Geofence, und kann lang andauernde Hintergrundaufgaben starten.
Das folgende Snippet zeigt, wie Sie einen PendingIntent definieren, der einen BroadcastReceiver startet:
Kotlin
class MainActivity : AppCompatActivity() { // ... private val geofencePendingIntent: PendingIntent by lazy { // We use FLAG_UPDATE_CURRENT so that we get the same pending intent back when calling // addGeofences() and removeGeofences(). val flags = PendingIntent.FLAG_UPDATE_CURRENT if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.S) { // Starting on Android S+ the pending intent has to be mutable. flags or PendingIntent.FLAG_MUTABLE } val intent = Intent(this, GeofenceBroadcastReceiver::class.java) PendingIntent.getBroadcast(this, 0, intent, flags) } }
Java
public class MainActivity extends AppCompatActivity { // ... private PendingIntent getGeofencePendingIntent() { // Reuse the PendingIntent if we already have it. if (geofencePendingIntent != null) { return geofencePendingIntent; } // We use FLAG_UPDATE_CURRENT so that we get the same pending intent back when calling // addGeofences() and removeGeofences(). int flags = PendingIntent.FLAG_UPDATE_CURRENT; if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.S) { // Starting on Android S+ the pending intent has to be mutable. flags |= PendingIntent.FLAG_MUTABLE; } Intent intent = new Intent(this, GeofenceBroadcastReceiver.class); geofencePendingIntent = PendingIntent.getBroadcast(this, 0, intent, flags); return geofencePendingIntent; } }
Geofences hinzufügen
Verwenden Sie die Methode
, um Geofences hinzuzufügen.
Geben Sie das GeofencingClient.addGeofences()
GeofencingRequest-Objekt und die PendingIntent an.
Das folgende Snippet zeigt, wie die Ergebnisse verarbeitet werden:
Kotlin
geofencingClient?.addGeofences(getGeofencingRequest(), geofencePendingIntent)?.run { addOnSuccessListener { // Geofences added // ... } addOnFailureListener { // Failed to add geofences // ... } }
Java
geofencingClient.addGeofences(getGeofencingRequest(), getGeofencePendingIntent()) .addOnSuccessListener(this, new OnSuccessListener<Void>() { @Override public void onSuccess(Void aVoid) { // Geofences added // ... } }) .addOnFailureListener(this, new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { // Failed to add geofences // ... } });
Geofence-Übergänge verarbeiten
Wenn die Standortdienste erkennen, dass der Nutzer einen Geofence betreten oder verlassen hat, senden sie den Intent, der im PendingIntent enthalten ist, den Sie in der Anfrage zum Hinzufügen von Geofences angegeben haben. Ein Übertragungsempfänger wie GeofenceBroadcastReceiver erkennt, dass der Intent aufgerufen wurde, und kann dann das Geofencing-Ereignis aus dem Intent abrufen, den Typ der Geofence-Übergänge bestimmen und feststellen, welcher der definierten Geofences ausgelöst wurde. Der Übertragungsempfänger kann eine App anweisen, Hintergrundaufgaben auszuführen, oder bei Bedarf eine Benachrichtigung als Ausgabe senden.
Hinweis:Wenn unter Android 8.0 (API-Level 26) und höher eine App im Hintergrund ausgeführt wird, während ein Geofence überwacht wird, reagiert das Gerät alle paar Minuten auf Geofencing-Ereignisse. Informationen dazu, wie Sie Ihre App an diese Antwortlimits anpassen, finden Sie unter Limits für die Standortermittlung im Hintergrund.
Das folgende Snippet zeigt, wie Sie einen BroadcastReceiver definieren, der eine Benachrichtigung postet, wenn ein Geofence-Übergang stattfindet. Wenn der Nutzer auf die Benachrichtigung klickt, wird die Hauptaktivität der App angezeigt:
Kotlin
class GeofenceBroadcastReceiver : BroadcastReceiver() { // ... override fun onReceive(context: Context?, intent: Intent?) { val geofencingEvent = GeofencingEvent.fromIntent(intent) if (geofencingEvent.hasError()) { val errorMessage = GeofenceStatusCodes .getStatusCodeString(geofencingEvent.errorCode) Log.e(TAG, errorMessage) return } // Get the transition type. val geofenceTransition = geofencingEvent.geofenceTransition // Test that the reported transition was of interest. if (geofenceTransition == Geofence.GEOFENCE_TRANSITION_ENTER || geofenceTransition == Geofence.GEOFENCE_TRANSITION_EXIT) { // Get the geofences that were triggered. A single event can trigger // multiple geofences. val triggeringGeofences = geofencingEvent.triggeringGeofences // Get the transition details as a String. val geofenceTransitionDetails = getGeofenceTransitionDetails( this, geofenceTransition, triggeringGeofences ) // Send notification and log the transition details. sendNotification(geofenceTransitionDetails) Log.i(TAG, geofenceTransitionDetails) } else { // Log the error. Log.e(TAG, getString(R.string.geofence_transition_invalid_type, geofenceTransition)) } } }
Java
public class GeofenceBroadcastReceiver extends BroadcastReceiver { // ... protected void onReceive(Context context, Intent intent) { GeofencingEvent geofencingEvent = GeofencingEvent.fromIntent(intent); if (geofencingEvent.hasError()) { String errorMessage = GeofenceStatusCodes .getStatusCodeString(geofencingEvent.getErrorCode()); Log.e(TAG, errorMessage); return; } // Get the transition type. int geofenceTransition = geofencingEvent.getGeofenceTransition(); // Test that the reported transition was of interest. if (geofenceTransition == Geofence.GEOFENCE_TRANSITION_ENTER || geofenceTransition == Geofence.GEOFENCE_TRANSITION_EXIT) { // Get the geofences that were triggered. A single event can trigger // multiple geofences. List<Geofence> triggeringGeofences = geofencingEvent.getTriggeringGeofences(); // Get the transition details as a String. String geofenceTransitionDetails = getGeofenceTransitionDetails( this, geofenceTransition, triggeringGeofences ); // Send notification and log the transition details. sendNotification(geofenceTransitionDetails); Log.i(TAG, geofenceTransitionDetails); } else { // Log the error. Log.e(TAG, getString(R.string.geofence_transition_invalid_type, geofenceTransition)); } } }
Nachdem das Übergangsereignis über den PendingIntent erkannt wurde, ruft der BroadcastReceiver den Geofence-Übergangstyp ab und prüft, ob es sich um eines der Ereignisse handelt, die die App zum Auslösen von Benachrichtigungen verwendet – in diesem Fall entweder GEOFENCE_TRANSITION_ENTER oder GEOFENCE_TRANSITION_EXIT. Der Dienst sendet dann eine Benachrichtigung und protokolliert die Details der Umstellung.
Geofence-Überwachung beenden
Wenn das Geofence-Monitoring nicht mehr benötigt oder gewünscht wird, kann es beendet werden, um Akkuleistung und CPU-Zyklen auf dem Gerät zu sparen. Du kannst das Geofence-Monitoring in der Hauptaktivität beenden, die zum Hinzufügen und Entfernen von Geofences verwendet wird. Wenn du einen Geofence entfernst, wird er sofort beendet. Die API bietet Methoden zum Entfernen von Geofences, entweder über Anfrage-IDs oder durch Entfernen von Geofences, die mit einem bestimmten PendingIntent verknüpft sind.
Im folgenden Snippet werden Geofences nach PendingIntent entfernt. Dadurch werden alle weiteren Benachrichtigungen gestoppt, wenn das Gerät zuvor hinzugefügte Geofences betritt oder verlässt:
Kotlin
geofencingClient?.removeGeofences(geofencePendingIntent)?.run { addOnSuccessListener { // Geofences removed // ... } addOnFailureListener { // Failed to remove geofences // ... } }
Java
geofencingClient.removeGeofences(getGeofencePendingIntent()) .addOnSuccessListener(this, new OnSuccessListener<Void>() { @Override public void onSuccess(Void aVoid) { // Geofences removed // ... } }) .addOnFailureListener(this, new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { // Failed to remove geofences // ... } });
Sie können Geofencing mit anderen standortbezogenen Funktionen kombinieren, z. B. mit regelmäßigen Standortaktualisierungen. Weitere Informationen finden Sie in den anderen Lektionen dieses Kurses.
Best Practices für Geofencing verwenden
In diesem Abschnitt finden Sie Empfehlungen zur Verwendung von Geofencing mit den Standort-APIs für Android.
Stromverbrauch reduzieren
Mit den folgenden Methoden können Sie den Stromverbrauch in Ihren Apps optimieren, die Geofencing verwenden:
Legen Sie für die Reaktionsfähigkeit von Benachrichtigungen einen höheren Wert fest. Dadurch wird der Stromverbrauch verbessert, da die Latenz von Geofence-Benachrichtigungen erhöht wird. Wenn Sie beispielsweise einen Reaktionswert von fünf Minuten festlegen, prüft Ihre App nur alle fünf Minuten, ob eine Benachrichtigung zum Betreten oder Verlassen vorliegt. Niedrigere Werte bedeuten nicht unbedingt, dass Nutzer innerhalb dieses Zeitraums benachrichtigt werden. Wenn Sie beispielsweise einen Wert von 5 Sekunden festlegen, kann es etwas länger dauern, bis die Benachrichtigung eingeht.
Verwenden Sie einen größeren Geofence-Radius für Orte, an denen sich ein Nutzer viel aufhält, z. B. zu Hause oder am Arbeitsplatz. Ein größerer Radius reduziert den Stromverbrauch zwar nicht direkt, aber er verringert die Häufigkeit, mit der die App prüft, ob der Nutzer den Bereich betritt oder verlässt. Dadurch wird der Gesamtstromverbrauch effektiv gesenkt.
Wählen Sie den optimalen Radius für Ihren Geofence aus.
Die besten Ergebnisse erzielen Sie, wenn Sie den Mindestradius des Geofence auf 100 bis 150 Meter festlegen. Wenn WLAN verfügbar ist, liegt die Standortgenauigkeit normalerweise zwischen 20 und 50 Metern. Wenn die Ortung in Gebäuden verfügbar ist, kann die Genauigkeit bis zu 5 Meter betragen. Wenn Sie nicht wissen, ob die Indoor-Standortermittlung innerhalb des Geofence verfügbar ist, gehen Sie davon aus, dass die WLAN-Standortgenauigkeit etwa 50 Meter beträgt.
Wenn die WLAN-Standortermittlung nicht verfügbar ist, z. B. wenn Sie in ländlichen Gebieten unterwegs sind, ist die Standortgenauigkeit geringer. Der Genauigkeitsbereich kann von mehreren hundert Metern bis zu mehreren Kilometern reichen. In solchen Fällen sollten Sie Geofences mit einem größeren Radius erstellen.
Nutzern erklären, warum Ihre App Geofencing verwendet
Da Ihre App beim Geofencing im Hintergrund auf den Standort zugreift, sollten Sie sich überlegen, wie Ihre App Nutzern Vorteile bietet. Erklären Sie ihnen klar und deutlich, warum Ihre App diesen Zugriff benötigt, um das Verständnis und die Transparenz für die Nutzer zu erhöhen.
Weitere Informationen zu Best Practices für den Standortzugriff, einschließlich Geofencing, finden Sie auf der Seite Best Practices für den Datenschutz.
Übergangstyp „Verweilen“ verwenden, um Spam-Benachrichtigungen zu reduzieren
Wenn Sie viele Benachrichtigungen erhalten, wenn Sie kurz an einem Geofence vorbeifahren, können Sie die Anzahl der Benachrichtigungen am besten reduzieren, indem Sie den Übergangstyp
GEOFENCE_TRANSITION_DWELL anstelle von
GEOFENCE_TRANSITION_ENTER verwenden. So wird die Verweilbenachrichtigung nur gesendet, wenn der Nutzer für einen bestimmten Zeitraum innerhalb eines Geofence anhält. Sie können die Dauer festlegen, indem Sie eine
Verzögerung für das Herumlungern festlegen.
Geofences nur bei Bedarf neu registrieren
Registrierte Geofences werden im Prozess com.google.process.location des Pakets com.google.android.gms gespeichert.
Die App muss nichts tun, um die folgenden Ereignisse zu verarbeiten, da das System Geofences nach diesen Ereignissen wiederherstellt:
- Die Google Play-Dienste wurden aktualisiert.
- Die Google Play-Dienste werden aufgrund von Ressourcenbeschränkungen vom System beendet und neu gestartet.
- Der Standortprozess stürzt ab.
Die App muss Geofences neu registrieren, wenn sie nach den folgenden Ereignissen noch benötigt werden, da das System die Geofences in den folgenden Fällen nicht wiederherstellen kann:
- Das Gerät wird neu gestartet. Die App sollte auf die Aktion „Boot abgeschlossen“ des Geräts warten und dann die erforderlichen Geofences neu registrieren.
- Die App wird deinstalliert und neu installiert.
- Die Daten der App werden gelöscht.
- Die Daten der Google Play-Dienste werden gelöscht.
- Die App hat eine
GEOFENCE_NOT_AVAILABLE-Warnung erhalten. Das passiert normalerweise, nachdem der NLP (Network Location Provider) von Android deaktiviert wurde.
Fehlerbehebung beim Geofence-Eintrittsereignis
Wenn Geofences nicht ausgelöst werden, wenn das Gerät einen Geofence betritt (die
GEOFENCE_TRANSITION_ENTER-Benachrichtigung wird nicht ausgelöst), prüfen Sie zuerst, ob Ihre Geofences wie in diesem Leitfaden beschrieben registriert sind.
Hier sind einige mögliche Gründe, warum Benachrichtigungen nicht wie erwartet funktionieren:
- Der genaue Standort ist innerhalb deines Geofence nicht verfügbar oder dein Geofence ist zu klein. Auf den meisten Geräten verwendet der Geofence-Dienst nur den Netzwerkstandort für das Auslösen von Geofences. Der Dienst verwendet diesen Ansatz, da die Netzwerkortung viel weniger Strom verbraucht, es weniger Zeit in Anspruch nimmt, einzelne Standorte zu ermitteln, und vor allem, weil sie in Innenräumen verfügbar ist.
WLAN ist auf dem Gerät deaktiviert. Wenn WLAN aktiviert ist, kann die Standortgenauigkeit erheblich verbessert werden. Wenn WLAN deaktiviert ist, erhält Ihre Anwendung je nach verschiedenen Einstellungen, einschließlich des Radius des Geofence, des Gerätemodells oder der Android-Version, möglicherweise nie Geofence-Benachrichtigungen. Ab Android 4.3 (API-Level 18) haben wir den Modus „Nur WLAN-Scan“ hinzugefügt. Damit können Nutzer WLAN deaktivieren, aber trotzdem einen guten Netzwerkstandort erhalten. Es empfiehlt sich, den Nutzer aufzufordern und ihm eine Verknüpfung anzubieten, über die er das WLAN oder den Modus „Nur WLAN-Suche“ aktivieren kann, wenn beide deaktiviert sind. Verwenden Sie SettingsClient, um sicherzustellen, dass die Systemeinstellungen des Geräts für eine optimale Standortermittlung richtig konfiguriert sind.
Hinweis : Wenn deine App auf Android 10 (API-Level 29) oder höher ausgerichtet ist, kannst du
WifiManager.setEnabled()nur dann direkt aufrufen, wenn deine App eine System-App oder ein Geräterichtlinien-Controller (DPC) ist. Verwenden Sie stattdessen einen Einstellungsbereich.- Innerhalb des Geofence ist keine zuverlässige Netzwerkverbindung verfügbar. Wenn keine zuverlässige Datenverbindung besteht, werden möglicherweise keine Benachrichtigungen generiert. Das liegt daran, dass der Geofence-Dienst vom Netzwerkstandortanbieter abhängt, der wiederum eine Datenverbindung benötigt.
- Benachrichtigungen können verspätet sein. Der Geofence-Dienst führt keine kontinuierliche Abfrage des Standorts durch. Daher kann es beim Empfang von Benachrichtigungen zu einer gewissen Latenz kommen. Normalerweise beträgt die Latenz weniger als 2 Minuten, sogar noch weniger, wenn sich das Gerät bewegt hat. Wenn Einschränkungen für die Standortermittlung im Hintergrund gelten, beträgt die Latenz im Durchschnitt etwa 2–3 Minuten. Wenn das Gerät längere Zeit nicht bewegt wurde, kann sich die Latenz erhöhen (bis zu 6 Minuten).
Zusätzliche Ressourcen
Weitere Informationen zum Geofencing finden Sie in den folgenden Materialien:
Beispiele
Beispiel-App zum Erstellen und Überwachen von Geofences.