Реализация зон безопасности (Safe Zones) для детского трекера в мобильном приложении
Safe Zones — геофенсинг: приложение должно уведомить родителя, когда ребёнок вышел из школы или пришёл домой. Звучит просто. На практике — задержка уведомления до 5-10 минут, срабатывание при стоянке автобуса у забора школы и ложные тревоги из-за GPS-дрейфа в 50-100 метров в городской застройке.
Как работает геофенсинг на iOS и Android
iOS — CLLocationManager.startMonitoring(for: CLCircularRegion). Система отслеживает до 20 регионов одновременно на одно приложение. Точность определения входа/выхода — около 100-200 метров, задержка — до 3-5 минут. Регионы персистируются системой и продолжают мониториться даже после перезагрузки устройства, что важно для детского трекера.
Android — Geofencing API через GeofencingClient из Google Play Services. Лимит — 100 геофенсов на приложение. Уведомления приходят через PendingIntent в BroadcastReceiver или IntentService. На Android 12+ FINE_LOCATION обязателен для геофенсинга, BACKGROUND_LOCATION — для работы в фоне. Добавление геофенса: GeofencingRequest.Builder с setInitialTrigger(GEOFENCE_TRANSITION_ENTER) и нужным loiteringDelay чтобы отсечь мгновенные проходы мимо.
GPS-дрейф в городе — главная причина ложных тревог
В плотной городской застройке GPS-точность падает до 50-150 метров из-за многолучевого отражения сигнала. Если радиус Safe Zone — 100 метров (типичный двор), дрейф легко выводит точку за границу. Решение: не использовать одну точку, а брать медиану за последние 3-5 измерений перед принятием решения о переходе. На сервере — алгоритм сглаживания трека (Kalman filter или простое скользящее среднее с весами по horizontalAccuracy).
Второй слой защиты: loiteringDelay в Android Geofencing API — 60-120 секунд. Это означает, что DWELL-событие придёт только если устройство находится в зоне указанное время, а не промелькнуло мимо.
Уведомления
Push-уведомление должно прийти родителю максимально быстро. APNs/FCM с high-priority — задержка обычно 1-3 секунды. Но геофенс-событие от системы может появиться с задержкой: iOS гарантирует срабатывание «при следующем значительном движении или обновлении локации», Android в Doze mode — только при выходе из него.
Для критичных уведомлений (выход из зоны ночью) стоит рассматривать дублирование через SMS как fallback — особенно для детей с Android-бюджетниками без стабильного интернета.
Редактирование зон в приложении родителя
UI для Safe Zones: пользователь должен уметь нарисовать зону на карте или задать адрес + радиус. Google Maps SDK и MapKit оба поддерживают overlays для отрисовки круга. Минимальный разумный радиус — 50 метров (иначе слишком много ложных срабатываний), максимальный — 5 км.
Зоны синхронизируются с сервером и пушатся на устройство ребёнка через FCM/APNs data-push, после чего приложение ребёнка перерегистрирует геофенсы. При смене смартфона или переустановке приложения — автоматическая загрузка зон из backend.
Срок реализации модуля Safe Zones: 1-3 недели. Стоимость зависит от количества платформ и интеграции с существующим трекером.







