В моем Cordova проекте я использую комбинацию Cordova-плагин-фона режиме Катцер в и Mauron85 в фона геолокации плагинов, с тем чтобы отслеживать местоположение в фоновом режиме. Оба плагина являются последней стабильной версией.Кордова Фоновый режим геолокации IOS 10
Это отлично работает на Android и ios 8, 9. Но теперь с выпуском ios 10 у нас возникла проблема. Я провел несколько тестов, и кажется, что фоновый плагин не постоянно обновляет режим (фон или передний план) до правильной позиции. Это делает наше приложение очень глючным.
Код, который мы используем, чтобы включить/выключить фоновый режим выглядит следующим образом:
function enableBackgroundMode() {
if ($rootScope.ionicReady && window.cordova && !cordova.plugins.backgroundMode.isEnabled()) {
cordova.plugins.backgroundMode.enable();
}
}
function disableBackgroundMode() {
if ($rootScope.ionicReady && window.cordova && cordova.plugins.backgroundMode.isEnabled()) {
cordova.plugins.backgroundMode.disable();
}
}
function isRunningInBackground() {
return $rootScope.ionicReady && window.cordova && cordova.plugins.backgroundMode.isActive();
}
Когда isRunningInBackground() возвращает истинно, мы называем следующую функцию, чтобы получить пользователю его местоположение в фоновом режиме.
function getCurrentLocationInBackground(interval) {
var deferred = $q.defer();
backgroundGeolocation.configure((location) => {
backgroundGeolocation.finish();
LogService.debug("Latitude: " + location.latitude + ", Longitude: " + location.longitude);
deferred.resolve(location);
}, (error) => {
LogService.error('BackgroundGeoLocation error');
deferred.reject(error);
}, {
desiredAccuracy: 10, //10m accurate
stationaryRadius: 5, // if stationary, device must move beyond 5m to engage background-tracking
distanceFilter: 5, //min distance a device must move before update event is generated
stopOnTerminate: true, // <-- enable this to clear background location settings when the app terminates
notificationTitle: translations['generic.background.tracking.title'],
notificationText: translations['generic.background.tracking.text'],
locationProvider: backgroundGeolocation.provider.ANDROID_ACTIVITY_PROVIDER,
activityType: "AutomotiveNavigation",
interval: interval ? parseInt(interval) : 30000
});
if (window.cordova) {
backgroundGeolocation.start();
}
return deferred.promise;
}
Однако, по КСН 10, если мы ставим наше приложение на заднем плане, и снова вернуться на первый план есть большой шанс, что cordova.plugins.backgroundMode.isActive() по-прежнему возвращает истину, которая вызывает наш фон логика.
Я отлаживал это какое-то время, но я не вижу проблемы.
я вижу это сейчас тоже. Вы в конечном итоге его исправили? – shi11i
Мы закончили тем, что использовали еще 3-х сторонний плагин, который не является бесплатным. Я боюсь, что поддержка бесплатных плагинов еще не существует. – MajorT