Zum Inhalt springen
trackd.one

Apps

Flutter

Analytics für Flutter-Apps und -Games auf Android, iOS, macOS, Windows, Linux und Web. Einzige Abhängigkeit — das http-Paket.

Überblick

  • Keine Geräte-Kennungen, keine Werbe-IDs, kein Gerätemodell, kein Fingerprinting.
  • Nichts wird auf das Gerät geschrieben (keine shared_preferences, keine Dateien). Events und Session-ID liegen nur im Arbeitsspeicher.
  • Gebündelte Übertragung mit automatischer Wiederholung und neutralem User-Agent: trackd-flutter/<version>.

Voraussetzungen: Flutter 3.10+ (Dart 3.0+).

Installation

Das pub.dev-Paket folgt. Bis dahin:

  1. Lade trackd.dart herunter und lege sie unter lib/trackd.dart ab.
  2. Füge die einzige Abhängigkeit hinzu: flutter pub add http.
  3. Importiere sie relativ: import 'trackd.dart';.
# pubspec.yaml — trackd.dart braucht nur das http-Paket
dependencies:
  http: ^1.2.0

Plattform-Einrichtung — nicht überspringen

Android: Release-Builds brauchen die Internet-Berechtigung in android/app/src/main/AndroidManifest.xml — Flutter fügt sie nur den Debug- und Profile-Manifesten hinzu:

<uses-permission android:name="android.permission.INTERNET" />

macOS: Füge das Entitlement in macos/Runner/DebugProfile.entitlements und Release.entitlements hinzu:

<key>com.apple.security.network.client</key>
<true/>

iOS, Windows, Linux: nichts zu tun. Web: Requests tragen einen Origin-Header — die App muss unter der registrierten Domain laufen.

Einrichten

import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'trackd.dart';

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  Trackd.init(
    websiteId: 'YOUR_WEBSITE_ID',
    appVersion: '1.2.0',              // z. B. aus package_info_plus
    debug: kDebugMode,
  );
  runApp(MaterialApp(
    navigatorObservers: [TrackdNavigatorObserver()],   // automatisches Screen-Tracking
    routes: {'/': (_) => const HomePage(), '/settings': (_) => const SettingsPage()},
  ));
}

platform, screen, language und device werden aus der Flutter-Engine ermittelt; du kannst jeden Wert in init überschreiben.

API

Trackd.screen('Home');                                  // Screen-View (Alias: screenView)
Trackd.screen('Settings/Profile', title: 'Profile');
Trackd.event('signup', {'plan': 'pro', 'trial': true});
Trackd.revenue(4.99, currency: 'EUR', orderId: 'order-123');  // → Event "purchase"
await Trackd.flush();
Trackd.setEnabled(false);                               // Opt-out: stoppen + Warteschlange leeren

// Hilfsmethoden für Games & Medien
Trackd.gameStart(level: 1, mode: 'hard');
Trackd.levelComplete(5, score: 1200, timeMs: 45000);
Trackd.gameOver(3, reason: 'fell');
Trackd.videoWatch('intro', durationMs: 30000, completed: true);
Trackd.adView('rewarded', adId: 'ad-1');
Trackd.tutorialStep(2, 5, skipped: false);

Event-Daten müssen flach sein (String, num, bool); das JSON ist auf 4 KB begrenzt.

Screen-Tracking

TrackdNavigatorObserver trackt jede benannte Route bei push, replace und pop (Dialoge und Bottom Sheets werden ignoriert). Routen mit Parametern bildest du auf generische Namen ab — nie Nutzerdaten senden:

TrackdNavigatorObserver(
  nameExtractor: (settings) => settings.name?.replaceAll(RegExp(r'/\d+'), '/:id'),
)

go_router: GoRouter(observers: [TrackdNavigatorObserver()], …) und gib deinen GoRoutes einen name. Ohne benannte Routen trackst du manuell in initState mit Trackd.screen('Checkout').

Store-Angaben

Google Play: App-Aktivität → App-Interaktionen + Standort → Ungefährer Standort, Analytics, nicht weitergegeben, keine Geräte-IDs. App Store: Produktinteraktion + Grober Standort, nicht verknüpft, kein Tracking (Einträge in das PrivacyInfo.xcprivacy deiner iOS-App übernehmen).

Lebenszyklus, Batching, Sessions

  • Ein WidgetsBindingObserver sendet die Warteschlange, wenn die App pausiert/versteckt wird, und startet eine neue Session nach 30 Minuten im Hintergrund.
  • Senden bei 20 Events, 30 s nach einem Event und bei flush(); max. 50 Events / 60 KB pro Request, max. 500 in der Warteschlange.
  • Netzwerkfehler, 5xx, 408, 429 → exponentielles Backoff (1 s … 5 min); derselbe Batch wird mit derselben batch_id erneut gesendet.

In wenigen Minuten startklar

Kostenloses Konto erstellen, Website oder App hinzufügen, Snippet kopieren.

Kostenlos starten