Trektik
Справочник SDK

Мобильные SDK

iOS (Swift), Android (Kotlin) и Flutter. Все три — нативные SDK с офлайн-очередью, трекингом жизненного цикла и флагами функций.

iOS (TrektikSDK 0.1.0)

Swift 5.9+, iOS 14+ / macOS 12+.

iOS SDK выдаётся приватно. Два варианта установки: (A) аккаунт-менеджер даёт доступ к приватному git-репозиторию — вы подключаете через Swift Package Manager(Xcode → File → Add Package Dependencies → git-URL); либо (B) получаете TrektikSDK-0.1.0.xcframework.zip, распаковываете и добавляете в target черезEmbed & Sign.

swift
// после установки (через SPM или XCFramework):
import TrektikSDK

Trektik.shared.configure(apiKey: "pk_...") { config in
    config.trackLifecycleEvents = true
    config.debug = false
}

Trektik.shared.setUserId("user-123")
Trektik.shared.setProjectId(42)

Trektik.shared.track("screen_view", properties: ["screen": "home"])
Trektik.shared.trackRevenue(4990.0, properties: ["currency": "RUB"])
Trektik.shared.identify("user-123", properties: ["email": "u@example.com"])

// Feature flag (async)
let value = await Trektik.shared.getFlag("checkout_v2")

Trektik.shared.flush()
Trektik.shared.shutdown()

При trackLifecycleEvents:

  • Application OpenedUIApplication.didBecomeActiveNotification
  • Application BackgroundeddidEnterBackgroundNotification + flush
  • Application Installed / Application Updated — по $app_version из UserDefaults

Android (ru.trektik:trektik-android 0.1.0)

Kotlin, minSdk 24. Использует AndroidX Lifecycle.

Android SDK выдаётся приватно — аккаунт-менеджер пришлёт trektik-android-0.1.0.aar. Положите в app/libs/.

kotlin
// app/build.gradle.kts
dependencies {
  implementation(files("libs/trektik-android-0.1.0.aar"))
  // транзитивные зависимости — AAR их не приносит:
  implementation("androidx.lifecycle:lifecycle-process:2.8.0")
  implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.8.0")
  implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.9.0")
}
kotlin
import ru.trektik.android.Trektik
import ru.trektik.android.TrektikConfig

class App : Application() {
  override fun onCreate() {
    super.onCreate()
    Trektik.configure(this, "pk_...", TrektikConfig(
      apiKey = "pk_...",
      trackLifecycleEvents = true,
      debug = BuildConfig.DEBUG,
    ))
  }
}

// В любом месте приложения:
Trektik.setUserId("user-123")
Trektik.track("screen_view", mapOf("screen" to "home"))
Trektik.trackRevenue(4990.0, mapOf("currency" to "RUB"))
Trektik.identify("user-123", mapOf("email" to "u@example.com"))

// Feature flag (синхронный — вызывать с фонового треда)
val value = Trektik.getFlag("user-123", "checkout_v2")

Trektik.flush()
Trektik.shutdown()

При trackLifecycleEvents = true:

  • Application OpenedProcessLifecycleOwner.onStart
  • Application BackgroundedonStop + flush
  • Application Installed / Application Updated — сравнение с версией в SharedPreferences

Offline queue в SharedPreferences, восстанавливается при configure().

Flutter (trektik 0.1.0)

Dart >= 3.0, Flutter >= 3.10.

Flutter SDK выдаётся приватно — аккаунт-менеджер даёт доступ к приватному git-репозиторию или присылает архив пакета.

yaml
# pubspec.yaml (вариант 1 — через git с доступом к приватному монорепо)
dependencies:
  trektik:
    git:
      url: git@github.com:AleksandrKlyasyuk/analitycs-service.git
      path: sdk/flutter
      ref: v0.1.0

# либо (вариант 2 — локальный путь после распаковки архива)
# dependencies:
#   trektik:
#     path: packages/trektik
dart
import 'package:flutter/material.dart';
import 'package:trektik/trektik.dart';

Future<void> main() async {
  await Trektik.init(TrektikConfig(
    apiKey: 'pk_...',
    endpoint: 'https://api.trektik.ru',  // по умолчанию
    debug: false,
    autocapture: true,
    flushInterval: 30,       // секунды
    flushSize: 20,
    sessionTimeout: 30,      // minutes
    maxQueueSize: 1000,
  ));
  runApp(MyApp());
}

// В любом месте:
Trektik.instance.track('button_tap', properties: {'screen': 'home'});
Trektik.instance.identify('user-123', properties: {'plan': 'pro'});
Trektik.instance.trackRevenue(4990.0, 'RUB', properties: {'product': 'pro-monthly'});

await Trektik.instance.flush();
await Trektik.instance.reset();
await Trektik.instance.optOut();
await Trektik.instance.optIn();

// Геттеры
Trektik.instance.deviceId;
Trektik.instance.userId;
Trektik.instance.sessionId;
Trektik.instance.isOptedOut;
Trektik.instance.queueLength;

Автотрекинг экранов через NavigatorObserver:

dart
MaterialApp(
  navigatorObservers: [TrektikNavigatorObserver()],
  // ...
);

Шлёт $screen_view с $screen_name при push/replace/pop. Lifecycle: AppLifecycleState.resumedApplication Opened, pausedApplication Backgrounded + flush.

Общие свойства для всех мобильных SDK

  • Offline queue с persistence (UserDefaults / SharedPreferences / shared_preferences).
  • Автоматический device_id, hранится до ручного reset().
  • Сессия с тайм-аутом по неактивности (по умолчанию 30 мин).
  • Feature flag evaluation через getFlag().
  • События автоматически обогащаются $os_name, $os_version, $device_model, $app_version, $app_build.