2017-07-03 5 views
0

Ich bin derzeit eine mobile App Entwicklung AngularJS/Ionic 3.Hintergrund Geolocation Plugin: Standortbestimmung und Update-Datenbank alle 5 Minuten

Ich muss mit jederzeit verfolgen, wenn meine Benutzer in einem Umkreis von 100 m sind einer bestimmten geolocation (nennen wir es "Home Location". Ich muss jederzeit wissen, welcher Benutzer an seinem Heimatort ist, und wer nicht ist (auch wenn die App im Hintergrund läuft oder geschlossen/beendet ist).

Ich dachte, dies zu realisieren, mit dem Ionic Native Hintergrund-Geolocation-Plugin und der cordova-plugin-background-geolocation. Mein Plan war, die Benutzer Geolocation alle 5 Minuten und co Mpare es nach Hause.

Fall 1) Wenn der Abstand zwischen den beiden Standorten ist < 100m weiß, dass ich der Benutzer „zu Hause“ ist. Ich würde dann den Benutzerknoten in meiner Datenbank (Firebase) aktualisiert den Benutzer als isAtHome: true markieren und einen aktuellen Zeitstempel hinzufügen.

Fall 2) Wenn sich der Benutzer nicht innerhalb von 100m von seinem Heimatort befindet, würde ich ihn als isAtHome: false markieren und einen aktuellen Zeitstempel hinzufügen.

Ich brauche meine Datenbank auch bei den Benutzern nicht bewegen zu aktualisieren, weil ich wissen muß, dass ich ein Stromsignal empfangen. Ansonsten weiß ich nicht, ob er zum Beispiel sein Smartphone nicht bewegt oder ausgeschaltet hat.

Wenn ich wissen will, wer meinen Benutzer ist in seinem Hause Lage, würde ich die isAtHome -attributes überprüfen und, wenn sie auf true gesetzt sind, würde ich die Zeitstempel überprüfen, um sicher zu sein, dass ich up-to Datumsangaben und die Daten wurden innerhalb der letzten 15 Minuten geschrieben.

Ich habe versucht, viele verschiedene Dinge, aber ich bin nicht sicher, wie das Geolokalisierung Plugin mit dem Cordova Hintergrund zu erkennen, und wenn es sogar möglich.

Meine Frage ist:

Ist es möglich, die Benutzer Geolocation alle 5 Minuten zu überprüfen (auch im Hintergrund/terminierten Zustand) und eine Funktion aufrufen, die mein Feuerbasis DB entsprechend aktualisiert? Wie beschrieben, muss ich den Standort auch dann erhalten, wenn sich der Benutzer innerhalb der letzten 5 Minuten nicht bewegt hat.

Wenn es nicht möglich ist: Hat jemand eine Idee, wie die Anforderungen an eine andere Art und Weise zu nähern?

Vielen Dank für Ihre Hilfe!

Antwort

2

Wie in der cordova-plugin-background-geolocation beschrieben sagt, können Sie ein Intervall in Millisekunden für das Plugin konfigurieren Sie den Standort zu erhalten, finden Sie in diesem Beispiel aus dem Plugin Github Seite:

backgroundGeolocation.configure(callbackFn, failureFn, { 
    desiredAccuracy: 10, 
    stationaryRadius: 20, 
    distanceFilter: 30, 
    url: 'http://192.168.81.15:3000/locations', 
    httpHeaders: { 'X-FOO': 'bar' }, 
    maxLocations: 1000, 
    // Android only section 
    locationProvider: backgroundGeolocation.provider.ANDROID_ACTIVITY_PROVIDER, 
    interval: 60000, // <-- here 
    fastestInterval: 5000, 
    activitiesInterval: 10000, 
    notificationTitle: 'Background tracking', 
    notificationText: 'enabled', 
    notificationIconColor: '#FEDD1E', 
    notificationIconLarge: 'mappointer_large', 
    notificationIconSmall: 'mappointer_small' 
}); 

Der Fall dieses Intervall Eigenschaft wird funktioniert nur für Android. Ich würde eine Abhilfe wie folgt sugest:

public getLocation: boolean = true; // CREATE A BOOLEAN TO KNOW IF YOU CAN GET LOCATION 

backgroundGeolocation.start(// i've never used this plugin, so i'm assuming this is what starts de background watcher 
() => { 
    if(getLocation == true){ 
     this.getLocation = false; // SET TO FALSE SO IT DON'T DO YOUR FUNCTION THE NEXT TIME IT GETS THE LOCATION 

     // DO YOUR CODE TO SAVE AND CHECK YOUR DATA 
     // IT'S BETTER IF YOU USE A PROMISE, ASYNC/AWAIT FOR THE SAVING CODE 
     yourSavingCodeFunction().then(() => { 
     setTimeout(()=>{ 
      // AFTER 5 MINUTES, SET THE GETLOCATION TO TRUE SO IT CAN DO YOUR FUNCTION AGAIN 
      this.getLocation = true; 
     }, 500000); 
     }); 
    } 
    }, 
    (error) => { 
    // Tracking has not started because of error 
    // you should adjust your app UI for example change switch element to indicate 
    // that service is not running 
    } 
); 

Wenn Sie nicht über Ihre Fälle gedacht haben 1 und 2 haben wir auf diese arbeiten. Hoffe das hilft oder kann dir ein paar Ideen geben: D

+0

Danke, Gabriel. Ich dachte über eine ähnliche Lösung nach. Doch das Problem ist: Wenn das Gerät nicht seine Position für 20 Minuten nicht ändert, dann ‚yourSavingCodeFunction()‘ wird nicht innerhalb dieses Zeitraums ausgeführt. Also meine Datenbank ist nicht aktualisiert und ich habe keine aktuellen Standortdaten.Wie würde ich dann beispielsweise den Unterschied zwischen einem sich nicht bewegenden Benutzer und einem ausgeschalteten Handy kennen? Wie könnte ich mit Sicherheit sagen, ob der Benutzer zu Hause ist oder nicht? –

+0

Warum können Sie Ihren Standort nicht alle 5 Minuten aktualisieren, auch wenn der Benutzer nicht umgezogen ist? Gibt es einen Punkt, warum Sie nur aktualisieren müssen, nur wenn es sich bewegt und wenn 20 Minuten ohne zu bewegen? Die Aktualisierung selbst dann, wenn der Benutzer nicht verschoben wurde, scheint besser zu sein, da Sie den aktuellen Standort nicht überprüfen und Berechnungen durchführen müssen. –

+0

Eigentlich erlaubt das Plugin nicht, den Standort alle x Minuten für iOS zu aktualisieren, wie der Besitzer hier angibt: https://forum.ionicframework.com/t/get-location-background-and-foreground-every-5 -minutes-for-private-app/31101/9 –

Verwandte Themen