Ответ 1
Для кого это может касаться, это проблема Служб Google Play, о которой сообщается здесь, и она будет исправлена с версии 13.4.0
Обновление: решено после обновления до Play Services 14.3.66, точность снова до 4 м!
Обновление: это проблема службы Google Play, о которой сообщается здесь, и она будет исправлена с версии 13.4.0.
Мы используем плагин cordova gelocation и метод navigator.geolocation.watchPosition()
с опцией enableHighAccuracy: true
чтобы отслеживать местоположение пользователя и получать наиболее точные результаты.
Наше приложение существует уже более 1 года, и у нас не было проблем с тем, чтобы какое-либо устройство получало очень хорошую точность определения местоположения, 4/6 метров на улице и в ясном небе.
В последнее время многие из наших пользователей сообщают, что они не могут получить точность менее 10 м независимо от того, что они делают.
Мы решили проверить это сами, и мы обнаружили, что та же проблема. Изначально мы думали, что в нашем последнем выпуске были обнаружены некоторые ошибки, мы все трижды проверили, но не внесли изменений в код/зависимости, связанные с геолокацией.
Мы также протестировали более старые версии нашего приложения, где мы уверены, что можно получить точность до 4 м, но, что удивительно, они тоже не работают, точность ограничена на 10 м.
Мы пробовали разные версии Android и можем воспроизвести проблему на любой платформе от 5 (Lollipop) до 8 (Oreo). У нас также есть такая же проблема на iOS 10/11. Опять же, мы не обновляли приложение месяцами.
Есть недавний вопрос об этой же проблеме здесь:
У кого-то есть такая же проблема с использованием нативного кода Android здесь
Кто-нибудь знает что происходит? Это вопрос разрешения? Службы определения местоположения также настроены на высокую точность.
Для полноты мы можем получить точность 3/4 метра, используя старую версию (2.x) этого плагина.
Это единственный путь?
Мы бы предпочли не вводить дополнительную зависимость для чего-то, что работало так хорошо из коробки.
Большое спасибо
Для кого это может касаться, это проблема Служб Google Play, о которой сообщается здесь, и она будет исправлена с версии 13.4.0
Обновление: решено после обновления до Play Services 14.3.66, точность снова до 4 м!
Глядя на исходный код:
Старый плагин (2.x) Источник:
watchPosition: function(success, error, args) {
var win = function() {
var geo = cordova.require('cordova/modulemapper').getOriginalSymbol(window, 'navigator.geolocation');
geo.watchPosition(success, error, {
enableHighAccuracy: args[1]
});
};
exec(win, error, "Geolocation", "getPermission", []);
},
Новый плагин (мастер) Источник:
watchPosition: function(success, error, args) {
var pluginWatchId = utils.createUUID();
var win = function() {
var geo = cordova.require('cordova/modulemapper').getOriginalSymbol(window, 'navigator.geolocation');
pluginToNativeWatchMap[pluginWatchId] = geo.watchPosition(success, error, args);
};
var fail = function() {
if (error) {
error(new PositionError(PositionError.PERMISSION_DENIED, 'Illegal Access'));
}
};
exec(win, fail, "Geolocation", "getPermission", []);
return pluginWatchId;
},
В OLD-коде плагина enableHighAccuracy является логическим значением (arg1 массива).
С новой версией плагина вам нужно передать arg как JSON с указанным флагом: {enableHighAccuracy: true}, чтобы воспроизвести тот же вызов функции geo.watchPosition с высоким точность.
Старый путь:
navigator.geolocation.watchPosition(geolocationSuccess,
geolocationError,
[false,true]);
Новый способ:
navigator.geolocation.watchPosition(geolocationSuccess,
geolocationError,
{ enableHighAccuracy: true });