Для людей, которые сталкиваются с той же проблемой, что и я, здесь есть обходной путь, который я придумал.
Я использовал NoSleep.js для воспроизведения видео в фоновом режиме, чтобы убедиться, что мобильный телефон не переходит в режим полного сна. Обязательно добавляйте NoSleep только в том случае, если пользователь взаимодействует с вашим приложением, в противном случае он разряжает только батарею.
var noSleep = new NoSleep();
document.addEventListener('click', enableNoSleep, false);
function enableNoSleep() {
noSleep.enable();
document.removeEventListener('click', enableNoSleep, false);
}
А также обязательно отключите его, используя noSleep.disable();
Каждый раз, когда мое приложение (активная вкладка в Chrome с использованием API видимости страницы ) снова становится активным, я опрашиваю текущее местоположение.
document.addEventListener("visibilitychange", () => {
if (document.visibilityState === "visible") this.getCurrentLocation();
});
Местоположение getCurrentLocation()
будет выдвигать текущее местоположение в Array
, называемом locationHistory
.
Я использую Turf.js , чтобы вычислить расстояние между предыдущим местоположением и текущим местоположением в массиве locationHistory
.
let currentLocation = turf.point(lastpoint);
let previousLocation = turf.point(previouspoint);
let distance = turf.distance(previousLocation, currentLocation);
Я возьму расстояние между текущим местоположением и предыдущим местоположением и добавлю его к своему totalDistance
.
Если у пользователя есть приложение в кармане, и он возвращается «онлайн» (открывает приложение), он принимает расстояние между текущим местоположением и предыдущим местоположением. Он не очень точный (потому что он будет проходить только по прямым линиям между двумя точками (но я провел несколько тестов, и это лучшее, что я могу сделать для веб-приложения. Результат будет более точным, если пользователь запретит вход в телефон) заблокированный режим.
Когда вы нажимаете start, я создаю временную метку на сервере ( Firebase Server Timestamp ), чтобы я знал, когда пользователь начинает отслеживать. Я также знаю, что самый длинный маршрут в системе составляет примерно 11 км, что означает, что он должен пройти через 3 часа.
Я запускаю некоторые облачные функции Firebase, чтобы увидеть, отслеживают ли пользователи отслеживание через 3 часа и отключит ли отслеживание на сервере. Когда пользователь открывает приложение через несколько дней, оно перестает отслеживать клиентскую сторону.
Если вы нашли лучшее решение, пожалуйста, дайте мне знать! Мне любопытно; -)