ユーティリティAPI
Tracelet は、デバッグ、バッテリー権限の管理、および基盤となるハードウェア センサーの検査に役立つ強力なユーティリティ関数のコレクションを公開します。これらは Tracelet で直接使用できる静的メソッドです。
1. ハードウェアと OS の検査
場合によっては、アプリが実行されているデバイスの種類や、ハードウェアが特定の機能 (歩数カウンターなど) をサポートしているかどうかを正確に知る必要があります。
センサーの可用性を取得する
デバイスに物理歩数計 (歩数計)、加速度計、またはジャイロスコープが搭載されているかどうかを確認します。
final sensors = await tl.Tracelet.getSensors();
print('Has Accelerometer: \${sensors.accelerometer}');
print('Has Gyroscope: \${sensors.gyroscope}');
print('Has Step Counter: \${sensors.stepCounter}');デバイス情報の取得
詳細な OEM 文字列を取得します。これは、バックグラウンド制限が厳しい中国の OEM (Huawei、Xiaomi など) を特定するのに非常に役立ちます。
final device = await tl.Tracelet.getDeviceInfo();
print('Manufacturer: \${device.manufacturer}');
print('Model: \${device.model}');
print('OS Version: \${device.version}');2. 電源とバッテリーの管理
バックグラウンドロケーションの最大の敵はOSそのものです。 Tracelet は、OS が現在アプリを調整しているかどうかを検出するメソッドと、ユーザーにそれらの制限を解除するように要求するメソッドを提供します。
省電力モード
ユーザーが「低電力モード」(iOS) または「バッテリー セーバー」(Android) を有効にしているかどうかを検出します。このモードでは、OS は Tracelet をアクティブに強制終了します。
final isPowerSaving = await tl.Tracelet.isPowerSaveMode;
if (isPowerSaving) {
print('Warning: Battery Saver is ON. Tracking will be degraded.');
}バッテリー最適化の免除 (Android)
Android では、信頼性の高いバックグラウンド追跡が必要な場合は、アプリを Doze モードから除外するようにユーザーに依頼する必要があります。 Tracelet は、このための統合 API を提供します。
final isExempt = await tl.Tracelet.isIgnoringBatteryOptimizations();
if (!isExempt) {
// Opens the exact Android settings page to whitelist your app
await tl.Tracelet.openBatterySettings();
}3. ヘルスダッシュボードAPI
ユーザーが追跡が機能しないと苦情を言う場合、GPS を拒否した、Wi-Fi スキャンをオフにした、省電力モードになっているなど、さまざまな原因が考えられます。
Tracelet は、追跡に影響を与える可能性があるすべての単一 OS 設定の大規模な JSON ペイロードをコンパイルします。このペイロードをサーバーにアップロードしてデバッグできます。
final health = await tl.Tracelet.getSettingsHealth();
// Upload to your server or print to console
print('Health Check: \$health');4. ロギングと診断
Tracelet は、包括的な診断ログを内部 SQLite データベース (場所データベースとは別) に直接書き込みます。これは、運用環境で問題をデバッグする場合に非常に役立ちます。
ログを取得する
ログを取得するには 2 つの方法があり、混乱を避けるためにそれらの違いを理解することが重要です。
1. getLogs(int limit) (構造化)
データベースから構造化された List<LogEntry> を返します。これは、ログを構造化 UI (Tracelet Doctor など) で表示する必要がある場合、またはプログラムで処理する必要がある場合に最適です。
// Get the 50 most recent structured log entries
final entries = await tl.Tracelet.getLogs(50);
for (final entry in entries) {
print('[\${entry?.level}] \${entry?.message}');
}2. getLog([SQLQuery query]) (生の文字列)
単一の巨大な文字列として連結されたログを取得します。これは、すべてをコンソールにすばやく出力したり、テキスト ファイルに書き込んだりする場合に最適です。
final logsString = await tl.Tracelet.getLog();
print(logsString);
// Or query specific logs as a string
final errorLogsString = await tl.Tracelet.getLog(
tl.SQLQuery(where: "level = 'ERROR'")
);ログのクリア
保存されているすべてのシステム ログをクリアして、データベース キューをリセットできます。
await tl.Tracelet.clearLogs();カスタムログの書き込み
独自のアプリケーション ログを Tracelet ログ データベースに挿入して、すべてが位置イベントと時系列で完全にインターリーブされるようにすることができます。
await tl.Tracelet.log('INFO', 'User tapped the checkout button');
await tl.Tracelet.log('ERROR', 'Failed to fetch user profile');ログの電子メール送信
ログ データベース全体を電子メールの添付ファイルに簡単にダンプできるため、ユーザーはそれをサポート チームに送信できます。
// Opens the native email client with the logs attached
await tl.Tracelet.emailLog('[email protected]');