8

Ich mache derzeit eine Hybrid-App mit ionic/Cordova. Die App benötigt Funktionalität, bei der das Backend alle 1 Minute mit dem Standort gepingt wird und die Backend-API antwortet, wenn etwas Interessantes in der Nähe ist. Wenn die Antwort ja ist, wird die App eine lokale Benachrichtigung in die Warteschlange stellen, die den Benutzer hoffentlich dazu bringt, die App zu öffnen. Diese Funktion wird benötigt, wenn sich die App im Hintergrundmodus befindet und auch wenn das Telefon gesperrt ist. Die App muss sowohl im App Store als auch in Google Play und Windows Phone implementiert werden können.GPS-Koordinaten im Hintergrund in Cordova App

ich zur Zeit mit einer Kombination dieser drei Plugins:

https://www.npmjs.com/package/cordova-plugin-geolocation - für Standort https://github.com/katzer/cordova-plugin-background-mode - für bg Modus https://github.com/katzer/cordova-plugin-local-notifications - für lokale Benachrichtigungen

Die derzeit auf Android arbeitet, wenn das Gerät nicht ist gesperrt (funktioniert also im Vordergrund- und Hintergrundmodus), aber wenn das Gerät gesperrt ist, können die GPS-Koordinaten nicht abgerufen werden.

Mein Code sieht derzeit wie folgt aus:

 // Enable background worker   
     (cordova as any).plugins.backgroundMode.enable(); 

    intervalPromise = $interval(intervalWork, 30000, 0, false); 

    function intervalWork() { 
     $log.log('Trying to fetch pos'); 

     var options = { maximumAge: 30000, timeout: 30000, enableHighAccuracy: false }; 

     navigator.geolocation.getCurrentPosition(success, 
      err, 
      options); 
    } 

    function success(pos) { 
     $log.log("lat: " + pos.coords.latitude + " long: " + pos.coords.longitude); 

     var Checkin = $resource(ApiDataEndpoint.url + 'checkin/:lat/:lng/', {}); 

     var res= Checkin.get({ lat: pos.coords.latitude, lng: pos.coords.longitude }); 

       if (res) { 

       $cordovaLocalNotification.schedule({ 
        id: 1, 
        title: 'test', 
        text: 'test', 
       }).then(function(result) { 
        $log.log("ok"); 
       }); 
      }; 
     } 

Also ... meine Fragen sind:

1) Wie die Lösung erhalten zu arbeiten, wenn mein Gerät gesperrt ist (die getCurrentPosition auch genannt wird, wenn Gerät gesperrt ist, aber Timeout zurückgibt)?

2) Ist es möglich, diese Lösung unter iOS zu verwenden?

3) Wird eine App auf diese Weise in Google Play und App Store genehmigt?

4) Wenn das Projekt zum Scheitern verurteilt ist, was sind meine Alternativen?

Ich brauche wirklich Hilfe auf diesem!

+0

Ich kann nicht Ihre Fragen beantworten, ob die App genehmigt wird, aber ich denke, dass, wenn Sie können es auf Android zu arbeiten, wird es höchstwahrscheinliche Arbeit auf Ios zu. Wenn dies nicht funktioniert, werden Sie wahrscheinlich eine nativa App zu bauen. Ich denke, man die Macher der App wenden könnte, vielleicht können sie Ihnen sagen, ob dies möglich ist oder nicht. –

Antwort

7

So habe ich zur Zeit eine Anwendung, die die Probleme, alles, was Sie oben und hier aufgeführten Adressen ist das Plugin ich benutze:

https://github.com/mauron85/cordova-plugin-background-geolocation

  1. Das Plugin nutzt watchPosition() ruft getCurrentPosition() nicht ab, da es zu lange dauert, bis das Gerät ständig gepingt wird und mehr Akkuleistung verbraucht wird.

  2. Dies wird definitiv für Android & iOS funktionieren, aber IMHO funktioniert es besser für Android als die letzteren, soweit Präzision und die Keep-Alive-Funktionalität.

  3. Ich habe es in Google Play kein Problem, Apple erlaubt dieses Plugin, es gibt eine Reihe von Apps mit diesem Plugin im Apple Store, aber Apple wird wahrscheinlich zunächst ablehnen und fragen die Apps Absicht der Hintergrundnutzung, Sie Dann muss ich appellieren, was die App im Hintergrund macht und sicherstellen, dass sie nicht unbegrenzt läuft (das war meine Erfahrung).

    a. Sie werden auch sicherstellen wollen, dass Sie den Apple Peeps darauf hinweisen, dass es für den Benutzer eine Möglichkeit gibt, das Hintergrund-Geolocation-Tracking auszuschalten. Ich gehe davon aus, dass es da ist? Das ist ihr Hauptproblem bei der Verwendung des Plugins.

Viel Glück.

+0

Große Antwort. Ich werde versuchen, für diese Lösung zu gehen. – iCediCe

2

Dieses Plugin hat einen großen Führer, wie ein Meteor-Server und cordova verwenden, um zu tun, was Sie brauchen:

zeroasterisk/meteor-cordova-geolocation-background

Es konfiguriert automatisch mit Android und iOS. Für Windows Phone weiß ich nicht.

  1. Meteor konfiguriert dieses Plugin in Cordova (Sie konfigurieren müssen)
  2. Meteor konfiguriert dieses Plugin in Cordova (Sie konfigurieren müssen)
  3. Meteor den Hintergrunddienst auslösen können Geolokalisierung (GPS) erhalten Details
  4. der Service Cordova Hintergrund regelmäßig POSTs es Daten an den Meteor-Server (nicht an den Client Cordova Instanz)
  5. Meteor Server eine Sammlung aktualisieren (oder etwas anderes)
  6. Meteor-Client s yncs mit dem Server
1

Ich stieß auf das gleiche Problem, mit den gleichen Plugins, die Sie verwendet haben. Es stellt sich heraus, dass es sich um ein Gerät Berechtigungen Ausgabe handelt.

Das cordova-plugin-geolocation-Plugin hat nicht die Berechtigung, im Hintergrund zu laufen, und noch wichtiger ist es hat nicht die Erlaubnis, GPS zu verfolgen, während im Hintergrund. Während das cordova-plugin-background-mode-Plugin es erlaubt, Code im Hintergrund auszuführen, können Sie im Hintergrund keine GPS-Koordinaten erhalten.

Die Lösung besteht darin, ein Plugin hinzuzufügen, das unterstützt, die Standortdaten zu erhalten, während die App im Hintergrund. Es gibt mehrere Plugins, die dies unterstützen, einschließlich des mauron85/cordova-plugin-background-geolocation Plugins (wie zuvor vorgeschlagen). Eine Alternative ist das Plugin cordova-custom-config, mit dem Sie Ihre eigenen benutzerdefinierten Berechtigungen festlegen können. Wirklich können Sie jedes Plugin hinzufügen, solange es Hintergrundortdienste unterstützt. Kein zusätzlicher Code ist erforderlich.

Sie überprüfen können, dass Sie die richtigen Berechtigungen haben, indem Sie die App-Einstellungen öffnen (in iOS) und bestätigt, dass die Option „Immer“ zur Verfügung steht.

enter image description here