GPS-Koordinaten im hintergrund in cordova app
Ich bin derzeit dabei ein hybrid-Apps mit ionic/cordova.
Muss die app-Funktionalität, wo es pings unsere backend mit seiner Lage an jedem 1 minute oder so und der backend-API beantworten, wenn etwas Interessantes in der Nähe ist.
Wenn die Antwort ja ist, die app wird in die Warteschlange lokale Benachrichtigung, die hoffentlich die Benutzer die app öffnen.
Diese Funktionalität wird benötigt, wenn die app im hintergrund und auch wenn das Telefon gesperrt ist.
Die app muss in der Lage sein, um eingesetzt werden zu app-store, google play und schließlich windows phone.
Ich bin derzeit mit einer Kombination dieser drei plugins:
https://www.npmjs.com/package/cordova-plugin-geolocation - für die Lage
https://github.com/katzer/cordova-plugin-background-mode - für bg-Modus
https://github.com/katzer/cordova-plugin-local-notifications - für lokale Benachrichtigungen
Diese funktioniert derzeit auf Android, wenn das Gerät nicht gesperrt ist (es funktioniert also im Vordergrund-und hintergrund-Modus), aber wenn das Gerät gesperrt ist es ist nicht in der Lage, um die GPS-Koordinaten.
Mein code sieht derzeit ungefähr so 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, um die Lösung zu arbeiten, wenn mein Gerät gesperrt ist (die getCurrentPosition aufgerufen wird, auch wenn das Gerät gesperrt ist, kehrt aber timeout)?
2) Ist es möglich, um diese Lösung zu arbeiten auf iOS?
3) Wird die app auf diese Weise zugelassen werden, die im google play und app store?
4) Wenn das Projekt zum scheitern verurteilt ist, was sind meine alternativen?
Ich brauche wirklich Hilfe dabei!
- Kann ich nicht beantworten Ihre Fragen darüber, ob oder nicht die app genehmigt wird, aber ich denke, dass, wenn Sie es bekommen können, um die Arbeit an Android, es funktioniert wahrscheinlich auf Ios zu. Wenn dies nicht funktioniert, werden Sie wahrscheinlich haben, um zu bauen eine nativa app. Ich denke, man könnte Kontakt zu den Machern der app, vielleicht können Sie dir sagen ob dies möglich ist oder nicht.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Also ich habe derzeit eine app, behebt alle Probleme, die oben aufgeführt und hier ist das plugin, das ich verwende:
https://github.com/mauron85/cordova-plugin-background-geolocation
Das plugin macht Gebrauch von watchPosition() nicht getCurrentPosition (), wie dieser zu lange dauert, ständig ping das Gerät und verbraucht mehr Strom.
Dies wird definitiv für Android & iOS aber IMHO spielt es sich schöner mit Android als die letztere, so weit wie Genauigkeit und die keep alive-Funktionalität.
Ich habe es in den Google Play-kein problem, die Apple nicht erlaubt, dieses plugin gibt es eine Reihe von apps, die mit diesem plugin in den Apple-store, sondern Apple wird wohl zunächst ablehnen und bitten Sie die apps, die Absicht, hintergrund, Gebrauch, Sie haben dann einen Einspruch erheben, als für das, was die app macht im hintergrund, und stellen Sie sicher, dass es nicht auf unbestimmte Zeit laufen (dies war meine Erfahrung).
ein. Du wirst auch wollen, um sicherzustellen, dass Sie darauf hinweisen das Apple guckt, dass es einen Weg gibt, der Benutzer schaltet die hintergrund-geolocation-tracking ausschalten. Ich nehme an, es ist? Das ist Ihr Hauptproblem mit der Nutzung der plugin.
Glück.
cordova-plugin-background-mode
zucordova-plugin-background-geolocation
? Ich bin mir nicht sicher, was Sie zwei plugins, die Sie kombinieren möchten?Dieses plugin hat eine großartige Anleitung, wie ein meteor server und cordova zu tun, was Sie brauchen:
zeroasterisk/meteor-cordova-geolocation-hintergrund
Konfiguriert es automatisch mit android und iOS. Für windows phone weiß ich nicht.
Traf ich die genaue gleichen Thema, mit den gleichen plugins die man verwendet. Es stellt sich heraus, dass es ist ein Gerät Berechtigungen-Problem.
Cordova-plugin-geolocation plugin nicht über die Berechtigung zum ausführen im hintergrund, und noch wichtiger ist es nicht über die Berechtigung zum GPS-track, während im hintergrund. Während die cordova-plugin-hintergrund-Modus-plugin erlaubt das ausführen von code im hintergrund, Sie werden nicht in der Lage, um GPS-Koordinaten, während in der hintergrund.
Die Lösung ist, ein plugin, das unterstützt, immer die location-Daten, während die app im hintergrund. Es gibt mehrere plugins, die diese unterstützen, einschließlich der mauron85/cordova-plugin-hintergrund-geolocation plugin (wie bereits angedeutet). Eine alternative ist die Nutzung der cordova-custom-config - plugin, das ermöglicht Ihnen, geben Sie Ihre eigenen benutzerdefinierten Berechtigungen. Wirklich können Sie fügen Sie keine plugin, wie lange es unterstützt die hintergrund-Ortungsdienste. Kein zusätzlicher code erforderlich.
Können Sie überprüfen, dass Sie die richtigen Berechtigungen haben, durch das öffnen der app-Einstellungen (in iOS) und bestätigt, dass der "Immer" - option zur Verfügung.