Zum Inhalt springen
trackd.one

App-Analytics

App-Analytics ohne Geräte-IDs

SDKs für Android, iOS, Flutter und React Native. Screens, Events und In-App-Käufe landen im selben Dashboard und im selben Event-Pool wie deine Websites — gehostet in der EU.

Gebaut für Apps — und für Datensparsamkeit

Alle SDKs verhalten sich gleich: ein Format, dieselben Regeln, keine Abhängigkeiten außer dem Nötigsten.

Batching

Events werden im Arbeitsspeicher gesammelt und gebündelt gesendet — spätestens bei 20 Events, nach 30 Sekunden oder wenn die App in den Hintergrund geht.

Offline-Queue

Kurze Funklöcher werden überbrückt: Wiederholung mit exponentiellem Backoff, dieselbe batch_id verhindert Duplikate, Ereignisse behalten ihren Zeitstempel.

Keine Geräte-IDs

Keine ANDROID_ID, keine IDFA/IDFV, keine Werbe-ID, kein Gerätemodell, kein Fingerprinting. Der User-Agent ist neutral (trackd-android/1.1.0).

Session nur im Speicher

Die Session-ID ist zufällig, liegt nur im Arbeitsspeicher und wechselt nach 30 Minuten Inaktivität. Die SDKs schreiben nichts auf das Gerät.

Eine Datei kopieren

Copy-in-Installation ohne Paketmanager: Trackd.kt, Trackd.swift oder trackd.dart ins Projekt — fertig. Pakete in den Registries folgen.

Events für Games

Hilfsmethoden für game_start, level_complete, game_over, ad_view, video_watch und In-App-Käufe — direkt in Funnels und Umsatz auswertbar.

In wenigen Zeilen eingebaut

Einmal beim App-Start initialisieren, danach Screens und Events tracken. YOUR_WEBSITE_ID findest du im Dashboard.

Plattform
MyApp.kt
// Copy Trackd.kt to app/src/main/java/one/trackd/sdk/Trackd.kt
import one.trackd.sdk.Trackd

class MyApp : Application() {
    override fun onCreate() {
        super.onCreate()
        Trackd.init(this, "YOUR_WEBSITE_ID", debug = BuildConfig.DEBUG)
    }
}

// Screens and events
Trackd.screen("Home")
Trackd.event("signup", mapOf("plan" to "pro"))
MyApp.swift
// Add Trackd.swift (+ TrackScreenModifier.swift for SwiftUI) to your app target
import SwiftUI

@main
struct MyApp: App {
    init() {
        Trackd.configure(websiteId: "YOUR_WEBSITE_ID")
    }
    var body: some Scene { WindowGroup { ContentView() } }
}

// Screens and events
Trackd.screen("Home")                     // or .trackScreen("Home") on a SwiftUI view
Trackd.event("signup", data: ["plan": "pro"])
lib/main.dart
// Copy trackd.dart to lib/trackd.dart
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.0.0',
    debug: kDebugMode,
  );
  runApp(MaterialApp(
    navigatorObservers: [TrackdNavigatorObserver()], // automatic screen tracking (named routes)
    home: const HomePage(),
  ));
}

// Events
Trackd.event('signup', {'plan': 'pro'});
analytics.js
import { AppState, Platform } from 'react-native'
import { Trackd } from './lib/trackd.mjs'   // copy-in: https://trackd.one/sdk/trackd.mjs

export const trackd = new Trackd({
  websiteId: 'YOUR_WEBSITE_ID',
  platform: Platform.OS,                   // "ios" | "android"
  appVersion: '1.4.0',
})

// flush when the app goes to the background
AppState.addEventListener('change', (state) => {
  if (state === 'background') trackd.onBackground()
  else if (state === 'active') trackd.onForeground()
})

trackd.screen('Home')
trackd.event('signup', { plan: 'pro' })
ES module
// 1. Download https://trackd.one/sdk/trackd.mjs into your project (e.g. src/lib/trackd.mjs)
import { Trackd } from './lib/trackd.mjs'

const trackd = new Trackd({ websiteId: 'YOUR_WEBSITE_ID', host: 'https://trackd.one' })

trackd.screen('Home')                       // screen / page view
trackd.event('signup', { plan: 'pro' })     // custom event (SDK: event, t.js: trackd.track)
trackd.revenue(9.99, 'EUR', 'order-123')

Was gesendet wird — und was nicht

Jede Anfrage ist ein Batch mit grobem Kontext. Mehr verlässt die App nicht.

POST https://trackd.one/api/collect
{
  "website_id": "8f0c…",
  "batch_id": "Qm3x9TzK0aP7bL2vR8cW1yNe",
  "sent_at": 1760000005000,
  "context": {
    "platform": "android", "app_version": "2.3.1", "os_version": "Android 15",
    "screen": "1080x2400", "language": "de-DE", "device": "mobile",
    "session_id": "k3J9x0aQ7bP2m1LzQ8vT", "sdk": "trackd-android/1.1.0"
  },
  "events": [
    { "type": "screen_view", "name": "Home", "timestamp": 1760000000000 },
    { "type": "event", "event_name": "level_complete", "event_data": { "level": 5 } }
  ]
}

Nie gesendet oder gespeichert

  • Geräte-Kennungen (ANDROID_ID, IDFA, IDFV, Werbe-ID, Install-ID, MAC/IMEI)
  • Gerätemodell oder Seriennummer
  • Cookies, SharedPreferences, UserDefaults oder Dateien
  • Fingerprinting-Signale (Canvas, Schriften, Sensoren)
  • die IP-Adresse — nur ein täglich wechselnder, gesalzener Hash

Deine Aufgabe

Keine personenbezogenen Daten (Namen, E-Mails, Nutzer-IDs) in Screen-Namen oder Event-Daten schreiben — das können die SDKs nicht für dich prüfen.

Datenschutz-Angaben im App Store und bei Google Play

Diese Angaben beschreiben nur das trackd-SDK. Ergänze alles, was deine App sonst noch erhebt.

Google Play — Datensicherheit

  • Erhobene Daten: App-Aktivität → App-Interaktionen (Screens, Events); bei revenue zusätzlich → Sonstige Aktionen
  • Standort → Ungefährer Standort (Land, serverseitig aus der IP abgeleitet)
  • Weitergabe an Dritte: Nein (trackd.one ist dein Auftragsverarbeiter)
  • Verschlüsselung bei der Übertragung: Ja (HTTPS) · Zweck: Analytics
  • Geräte- oder andere IDs: nicht erhoben

Apple — App-Datenschutz

  • Nutzungsdaten → Produktinteraktion: nicht verknüpft, kein Tracking, Zweck Analytics
  • Standort → Grober Standort (Land): nicht verknüpft, kein Tracking
  • Bei revenue: Käufe → Kaufhistorie, nicht verknüpft
  • Tracking: Nein — keine App-Tracking-Transparency-Abfrage durch das SDK
  • PrivacyInfo.xcprivacy liegt bei — Einträge in dein Privacy Manifest übernehmen

Einwilligung: bitte selbst prüfen

Anders als das Web-Script lesen die App-SDKs Geräte- und App-Informationen auf dem Gerät aus (z. B. App- und OS-Version, Bildschirmgröße, Sprache). Ob du dafür nach § 25 TDDDG eine Einwilligung brauchst, musst du für deine App selbst bewerten — wir werben für Apps deshalb bewusst nicht mit „ohne Einwilligung“. Biete in jedem Fall eine Möglichkeit an, die Analyse abzuschalten: setEnabled(false) stoppt das Tracking und verwirft die Warteschlange. Keine Rechtsberatung.

Fragen zu App-Analytics

Wie werden Nutzer ohne Geräte-ID gezählt?
Sessions, Screen-Views und Events sind exakt. „Nutzer“ sind eine Näherung: gezählt wird über einen gesalzenen Hash der IP-Adresse, der täglich wechselt — ein Nutzer pro IP und Tag. Mehrere Personen im selben Netz zählen einmal, ein Wechsel zwischen WLAN und Mobilfunk zählt doppelt, am nächsten Tag wird niemand wiedererkannt.
Was passiert offline?
Events bleiben im Arbeitsspeicher (max. 500, die ältesten fallen zuerst weg) und werden mit Backoff erneut gesendet, sobald wieder Netz da ist. Weil nichts auf die Festplatte geschrieben wird, gehen Events verloren, wenn das System die App beendet, bevor gesendet werden konnte.
Gibt es Pakete für Maven, Swift Package Index, pub.dev oder npm?
Noch nicht — die Pakete folgen. Bis dahin installierst du per Copy-in (eine Quelldatei) oder als lokales Git-/Path-Paket. Alle Downloads stehen in der Dokumentation.
Kann ich Website und App im selben Konto messen?
Ja. Jede Website und jede App ist ein Projekt; alle teilen sich den Event-Pool deines Tarifs. Im Free-Tarif sind zwei Projekte enthalten — zum Beispiel eine Website und eine App.
Funktioniert trackd.one auch für Apps?
Ja. SDKs für Android, iOS, Flutter und JavaScript erfassen Screens und Events im selben Konto — Websites und Apps teilen sich einen Event-Pool. Wichtig: Die App-SDKs lesen Geräte- und App-Informationen auf dem Gerät aus. Ob du dafür eine Einwilligung brauchst, musst du für deine App selbst prüfen.

Deine erste App in wenigen Minuten messen

Starte kostenlos — der Free-Tarif ist ohne Zahlungsdaten nutzbar.