API утилиты
Tracelet предоставляет набор мощных служебных функций, которые помогут вам отлаживать, управлять разрешениями на использование батареи и проверять базовые аппаратные датчики. Это статические методы, доступные непосредственно в Tracelet.
1. Проверка оборудования и ОС
Иногда вам нужно точно знать, на каком устройстве работает приложение или поддерживает ли оборудование определенные функции (например, счетчик шагов).
Получение доступности датчика
Проверьте, есть ли на устройстве физический счетчик шагов (шагомер), акселерометр или гироскоп.
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. Управление питанием и аккумулятором
Самый большой враг фонового местоположения — это сама ОС. Tracelet предоставляет методы определения того, регулирует ли ОС в данный момент ваше приложение, а также методы, позволяющие попросить пользователя снять эти ограничения.
Режим энергосбережения
Определите, включил ли пользователь «Режим низкого энергопотребления» (iOS) или «Экономия заряда батареи» (Android). В этом режиме ОС будет активно убивать Tracelet.
final isPowerSaving = await tl.Tracelet.isPowerSaveMode;
if (isPowerSaving) {
print('Warning: Battery Saver is ON. Tracking will be degraded.');
}Исключения по оптимизации батареи (Android)
На Android вы должны попросить пользователя вывести ваше приложение из режима ожидания, если вы хотите надежного фонового отслеживания. 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 компилирует массивную полезную нагрузку JSON для каждого отдельного параметра ОС, который может повлиять на отслеживание. Вы можете загрузить эту полезную нагрузку на свой сервер для отладки.
final health = await tl.Tracelet.getSettingsHealth();
// Upload to your server or print to console
print('Health Check: \$health');4. Журналирование и диагностика
Tracelet записывает подробные журналы диагностики непосредственно во внутреннюю базу данных SQLite (отдельно от базы данных местоположений). Это неоценимо для устранения проблем в производстве.
Получить журналы
Есть два способа получения логов, и важно понимать разницу между ними, чтобы не запутаться:
1. getLogs(int limit) (структурированный)
Возвращает структурированный List<LogEntry> из базы данных. Это лучше всего подходит, когда вам нужно отображать журналы в структурированном пользовательском интерфейсе (например, 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]');