🚚 Трекинг местоположения в реальном времени
Для приложений типа “Такси” или “Доставка” важно постоянно обновлять координаты пользователя (курьера) в базе данных, чтобы клиент мог видеть его перемещение.
🟢 1. Принципы работы
- Приложение запускает поток (stream) геолокации.
- Система отслеживает изменение позиции.
- Координаты отправляются в БД только при значимом перемещении (например, > 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
Если приложение свернуто, стандартные потоки могут остановиться. Для работы в фоновом режиме требуются дополнительные разрешения и специальные пакеты.
Смотрите также: Основы геолокации