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

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

🟢 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

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


Смотрите также: Основы геолокации