⚡ 10-минутный быстрый старт
Мгновенно включите фоновое отслеживание в своем приложении, используя наши высокооптимизированные предварительно созданные профили конфигурации.
Предпочитаете, чтобы ИИ выполнил настройку за вас? Скопируйте нашу подсказку по настройке и вставьте ее в Claude, ChatGPT, Cursor или любой агент кодирования ИИ, работающий в вашем проекте. Он получит последние документы с этого веб-сайта, задаст вам несколько вопросов о вашем приложении (вариант использования, целевые показатели заряда батареи, внутреннюю синхронизацию, требования к соблюдению требований…), а затем автоматически установит и настроит Tracelet для вас.
1. Установите Треслет
flutter pub add tracelet2. Добавьте разрешения платформы.
Настройка iOS (ios/Runner/Info.plist)
Вы должны явно определить описания использования и фоновые режимы, чтобы Apple не могла отклонить ваше приложение или завершить фоновую задачу:
<key>NSLocationWhenInUseUsageDescription</key>
<string>We need your location to track your route.</string>
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>We need background location to record your route even when the app is closed.</string>
<key>NSMotionUsageDescription</key>
<string>Motion detection allows battery-efficient tracking by pausing GPS when stationary.</string>
<key>UIBackgroundModes</key>
<array>
<string>location</string>
<string>fetch</string>
</array>Настройка Android (android/app/src/main/AndroidManifest.xml)
Tracelet автоматически добавляет все необходимые разрешения в ваше скомпилированное приложение (например, ACCESS_FINE_LOCATION, ACCESS_BACKGROUND_LOCATION, FOREGROUND_SERVICE, ACTIVITY_RECOGNITION и т. д.). Вам не нужно вручную добавлять их в манифест.
Если вы хотите удалить какие-либо дополнительные разрешения (например, если вам не требуется обнаружение движения), вы можете удалить их принудительно с помощью слияния манифестов Android. Полное руководство о том, какие разрешения являются обязательными, какие необязательными и как их удалить, см. в разделе Настройка платформы Android.
3. Инициализация и отслеживание
Запустите Tracelet, используя предварительно настроенный Сбалансированный профиль. Это идеальный вариант по умолчанию, который активно отслеживает движение пользователя и полностью отключает GPS, когда он неподвижен, для экономии заряда батареи. Этот код также регистрирует Headless Task, поэтому отслеживание продолжается безупречно, даже если пользователь смахнет приложение!
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:tracelet/tracelet.dart';
// 1. Define a top-level Headless Task to handle events when the app is killed
@pragma('vm:entry-point')
void headlessTask(HeadlessEvent event) {
print('[Headless] Event received while app is killed: ${event.name}');
}
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// 2. Register the headless task BEFORE runApp!
Tracelet.registerHeadlessTask(headlessTask);
// 3. Request permissions required for background tracking natively via Tracelet
if (Platform.isAndroid) {
await Tracelet.requestNotificationAuthorization(); // Required for Android 13+ Foreground Service
await Tracelet.requestMotionAuthorization(); // Required for Motion Detection heuristics
}
final authStatus = await Tracelet.requestLocationAuthorization();
if (authStatus == AuthorizationStatus.deniedForever) {
print("Permissions denied!");
return;
}
// 4. (Optional) Mitigate Aggressive OEM Battery Managers (Xiaomi, Huawei, etc.)
if (Platform.isAndroid) {
final health = await Tracelet.getSettingsHealth();
if (health['isAggressiveOem'] == true) {
await Tracelet.showPowerManager(); // Prompts user to whitelist the app
}
}
// 5. Listen to real-time location events
Tracelet.onLocation((location) {
print('[Tracelet] Location: ${location.coords.latitude}, ${location.coords.longitude}');
});
// 6. Configure Tracelet with the Balanced Profile and Notification settings
await Tracelet.ready(Config.balanced(
url: 'https://api.your-server.com/locations',
headers: {'Authorization': 'Bearer YOUR_TOKEN'},
startOnBoot: true,
stopOnTerminate: false, // Ensures tracking continues when app is swiped away
android: AndroidConfig(
foregroundService: ForegroundServiceConfig(
contentTitle: "Background Tracking",
contentText: "We are tracking your location securely.",
notificationIcon: "mipmap/ic_launcher",
),
),
));
// 7. Start tracking!
await Tracelet.start();
runApp(MyApp());
}Вот и все! Tracelet теперь самостоятельно автоматически обрабатывает фоновое выполнение, эвристику обнаружения движения, автономное кэширование SQLite и сетевую синхронизацию.