🚚 Трекинг местоположения в реальном времени

Для приложений типа “Такси” или “Доставка” важно постоянно обновлять координаты пользователя (курьера) в базе данных, чтобы клиент мог видеть его перемещение.

🟢 1. Принципы работы

  1. Приложение запускает поток (stream) геолокации.
  2. Система отслеживает изменение позиции.
  3. Координаты отправляются в БД только при значимом перемещении (например, > 500 метров) для экономии трафика и заряда батареи.

🛠 2. Реализация через Custom Action (Firebase)

Ниже представлен код для автоматического обновления локации курьера в Firestore.

import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:geolocator/geolocator.dart';
import 'package:firebase_auth/firebase_auth.dart' as auth;
 
Future startLocationUpdates() async {
 // Настройка параметров обновления
 Geolocator.getPositionStream(
 locationSettings: const LocationSettings(
 accuracy: LocationAccuracy.best,
 distanceFilter: 500, // Обновление только при перемещении на 500 метров
 ),
 ).listen((Position position) {
 // Получение текущего пользователя
 auth.User? user = auth.FirebaseAuth.instance.currentUser;
 if (user == null) return;
 
 // Обновление документа курьера в Firestore
 FirebaseFirestore.instance.collection('couriers').doc(user.uid).set({
 'latitude': position.latitude,
 'longitude': position.longitude,
 'timestamp': FieldValue.serverTimestamp(),
 }, SetOptions(merge: true));
 });
}

💰 Оптимизация расходов (Firebase)

  • Лимиты: В Firebase доступно 2 миллиона бесплатных операций в день.
  • Расчет: Если курьер проехал 5 км, а обновление настроено каждые 500 метров — это всего 10 запросов на запись в БД. Это крайне дешево и эффективно.

⚡️ Продвинутые техники: Background Tracking

Если приложение свернуто, стандартные потоки могут остановиться. Для работы в фоновом режиме требуются дополнительные разрешения и специальные пакеты.


Смотрите также: geoloc-basics