GPS-координаты в фоновом режиме в приложении cordova
в настоящее время я делаю гибридное приложение, используя ionic/cordova. Приложение нуждается в функциональности, где он пингует наш бэкэнд с его местоположением каждые 1 минуту или около того, и бэкэнд API ответит, если что-нибудь интересное находится поблизости. Если ответ да, приложение будет стоять в очереди локальное уведомление, которое, надеюсь, заставит пользователя открыть приложение. Эта функция необходима, когда приложение находится в фоновом режиме, даже когда телефон заблокирован. Приложение должно быть развернуто в app store, google play и, в конечном итоге, Windows phone.
в настоящее время я использую комбинацию этих трех плагинов:
https://www.npmjs.com/package/cordova-plugin-geolocation на месте https://github.com/katzer/cordova-plugin-background-mode - для режима bg https://github.com/katzer/cordova-plugin-local-notifications - для локальных уведомлений
в настоящее время работает на Android, когда устройство не заблокировано (т. он работает в режиме переднего плана и фона), но когда устройство заблокировано, оно не может получить координаты GPS.
мой код в настоящее время выглядит так:
// 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");
});
};
}
Так... мои вопросы:
1) Как заставить решение работать, когда мое устройство заблокировано (getCurrentPosition вызывается даже тогда, когда устройство заблокировано, но возвращает тайм-аут)?
2) Можно ли заставить это решение работать на iOS?
3) будет ли приложение сделано таким образом одобрено в google play и app store?
4) Если проект обречен каковы мои альтернативы?
Мне действительно нужна помощь в этом!
3 ответов
В настоящее время у меня есть приложение, которое решает все проблемы, перечисленные выше, и вот плагин, который я использую:
https://github.com/mauron85/cordova-plugin-background-geolocation
плагин использует watchPosition() не getCurrentPosition (), поскольку это занимает слишком много времени, чтобы постоянно пинговать устройство и потребляет больше заряда батареи.
Это определенно будет работать для Android и iOS, но IMHO это работает лучше для Android, чем последний, насколько точность и функциональность keep alive.
-
Я получил его в Google Play нет проблем, Apple не позволяет этот плагин, есть ряд приложений, использующих этот плагин в Apple store, но Apple, вероятно, первоначально отклонить его и спросить приложения намерение фонового использования, то вам придется сделать обращение о том, что приложение делает в фоновом режиме и убедитесь, что он не работает бесконечно (это был мой опыт.)
a. Вы также хотите убедиться, что вы укажете на Apple peeps, что есть способ для пользователя отключить отслеживание геолокации фона. Я предполагаю, что есть? Это их главная проблема с использованием плагина.
удачи.
этот плагин имеет отличное руководство по использованию сервера meteor и cordova, чтобы сделать то, что вам нужно:
zeroasterisk / Метеор-Кордова-геолокация-фон
он настраивается автоматически с android и iOS. Для windows phone я не знаю.
- Meteor настраивает этот плагин в Cordova (вы должны настроить)
- Meteor настраивает этот плагин в Cordova (вы должны настроить)
- метеор может триггер фоновой службы, чтобы получить геолокации (GPS) детали
- фоновая служба Cordova периодически отправляет свои данные на сервер Meteor (а не на экземпляр клиента Cordova)
- Meteor Server может обновить коллекцию (или что-нибудь еще)
- Meteor клиент синхронизируется с сервером
Я столкнулся с такой же проблемой, используя те же плагины, которые вы использовали. Оказывается, это проблемы с разрешениями устройств.
плагин cordova-plugin-geolocation не имеет разрешения на запуск в фоновом режиме, и что более важно это не имеет разрешения на отслеживание GPS в фоновом режиме. Хотя плагин cordova-plugin-background-mode позволяет выполнять код в фоновом режиме, вы не сможете получить GPS координаты в фоновом режиме.
решение, чтобы добавить плагин, который поддерживает получение данных о местоположении, в то время как приложение в фоновом режиме. Есть несколько плагинов, которые поддерживают это, в том числе mauron85 / cordova-плагин-фон-геолокация плагин (как предлагалось ранее). Альтернативой является использование cordova-custom-config плагин, который позволяет определить свои собственные разрешения. действительно Вы можете добавить любой плагин, если он поддерживает фоновые службы определения местоположения. Дополнительный код не требуется.
вы можете проверить, что у вас есть правильные разрешения, открыв Настройки Приложения (в iOS) и подтвердив, что опция "всегда" доступна.