Реализация GPS-трекинга питомца через мобильное приложение
GPS-трекер на ошейнике кота присылает координату раз в 30 секунд. Хозяин открывает карту — точка стоит на месте уже 10 минут, а кот явно убежал. Проблема не в трекере — он работает. Проблема в том, что приложение не различает «стоит на месте» и «потерял сигнал»: оба состояния выглядят одинаково, если не показывать время последнего обновления и уровень сигнала.
Отображение позиции питомца
Маркер на карте с фото питомца из профиля — это минимум. Рядом нужно показывать: время последнего обновления («2 мин назад»), точность GPS (horizontalAccuracy из пакета трекера), уровень сигнала GSM, заряд батареи. Это четыре поля, которые хозяин хочет видеть без клика на маркер.
Цветовой индикатор свежести данных: зелёный — обновлено < 2 мин, жёлтый — 2–10 мин, красный — >10 мин. Простая логика, но убирает 90% вопросов «а вдруг трекер завис».
Анимация маркера. Когда приходит новая координата — маркер плавно перемещается, не прыгает. На Android: ValueAnimator с LatLngInterpolator.Linear. На iOS: UIView.animate(withDuration: 0.5) на MKAnnotationView.coordinate. В Flutter через google_maps_flutter — обновляем Marker с новой LatLng, плавность через Tween<LatLng> в AnimationController.
Безопасная зона
Круговая геозона вокруг дома — основная функция pet tracker. Пользователь рисует зону прямо на карте: тапает на центр (обычно дом), тянет за ручку для задания радиуса. Рекомендуемый минимум — 50–100 метров, чтобы погрешность GPS не вызывала ложные срабатывания.
Ложные срабатывания — реальная боль. GPS на уровне земли в окружении деревьев даёт «прыжки» до 20–30 метров. Фильтр Калмана на сервере или простое скользящее среднее по последним 3 точкам снижает ложные выходы за зону. Без этого фильтра ночные push-уведомления «Барсик вышел из дома» в 3:00 быстро выключают.
Live tracking
По умолчанию трекер работает в экономном режиме: позиция раз в 5 минут. Хозяин включает live tracking — нажимает кнопку в приложении, сервер отправляет команду трекеру на учащение обновлений (раз в 10–15 секунд). Трекер отвечает подтверждением.
Команда идёт через сервер: POST /trackers/{id}/mode {mode: "live"} → воркер → MQTT publish на топик устройства → трекер отвечает. Мобильный клиент ждёт подтверждения через WebSocket (событие tracker_mode_changed). Таймаут ожидания — 30 секунд, после чего UI показывает «устройство не отвечает».
На экране live tracking — breadcrumb-трек за последние 15–30 минут через Polyline с уменьшающейся непрозрачностью по мере устаревания точек.
Push при выходе из зоны
APNs alert push с sound: default и badge: 1. Содержимое: «Барсик вышел из безопасной зоны — 120 м от дома». Ссылка на карту через deep link в userInfo.
Важно дать пользователю настроить уведомления: отдельный toggle «Уведомлять только с 7:00 до 23:00» — кот может гулять ночью, и хозяин это знает. UNNotificationTrigger с dateMatching или серверная фильтрация по расписанию пользователя.
Сроки
Реализация GPS-трекинга питомца (карта, live tracking, безопасная зона, push-алерты) при готовом API трекера: 4 часа — 2 рабочих дня. Стоимость рассчитывается после уточнения деталей.







