2016-10-21 2 views
4

В моем 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() по-прежнему возвращает истину, которая вызывает наш фон логика.

Я отлаживал это какое-то время, но я не вижу проблемы.

+0

я вижу это сейчас тоже. Вы в конечном итоге его исправили? – shi11i

+0

Мы закончили тем, что использовали еще 3-х сторонний плагин, который не является бесплатным. Я боюсь, что поддержка бесплатных плагинов еще не существует. – MajorT

ответ

-1

Это работало на ios10 для меня.

Добавьте это в info.plist:

<key>NSMotionUsageDescription</key> <string>The app uses accelerometer to increase battery efficiency by intelligently toggling location-tracking</string>

Смежные вопросы