⚡ 10 分間のクイックスタート
高度に最適化された事前構築された構成プロファイルを使用して、アプリ内でバックグラウンド追跡を即座に実行できます。
AI によるセットアップをご希望ですか? セットアップ プロンプトをコピーし、Claude、ChatGPT、Cursor、またはプロジェクト内で動作している AI コーディング エージェントに貼り付けます。この Web サイトから最新のドキュメントを取得し、アプリに関するいくつかの質問 (ユースケース、バッテリーの目標、バックエンドの同期、コンプライアンスのニーズなど) を尋ね、Tracelet を自動的にインストールして構成します。
1.Traceletをインストールする
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 の電源を完全にオフにしてバッテリーを節約する完璧なデフォルトです。このコードは ヘッドレス タスクも登録するため、ユーザーがアプリをスワイプしても追跡は問題なく継続されます。
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 キャッシュ、およびネットワーク同期を完全に単独で自動的に処理するようになりました。